diff --git a/README.md b/README.md index 0c0ce2a3..240e528c 100644 --- a/README.md +++ b/README.md @@ -15,43 +15,6 @@ ### 🏠 [Homepage](README.md) -## An Appeal -## Medusa-Strapi: Embrace the Power of Empathy in Content Management! 🚀 - -Hey there, Supporter! 👋 - -Welcome to the world of Medusa-Strapi, the perfect companion to the MedusaJS e-commerce framework! As we set out to make a lasting impact in the digital realm, we invite you to join our journey and experience the magic of empathetic content management. - -Medusa-Strapi is not just any content management system; it's a heartfelt project that empowers creators and businesses to thrive alongside the MedusaJS e-commerce framework. Together, we're on a mission to simplify content management while embracing the principles of empathy and collaboration. - -### Why We Need Your Help: - -Through Medusa-Strapi, we've already witnessed the profound impact it's had on countless lives. Businesses can now craft compelling stories with ease, while developers find joy in building seamless experiences. Together, we've saved valuable hours, giving individuals the freedom to focus on what truly matters. - -### You Can Make a Difference: - -Your support, no matter the size - whether it's a generous $5 or a magnificent $10 - fuels our quest. With your backing, we can: - -- **Empower Dreams:** Behind every line of code lies a dream - the dream of a developer leaving an indelible mark, a small business flourishing, or a content creator inspiring the world. Your support brings these dreams to life, turning them into awe-inspiring realities. - -- **Craft Simplicity:** We believe in technology that empowers, not complicates. Your kindness helps us build an intuitive content management system, allowing businesses to effortlessly create and manage content. - -- **Celebrate Humanity:** Medusa-Strapi is not just software; it's a vibrant community driven by empathy. Your support strengthens these bonds, fostering a space where ideas flourish, and hearts unite. - -### Join Our Journey: - -Be a part of Medusa-Strapi's story and the FOSS movement. 🌟 Embrace the spirit of openness, collaboration, and shared growth. Together, let's empower this journey, making an indelible impact on countless lives. - -[![GitHub Sponsors](https://img.shields.io/github/sponsors/SGFGOV/medusa-strapi-repo?label=Sponsor%20Medusa-Strapi&style=social)](https://github.com/sponsors/SGFGOV) - -Ready to join the ranks of change-makers? 🚀 Pledge your support or learn more at [github.com/SGFGOV/medusa-strapi-repo](https://github.com/SGFGOV/medusa-strapi-repo). - -Embrace the power of empathy in Medusa-Strapi's journey today! 💫 - -With heartfelt gratitude, - -Govind -Medusa-Strapi Team 🤝 ## Introduction @@ -97,7 +60,9 @@ We support strapi v4.10.5 at the moment with medusa version. ## Install -This is the easiest bit +This is the easiest + +#### NOTE: Please don't use create strapi-app, there will be too many configuration changes 1. Clone the repo. 2. Go to the medusa-strapi folder inside /packages/medusa-strapi @@ -144,3 +109,37 @@ Give a ⭐️ if this project helped you! Catch me on discord @govdiw As you might have guessed by now that considerable time and effort has gone into make this product useful to the community at large, and I'd love to keep maintaining and upgrading this. However, As much as we love FOSS software, nothing in this world is truly free. Please help by [sponsoring or supporting the project]. (https://github.com/sponsors/SGFGOV) *** +## An Appeal +## Medusa-Strapi: Embrace the Power of Empathy in Content Management! 🚀 + +Hey there, Supporter! 👋 + +Welcome to the world of Medusa-Strapi, the perfect companion to the MedusaJS e-commerce framework! As we set out to make a lasting impact in the digital realm, we invite you to join our journey and experience the magic of empathetic content management. + +Medusa-Strapi is not just any content management system; it's a heartfelt project that empowers creators and businesses to thrive alongside the MedusaJS e-commerce framework. Together, we're on a mission to simplify content management while embracing the principles of empathy and collaboration. + +### Why We Need Your Help: + +Through Medusa-Strapi, we've already witnessed the profound impact it's had on countless lives. Businesses can now craft compelling stories with ease, while developers find joy in building seamless experiences. Together, we've saved valuable hours, giving individuals the freedom to focus on what truly matters. + +### You Can Make a Difference: + +Your support, no matter the size - whether it's a generous $5 or a magnificent $10 - fuels our quest. With your backing, we can: + +- **Empower Dreams:** Behind every line of code lies a dream - the dream of a developer leaving an indelible mark, a small business flourishing, or a content creator inspiring the world. Your support brings these dreams to life, turning them into awe-inspiring realities. + +- **Craft Simplicity:** We believe in technology that empowers, not complicates. Your kindness helps us build an intuitive content management system, allowing businesses to effortlessly create and manage content. + +- **Celebrate Humanity:** Medusa-Strapi is not just software; it's a vibrant community driven by empathy. Your support strengthens these bonds, fostering a space where ideas flourish, and hearts unite. + +### Join Our Journey: + +Be a part of Medusa-Strapi's story and the FOSS movement. 🌟 Embrace the spirit of openness, collaboration, and shared growth. Together, let's empower this journey, making an indelible impact on countless lives. + +[![GitHub Sponsors](https://img.shields.io/github/sponsors/SGFGOV/medusa-strapi-repo?label=Sponsor%20Medusa-Strapi&style=social)](https://github.com/sponsors/SGFGOV) + + +With heartfelt gratitude, + +SGFGOV +Medusa-Strapi Team 🤝 diff --git a/package.json b/package.json index 44dbebb2..4874971e 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,15 @@ "**/class-validator": "^0.14.0", "**/engine.io": "^6.4.2", "**/strapi-plugin-multi-country-select": "npm:@sgftech/plugin-multi-country-select", - "**/typescript": "4.9.5" + "**/typescript": "4.9.5", + "**/codemirror": "5.65.11", + "**/protobufjs":"^7.2.4", + "**/tough-cookie":"^4.1.3", + "**/node-fetch":"^2.6.7", + "**/follow-redirects":"^1.14.8", + "**/axios":"0.27.2", + "**/@strapi/utils":"4.12.5", + "**/semver":"^7.5.2" + } } \ No newline at end of file diff --git a/packages/medusa-plugin-strapi-ts/package.json b/packages/medusa-plugin-strapi-ts/package.json index 93029050..8f4040ba 100644 --- a/packages/medusa-plugin-strapi-ts/package.json +++ b/packages/medusa-plugin-strapi-ts/package.json @@ -31,7 +31,7 @@ "devDependencies": { "@medusajs/medusa": "^1.8.2", "@strapi/plugin-users-permissions": "^4.6.1", - "@types/express": "^4.17.14", + "@types/express": "^4.17.17", "@types/jest": "^27.4.0", "@types/jsonwebtoken": "^9.0.0", "@types/node": "^18.11.9", diff --git a/packages/medusa-plugin-strapi-ts/src/api/controllers/content/fetch-content.ts b/packages/medusa-plugin-strapi-ts/src/api/controllers/content/fetch-content.ts index 35e8d6ad..3e0c0827 100644 --- a/packages/medusa-plugin-strapi-ts/src/api/controllers/content/fetch-content.ts +++ b/packages/medusa-plugin-strapi-ts/src/api/controllers/content/fetch-content.ts @@ -1,7 +1,6 @@ import { Request, Response } from 'express'; import { GetFromStrapiParams, AuthInterface } from '../../../types/globals'; import UpdateStrapiService from '../../../services/update-strapi'; -import { ConfigModule } from '@medusajs/medusa/dist/types/global'; export default async (req: Request, res: Response) => { const updateStrapiService = req.scope.resolve('updateStrapiService') as UpdateStrapiService; @@ -16,11 +15,15 @@ export default async (req: Request, res: Response) => { const strapiEntityType = req.params.type; const id = req.params.id; + const urlParams = req.params; + const urlQuery = req.query; const strapiParams: GetFromStrapiParams = { authInterface, strapiEntityType: strapiEntityType, id, + urlParams, + urlQuery, }; const data = await updateStrapiService.getEntitiesFromStrapi(strapiParams); diff --git a/packages/medusa-plugin-strapi-ts/src/api/routes/content/index.ts b/packages/medusa-plugin-strapi-ts/src/api/routes/content/index.ts index b823d4e5..7082b78b 100644 --- a/packages/medusa-plugin-strapi-ts/src/api/routes/content/index.ts +++ b/packages/medusa-plugin-strapi-ts/src/api/routes/content/index.ts @@ -20,6 +20,9 @@ export default (app, options, config: ConfigModule) => { contentRouter.options('/:type',cors(config.projectConfig.store_cors));*/ } contentRouter.use(utils); + /*app.set('query parser', (queryString) => { + return new URLSearchParams(queryString); + });*/ contentRouter.get('/:type/:id', fetchContent); contentRouter.get('/:type', fetchContent); diff --git a/packages/medusa-plugin-strapi-ts/src/services/__tests__/medusa-plugin-strapi.test.ts b/packages/medusa-plugin-strapi-ts/src/services/__tests__/medusa-plugin-strapi.test.ts index 9da8c424..f9165ab1 100644 --- a/packages/medusa-plugin-strapi-ts/src/services/__tests__/medusa-plugin-strapi.test.ts +++ b/packages/medusa-plugin-strapi-ts/src/services/__tests__/medusa-plugin-strapi.test.ts @@ -24,6 +24,7 @@ import UpdateStrapiService, { StrapiResult } from '../update-strapi'; import logger from '../__mocks__/logger'; import axios, { AxiosError } from 'axios'; import exp from 'constants'; +import qs from 'qs'; // This sets the mock adapter on the default instance @@ -122,7 +123,7 @@ describe('StrapiService Tests', () => { 'fields[0]=title&pagination[pageSize]=10&pagination[page]=1&' + 'publicationState=live&locale[0]=en'; - const query = service._createStrapiRestQuery({ + const query = service.createStrapiRestQuery({ sort: ['title:asc'], filters: { title: { @@ -140,6 +141,12 @@ describe('StrapiService Tests', () => { }); expect(query).toBe(testQueryPattern); }); + describe('test user parameter parsing', () => { + it('test parameter creation', () => { + const string = service.appendIdToStrapiFilter('', 'medusa_1235'); + expect(string).toMatch(`medusa_1235`); + }); + }); }); describe('user CURD', () => { it( @@ -219,8 +226,8 @@ describe('StrapiService Tests', () => { it( 'register or login default medusa user', async () => { - const creds = await service.registerOrLoginDefaultMedusaUser(); - expect(creds.token).toBeDefined(); + const credentials = await service.registerOrLoginDefaultMedusaUser(); + expect(credentials.token).toBeDefined(); }, testTimeOut ); @@ -230,8 +237,8 @@ describe('StrapiService Tests', () => { async () => { if (!isMockEnabled()) { await service.deleteDefaultMedusaUser(); - const creds = await service.loginAsDefaultMedusaUser(); - expect(creds).toBeUndefined(); + const credentials = await service.loginAsDefaultMedusaUser(); + expect(credentials).toBeUndefined(); } else { console.warn('disabled when not connected to test server'); expect(true).toBe(true); @@ -333,8 +340,29 @@ describe('StrapiService Tests', () => { }); expect(productGetResult).toBeDefined(); expect(productGetResult.data.length > 0).toBeTruthy(); + const productFieldsGetResult = await service.getEntitiesFromStrapi({ + authInterface: defaultAuthInterface, + strapiEntityType: 'products', + urlQuery: { fields: ['title', 'id', 'medusa_id'] }, + }); + expect(productFieldsGetResult.data[0].id).toBeDefined(); + expect(productFieldsGetResult.data[0].medusa_id).toBeDefined(); + if (!isMockEnabled()) { + expect(productFieldsGetResult.data[0].title).toBeDefined(); + } + expect(productFieldsGetResult.data[0].handle).toBeUndefined(); + const productPopulateGetResult = await service.getEntitiesFromStrapi({ + authInterface: defaultAuthInterface, + strapiEntityType: 'products', + urlQuery: { populate: 'product-variants' }, + }); + if (!isMockEnabled()) { + const testData = productPopulateGetResult.data[0]; + expect(testData['product-variants']).toBeDefined(); + } } }, + testTimeOut ); @@ -488,10 +516,10 @@ describe('StrapiService Tests', () => { expect(result.status == 200 || result.status == 302).toBeTruthy(); /* expect(result.data).toMatchObject({ - id: expect.any(Number), - data: { title: expect.any(String) }, - medus_id: expect.any(String) - });*/ + id: expect.any(Number), + data: { title: expect.any(String) }, + medus_id: expect.any(String) + });*/ if (result) { const productVariantGetResult = await service.getEntitiesFromStrapi({ @@ -510,10 +538,10 @@ describe('StrapiService Tests', () => { expect(result.status == 200 || result.status == 302).toBeTruthy(); /* expect(result.data).toMatchObject({ - id: expect.any(Number), - data: { title: "test-product-variant-2" }, - medus_id: expect.any(String) - });*/ + id: expect.any(Number), + data: { title: "test-product-variant-2" }, + medus_id: expect.any(String) + });*/ expect(spy).toHaveBeenCalled(); }); it('create and update product category in strapi', async () => { @@ -522,10 +550,10 @@ describe('StrapiService Tests', () => { expect(result.status == 200 || result.status == 302).toBeTruthy(); /* expect(result.data).toMatchObject({ - id: expect.any(Number), - data: { title: expect.any(String) }, - medus_id: expect.any(String) - });*/ + id: expect.any(Number), + data: { title: expect.any(String) }, + medus_id: expect.any(String) + });*/ if (result) { const productCategoryResult = await service.getEntitiesFromStrapi({ @@ -544,10 +572,10 @@ describe('StrapiService Tests', () => { expect(result.status == 200 || result.status == 302).toBeTruthy(); /* expect(result.data).toMatchObject({ - id: expect.any(Number), - data: { title: "test-product-variant-2" }, - medus_id: expect.any(String) - });*/ + id: expect.any(Number), + data: { title: "test-product-variant-2" }, + medus_id: expect.any(String) + });*/ expect(spy).toHaveBeenCalled(); }); }); @@ -564,10 +592,9 @@ describe('StrapiService Tests', () => { const falseResult = await service.getEntitiesFromStrapi({ strapiEntityType: 'product-variants', authInterface: defaultAuthInterface, - id: result.data?.medusa_id, + id: IdMap.getId('exists'), }); - expect(falseResult.status).toBe(200); - //expect(falseResult.data?.length).toBe(0); + expect(falseResult.status).toBe(404); } else { console.warn('disabled when not connected to test server'); expect(true).toBe(true); @@ -585,11 +612,11 @@ describe('StrapiService Tests', () => { }); /* result = await service.deleteCollectionInStrapi( - { id: "exists" }, - defaultAuthInterface - ); + { id: "exists" }, + defaultAuthInterface + ); - expect(result.status != 200).toBeTruthy();*/ + expect(result.status != 200).toBeTruthy();*/ result = await service.deleteProductMetafieldInStrapi( { id: IdMap.getId('exists') }, @@ -632,8 +659,7 @@ describe('StrapiService Tests', () => { authInterface: defaultAuthInterface, id: result.data?.medusa_id, }); - expect(falseResult.status).toBe(200); - expect(falseResult.data?.length).toBe(0); + expect(falseResult.status).toBe(404); result = await service.deleteProductTypeInStrapi({ id: 'dummy' }, defaultAuthInterface); expect(result.status).toBe(200); @@ -643,9 +669,7 @@ describe('StrapiService Tests', () => { id: result.data?.medusa_id, }); - expect(falseResult.status).toBe(200); - expect(falseResult.data?.length).toBe(0); - expect(falseResult.data?.length).toBe(0); + expect(falseResult.status).toBe(404); result = await service.deleteCollectionInStrapi( { id: IdMap.getId('exists') }, defaultAuthInterface @@ -691,8 +715,8 @@ describe('region checks', () => { authInterface: defaultAuthInterface, id: result.data?.deletedData.medusa_id, }); - expect(falseResult.status != 200).toBeTruthy(); - // expect(falseResult.data?.data.length).toBe(0); + expect(falseResult.status == 404).toBeTruthy(); + await service.deleteDefaultMedusaUser(); } }); diff --git a/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-content-api.test.ts b/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-content-api.test.ts index 64aeb6f5..e33410c7 100644 --- a/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-content-api.test.ts +++ b/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-content-api.test.ts @@ -2,6 +2,7 @@ import StrapiService from '../update-strapi'; import { jest, describe, expect, beforeEach, it, beforeAll, afterAll } from '@jest/globals'; import jwt from 'jsonwebtoken'; import supertest from 'supertest'; +import qs from 'qs'; import { regionService, productService, @@ -263,6 +264,32 @@ describe('StrapiService Tests', () => { timeOut ); + it( + 'GET any /content/products?=query', + async () => { + const query = qs.stringify({ + fields: ['id', 'handle', 'medusa_id'], + filters: { + medusa_id: IdMap.getId('exists'), + }, + populate: '*', + }); + const result = await supertest(app) + .get(`/strapi/content/products?${query}`) + .set('Accept', 'application/json') + .expect(200); + + expect(result?.body).toBeDefined(); + expect(result?.body.error).toBeUndefined(); + if (!isMockEnabled()) { + expect(result.body.data[0].medusa_id).toBe(IdMap.getId('exists')); + } + // Check the response type and length + // Check the response data + }, + timeOut + ); + /** it("POST hooks/seed", async () => { const strapiSignal: StrapiSignal = { diff --git a/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-hooks-api.test.ts b/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-hooks-api.test.ts index 24b0a903..e0b6d7be 100644 --- a/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-hooks-api.test.ts +++ b/packages/medusa-plugin-strapi-ts/src/services/__tests__/strapi-hooks-api.test.ts @@ -87,7 +87,7 @@ describe('StrapiService Tests', () => { redisClient, productVariantService: productVariantService as any, logger: logger as any, - }) + }); const entry = { unpublish: jest.fn(async () => { @@ -151,7 +151,7 @@ describe('StrapiService Tests', () => { container.register('manager', asFunction(() => MockManager).singleton()); container.register('updateStrapiService', asFunction(() => service).singleton()); container.register('updateMedusaService', asFunction(() => medusaService).singleton()); - + container.register('eventBusService', asFunction(() => eventBusService).singleton()); container.register('logger', asFunction(() => logger).singleton()); container.register( @@ -260,25 +260,23 @@ describe('StrapiService Tests', () => { timeOut ); - - - it("POST hooks update medusa", async () => { + it('POST hooks update medusa', async () => { const strapiSignal = { - message: "UPDATE MEDUSA", + message: 'UPDATE MEDUSA', code: 200, data: { - type:"product", - data:{ - id:"exists-3", - title:"new-test-title" - } - } + type: 'product', + data: { + id: 'exists-3', + title: 'new-test-title', + }, + }, }; - const encoded = jwt.sign(strapiSignal, "test_secret"); + const encoded = jwt.sign(strapiSignal, 'test_secret'); const result = await supertest(app) - .post("/strapi/hooks/strapi-signal") + .post('/strapi/hooks/strapi-signal') .send({ signedMessage: encoded }) - .set("Accept", "application/json"); + .set('Accept', 'application/json'); expect(result.status).toBe(200); expect(result?.body).toBeDefined(); diff --git a/packages/medusa-plugin-strapi-ts/src/services/update-strapi.ts b/packages/medusa-plugin-strapi-ts/src/services/update-strapi.ts index 86f0befd..f948bf3b 100644 --- a/packages/medusa-plugin-strapi-ts/src/services/update-strapi.ts +++ b/packages/medusa-plugin-strapi-ts/src/services/update-strapi.ts @@ -82,6 +82,7 @@ import { TokenExpiredError } from 'jsonwebtoken'; import { Http2ServerResponse } from 'http2'; import { AxiosError } from 'axios'; import { log } from 'console'; +import { url } from 'inspector'; export type StrapiEntity = BaseEntity & { medusa_id?: string }; export type AdminResult = { data: any; status: number }; @@ -109,6 +110,7 @@ export type StrapiResult = { data?: any | any[]; meta?: Record; status: number; + query?: string; }; const IGNORE_THRESHOLD = 3; // seconds @@ -348,6 +350,7 @@ export class UpdateStrapiService extends TransactionBaseService { authInterface: params.authInterface, method: 'GET', id: params.id, + query: params.urlQuery ? qs.stringify(params.urlQuery) : undefined, }; const result = await this.getEntriesInStrapi(getEntityParams); @@ -999,7 +1002,9 @@ export class UpdateStrapiService extends TransactionBaseService { if (result.status == 200) { return result; } else { - return await this.createProductInStrapi(data.id, authInterface); + await this.createProductInStrapi(data.id, authInterface); + const result = await this.adjustProductAndUpdateInStrapi(product, data, authInterface); + return result; } } catch (e) { this.logger.error('unable to update product', 'e.message'); @@ -1110,6 +1115,7 @@ export class UpdateStrapiService extends TransactionBaseService { authInterface, data: { ...variant, ...data }, method: 'put', + query: data.query, }); this.logger.info('Variant Strapi Id - ', response); return response; @@ -1447,12 +1453,12 @@ export class UpdateStrapiService extends TransactionBaseService { this.logger.info('found user: ' + JSON.stringify(fetchedUser)); - const result = await this.executeStrapiSend( - 'delete', - 'users', - this.userTokens[authInterface.email].token, - fetchedUser.id?.toString() - ); + const result = await this.executeStrapiSend({ + method: 'delete', + type: 'users', + token: this.userTokens[authInterface.email].token, + id: fetchedUser.id?.toString(), + }); return { data: result.data.data ?? result.data, status: result.status }; } @@ -1689,11 +1695,15 @@ export class UpdateStrapiService extends TransactionBaseService { id: command.data.id, data: undefined, authInterface: command.authInterface, + query: command.query, }); - return await this.processStrapiEntry({ + const putResult = await this.processStrapiEntry({ ...command, method: 'put', + id: command.data.id, + query: undefined, }); + return putResult; } catch (e) { this.logger.error( `entity doesn't exist in strapi :${e.message} : ${command.id}` + ' , update not possible' @@ -1769,7 +1779,7 @@ export class UpdateStrapiService extends TransactionBaseService { /* @todo enable api based access */ /* automatically converts "id" into medusa "id"*/ async strapiSendDataLayer(params: StrapiSendParams): Promise { - const { method, type, id, data, authInterface } = params; + const { method, type, id, data, authInterface, query } = params; const userCreds = await this.strapiLoginSendDatalayer(authInterface); if (!userCreds) { @@ -1785,18 +1795,41 @@ export class UpdateStrapiService extends TransactionBaseService { } try { - const result = await this.executeStrapiSend(method, type, userCreds.token, id, { data: dataToSend }); + const result = await this.executeStrapiSend({ + method, + type, + token: userCreds.token, + id, + data: dataToSend, + query, + }); return { id: result.data.id ?? result.data.data?.id, medusa_id: result.data.medusa_id ?? result.data.data?.medusa_id, status: result.status, data: result.data.data ?? result.data, + query, }; } catch (e) { if (e instanceof LoginTokenExpiredError) { await this.retrieveRefreshedToken(authInterface, '401'); - return this.strapiSendDataLayer(params); + return await this.strapiSendDataLayer(params); + } + if (e instanceof AxiosError) { + if (method.toLowerCase() == 'get' && e.response.status == 404) { + this.logger.info(`unable to find ${type} id: ${id ?? 'any'} ${e.message}`); + return { + id: undefined, + medusa_id: undefined, + status: e.response.status, + data: undefined, + query, + }; + } else { + this._axiosError(e, id, type, data, method); + } } + this.logger.error(e.message); return { status: 400 }; } @@ -1820,20 +1853,44 @@ export class UpdateStrapiService extends TransactionBaseService { } } - async executeStrapiSend( - method: Method, - type: string, - token: string, - id?: string, - data?: any - ): Promise { + async executeStrapiSend({ + method, + type, + token, + id, + data, + query, + }: { + method: Method; + type: string; + token: string; + id?: string; + data?: any; + query?: string; + }): Promise { let endPoint: string = undefined; await this.waitForHealth(); - if (method != 'POST' && method != 'post') { - endPoint = `${this.strapi_url}/api/${type}${id ? '/' + id : '/'}`; - } else { - endPoint = `${this.strapi_url}/api/${type}`; + let tail = ''; + // if (method.toLowerCase() != 'post') { + if (method.toLowerCase() != 'post') { + if ( + id && + id != '' && + id?.trim().toLocaleLowerCase() != 'me' && + type.toLowerCase() != 'users' && + method.toLowerCase() == 'get' + ) { + tail = `?${this.appendIdToStrapiFilter(query, id)}`; + } else { + tail = id ? `/${id}` : ''; + } + if (tail == '' && query) tail = `?${query}`; } + // } + endPoint = `${this.strapi_url}/api/${type}${tail}`; + /*} else { + endPoint = `${this.strapi_url}/api/${type}`; + }*/ this.logger.info(`User endpoint: ${endPoint}`); const basicConfig = { method: method, @@ -1853,15 +1910,14 @@ export class UpdateStrapiService extends TransactionBaseService { }; try { - this.logger.info(`User Endpoint firing: ${endPoint}`); + this.logger.info(`User Endpoint firing: ${endPoint} method: ${method} query:${query}`); const result = await axios(config); - this.logger.info(`User Endpoint fired: ${endPoint}`); + this.logger.info(`User Endpoint fired: ${endPoint} method : ${method} query:${query}`); // console.log("attempting action:"+result); if (result.status >= 200 && result.status < 300) { this.logger.info( - `Strapi Ok : method: ${method}, id:${id}, type:${type}, data:${JSON.stringify(data)}, :status:${ - result.status - }` + `Strapi Ok : method: ${method}, id:${id}, type:${type},` + + ` data:${JSON.stringify(data)}, :status:${result.status} query:${query}` ); } @@ -1870,6 +1926,24 @@ export class UpdateStrapiService extends TransactionBaseService { this._axiosError(error, id, type, data, method, endPoint); } } + appendIdToStrapiFilter(query: string, id?: string): string { + const urlQuery = qs.parse(query) as any; + const idFromUrlParams = urlQuery?.filters?.id; + const medusaIdFromUrlParams = urlQuery?.fitlers?.medusa_id; + if ((idFromUrlParams || medusaIdFromUrlParams) && id) { + throw new Error('Multiple Ids in the Request'); + } + id = id ?? medusaIdFromUrlParams ?? idFromUrlParams; + const originalFilters = urlQuery.filters; + const newFilters = id + ? { + ...originalFilters, + medusa_id: id, + } + : undefined; + urlQuery.filters = newFilters; + return qs.stringify(urlQuery); + } _axiosError(error: AxiosError, id?: string, type?: string, data?: any, method?: Method, endPoint?: string): void { if (endPoint) { this.logger.info(`Endpoint Attempted: ${endPoint}`); @@ -1906,25 +1980,30 @@ export class UpdateStrapiService extends TransactionBaseService { handleError(error: any, id?: string, type?: string, data?: any, method?: Method, endPoint?: string) { const theError = `${(error as Error).message} `; const responseData = _.isEmpty(data) ? {} : error?.response?.data ?? 'none'; - this.logger.error('Error occur while sending request to strapi', { - 'error.message': theError, - request: { - url: endPoint || 'none', - data: JSON.stringify(data) || 'none', - method: method || 'none', - }, - response: { - body: JSON.stringify(responseData), - status: error?.response?.status ?? 'none', - }, - }); + data.password = data.password ? '#' : undefined; + this.logger.error( + 'Error occur while sending request to strapi: ' + + JSON.stringify({ + 'error.message': theError, + request: { + url: endPoint || 'none', + data: JSON.stringify(data) || 'none', + method: method || 'none', + }, + response: { + body: JSON.stringify(responseData), + status: error?.response?.status ?? 'none', + }, + }) + ); if (!endPoint?.includes('register-admin')) { - throw new Error( + this.logger.error( `Error while trying ${method}` + `,${type ?? ''} - ${id ? `id: ${id}` : ''} , } entry in strapi ${theError}` ); + throw error; } } async executeStrapiAdminSend( @@ -2113,7 +2192,7 @@ export class UpdateStrapiService extends TransactionBaseService { type: 'users', id: undefined, action: undefined, - query: this._createStrapiRestQuery({ + query: this.createStrapiRestQuery({ fields: ['email'], filters: { email: `${email}`.toLocaleLowerCase(), @@ -2274,8 +2353,10 @@ export class UpdateStrapiService extends TransactionBaseService { } return found; } - - _createStrapiRestQuery(strapiQuery: StrapiQueryInterface): string { + /** + * This function allows you to create a strapi query + */ + createStrapiRestQuery(strapiQuery: StrapiQueryInterface): string { const { sort, filters, populate, fields, pagination, publicationState, locale } = strapiQuery; const query = qs.stringify( diff --git a/packages/medusa-plugin-strapi-ts/src/types/globals.ts b/packages/medusa-plugin-strapi-ts/src/types/globals.ts index c4b584a0..e3678a3b 100644 --- a/packages/medusa-plugin-strapi-ts/src/types/globals.ts +++ b/packages/medusa-plugin-strapi-ts/src/types/globals.ts @@ -87,4 +87,6 @@ export interface GetFromStrapiParams { id?: string; authInterface: AuthInterface; strapiEntityType: string; + urlParams?: Record; + urlQuery?: Record; } diff --git a/packages/medusa-strapi/config/middlewares.js b/packages/medusa-strapi/config/middlewares.js index 12fd954f..e4261e9b 100644 --- a/packages/medusa-strapi/config/middlewares.js +++ b/packages/medusa-strapi/config/middlewares.js @@ -77,13 +77,15 @@ module.exports = ({ env }) => ( name: 'strapi::cors', config: { enabled: true, - headers: '*', + headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'], + methods: ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'], origin: [ 'http://localhost:1337', env('MEDUSA_BACKEND_URL'), env('MEDUSA_BACKEND_ADMIN'), env('SELF_URL'), ], + keepHeaderOnError: true, }, }, 'strapi::logger', diff --git a/packages/medusa-strapi/package.json b/packages/medusa-strapi/package.json index e7caaac7..362b64b4 100644 --- a/packages/medusa-strapi/package.json +++ b/packages/medusa-strapi/package.json @@ -31,17 +31,17 @@ "@sgftech/strapi-plugin-multi-country-select": "^1.0.1", "@strapi/design-system": "^1.4.1", "@strapi/icons": "^1.4.1", - "@strapi/logger": "4.11.7", - "@strapi/plugin-documentation": "4.11.7", - "@strapi/plugin-i18n": "4.11.7", - "@strapi/plugin-sentry": "4.11.7", + "@strapi/logger": "4.12.5", + "@strapi/plugin-documentation": "4.12.5", + "@strapi/plugin-i18n": "4.12.5", + "@strapi/plugin-sentry": "4.12.5", "@strapi/plugin-seo": "1.7.5", - "@strapi/plugin-upload": "4.11.7", - "@strapi/plugin-users-permissions": "4.11.7", - "@strapi/provider-email-sendgrid": "4.11.7", - "@strapi/provider-upload-aws-s3": "4.11.7", - "@strapi/provider-upload-local": "4.11.7", - "@strapi/strapi": "4.11.7", + "@strapi/plugin-upload": "4.12.5", + "@strapi/plugin-users-permissions": "4.12.5", + "@strapi/provider-email-sendgrid": "4.12.5", + "@strapi/provider-upload-aws-s3": "4.12.5", + "@strapi/provider-upload-local": "4.12.5", + "@strapi/strapi": "4.12.5", "add": "^2.0.6", "codemirror": "5.65.11", "css-loader": "^6.7.1", @@ -79,7 +79,7 @@ "telemetryDisabled": true }, "engines": { - "node": ">=12.x.x <=16.x.x", + "node": ">=12.x.x <=20.x.x", "npm": ">=6.0.0" }, "license": "MIT", @@ -88,11 +88,11 @@ "@babel/plugin-transform-modules-commonjs": "^7.21.2", "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", - "@strapi/admin": "4.11.7", + "@strapi/admin": "4.12.5", "@testing-library/react-hooks": "^8.0.1", "@types/node": "^18.11.9", - "@typescript-eslint/eslint-plugin": "^5.40.0", - "@typescript-eslint/parser": "^5.40.0", + "@typescript-eslint/eslint-plugin": "^6.4.1", + "@typescript-eslint/parser": "^6.4.1", "babel-jest": "^29.4.3", "babel-loader": "^9.1.0", "better-sqlite3": "7.4.6", @@ -114,6 +114,17 @@ "@lezer/common": "^1.0.0" }, "resolutions": { - "codemirror": "5.65.11" + "**/codemirror": "5.65.11", + "**/protobufjs":"^7.2.4", + "**/tough-cookie":"^4.1.3", + "**/node-fetch":"^2.6.7", + "**/follow-redirects":"^1.14.8", + "**/axios":"0.27.2", + "**/jsonwebtoken":"^9.0.0", + "**/@strapi/utils":"4.12.5", + "**/semver":"^7.5.2", + "**/word-wrap":"^1.2.4", + "**/fast-xml-parser":"^4.2.4" } + } diff --git a/packages/medusa-strapi/src/api/product/content-types/product/schema.json b/packages/medusa-strapi/src/api/product/content-types/product/schema.json index 7eba2338..cf09a0b9 100644 --- a/packages/medusa-strapi/src/api/product/content-types/product/schema.json +++ b/packages/medusa-strapi/src/api/product/content-types/product/schema.json @@ -49,7 +49,7 @@ "published", "rejected" ], - "default": "draft", + "default": "published", "required": true }, "thumbnail": { diff --git a/packages/medusa-strapi/src/bootstrap.js b/packages/medusa-strapi/src/bootstrap.js index 8ce4d01a..929573f0 100644 --- a/packages/medusa-strapi/src/bootstrap.js +++ b/packages/medusa-strapi/src/bootstrap.js @@ -1,256 +1,246 @@ -"use strict"; +'use strict'; -const { hasSuperUser, createSuperUser } = require("./utils/utils"); -const fs = require("fs-extra"); -const path = require("path"); -const mime = require("mime-types"); -const { - categories, - authors, - articles, - global, - about, -} = require("../data/data.json"); +const { hasSuperUser, createSuperUser } = require('./utils/utils'); +const fs = require('fs-extra'); +const path = require('path'); +const mime = require('mime-types'); +const { categories, authors, articles, global, about } = require('../data/data.json'); async function isFirstRun() { - // eslint-disable-next-line no-undef - const pluginStore = strapi.store({ - // eslint-disable-next-line no-undef - environment: strapi.config.environment, - type: "type", - name: "setup", - }); - const initHasRun = await pluginStore.get({ key: "initHasRun" }); - await pluginStore.set({ key: "initHasRun", value: true }); - return !initHasRun; + // eslint-disable-next-line no-undef + const pluginStore = strapi.store({ + // eslint-disable-next-line no-undef + environment: strapi.config.environment, + type: 'type', + name: 'setup', + }); + const initHasRun = await pluginStore.get({ key: 'initHasRun' }); + await pluginStore.set({ key: 'initHasRun', value: true }); + return !initHasRun; } async function setPublicPermissions(newPermissions) { - // Find the ID of the public role - // eslint-disable-next-line no-undef - const publicRole = await strapi - .query("plugin::users-permissions.role") - .findOne({ - where: { - type: "public", - }, - }); + // Find the ID of the public role + // eslint-disable-next-line no-undef + const publicRole = await strapi.query('plugin::users-permissions.role').findOne({ + where: { + type: 'public', + }, + }); - // Create the new permissions and link them to the public role - const allPermissionsToCreate = []; - Object.keys(newPermissions).map((controller) => { - const actions = newPermissions[controller]; - const permissionsToCreate = actions.map((action) => { - // eslint-disable-next-line no-undef - return strapi.query("plugin::users-permissions.permission").create({ - data: { - action: `api::${controller}.${controller}.${action}`, - role: publicRole.id, - }, - }); - }); - allPermissionsToCreate.push(...permissionsToCreate); - }); - await Promise.all(allPermissionsToCreate); + // Create the new permissions and link them to the public role + const allPermissionsToCreate = []; + Object.keys(newPermissions).map((controller) => { + const actions = newPermissions[controller]; + const permissionsToCreate = actions.map((action) => { + // eslint-disable-next-line no-undef + return strapi.query('plugin::users-permissions.permission').create({ + data: { + action: `api::${controller}.${controller}.${action}`, + role: publicRole.id, + }, + }); + }); + allPermissionsToCreate.push(...permissionsToCreate); + }); + await Promise.all(allPermissionsToCreate); } function getFileSizeInBytes(filePath) { - const stats = fs.statSync(filePath); - const fileSizeInBytes = stats["size"]; - return fileSizeInBytes; + const stats = fs.statSync(filePath); + const fileSizeInBytes = stats['size']; + return fileSizeInBytes; } function getFileData(fileName) { - const filePath = path.join("data", "uploads", fileName); - // Parse the file metadata - const size = getFileSizeInBytes(filePath); - const ext = fileName.split(".").pop(); - const mimeType = mime.lookup(ext); + const filePath = path.join('data', 'uploads', fileName); + // Parse the file metadata + const size = getFileSizeInBytes(filePath); + const ext = fileName.split('.').pop(); + const mimeType = mime.lookup(ext); - return { - path: filePath, - name: fileName, - size, - type: mimeType, - }; + return { + path: filePath, + name: fileName, + size, + type: mimeType, + }; } async function uploadFile(file, name) { - // eslint-disable-next-line no-undef - return strapi - .plugin("upload") - .service("upload") - .upload({ - files: file, - data: { - fileInfo: { - alternativeText: `An image uploaded to Strapi called ${name}`, - caption: name, - name, - }, - }, - }); + // eslint-disable-next-line no-undef + return strapi + .plugin('upload') + .service('upload') + .upload({ + files: file, + data: { + fileInfo: { + alternativeText: `An image uploaded to Strapi called ${name}`, + caption: name, + name, + }, + }, + }); } // Create an entry and attach files if there are any async function createEntry({ model, entry }) { - try { - // Actually create the entry in Strapi - // eslint-disable-next-line no-undef - await strapi.entityService.create(`api::${model}.${model}`, { - data: entry, - }); - } catch (error) { - console.error({ model, entry, error }); - } + try { + // Actually create the entry in Strapi + // eslint-disable-next-line no-undef + await strapi.entityService.create(`api::${model}.${model}`, { + data: entry, + }); + } catch (error) { + console.error({ model, entry, error }); + } } async function checkFileExistsBeforeUpload(files) { - const existingFiles = []; - const uploadedFiles = []; - const filesCopy = [...files]; + const existingFiles = []; + const uploadedFiles = []; + const filesCopy = [...files]; - for (const fileName of filesCopy) { - // Check if the file already exists in Strapi - // eslint-disable-next-line no-undef - const fileWhereName = await strapi.query("plugin::upload.file").findOne({ - where: { - name: fileName, - }, - }); + for (const fileName of filesCopy) { + // Check if the file already exists in Strapi + // eslint-disable-next-line no-undef + const fileWhereName = await strapi.query('plugin::upload.file').findOne({ + where: { + name: fileName, + }, + }); - if (fileWhereName) { - // File exists, don't upload it - existingFiles.push(fileWhereName); - } else { - // File doesn't exist, upload it - const fileData = getFileData(fileName); - const fileNameNoExtension = fileName.split(".").shift(); - const [file] = await uploadFile(fileData, fileNameNoExtension); - uploadedFiles.push(file); - } - } - const allFiles = [...existingFiles, ...uploadedFiles]; - // If only one file then return only that file - return allFiles.length === 1 ? allFiles[0] : allFiles; + if (fileWhereName) { + // File exists, don't upload it + existingFiles.push(fileWhereName); + } else { + // File doesn't exist, upload it + const fileData = getFileData(fileName); + const fileNameNoExtension = fileName.split('.').shift(); + const [file] = await uploadFile(fileData, fileNameNoExtension); + uploadedFiles.push(file); + } + } + const allFiles = [...existingFiles, ...uploadedFiles]; + // If only one file then return only that file + return allFiles.length === 1 ? allFiles[0] : allFiles; } async function updateBlocks(blocks) { - const updatedBlocks = []; - for (const block of blocks) { - if (block.__component === "shared.media") { - const uploadedFiles = await checkFileExistsBeforeUpload([block.file]); - // Copy the block to not mutate directly - const blockCopy = { ...block }; - // Replace the file name on the block with the actual file - blockCopy.file = uploadedFiles; - updatedBlocks.push(blockCopy); - } else if (block.__component === "shared.slider") { - // Get files already uploaded to Strapi or upload new files - const existingAndUploadedFiles = await checkFileExistsBeforeUpload( - block.files - ); - // Copy the block to not mutate directly - const blockCopy = { ...block }; - // Replace the file names on the block with the actual files - blockCopy.files = existingAndUploadedFiles; - // Push the updated block - updatedBlocks.push(blockCopy); - } else { - // Just push the block as is - updatedBlocks.push(block); - } - } + const updatedBlocks = []; + for (const block of blocks) { + if (block.__component === 'shared.media') { + const uploadedFiles = await checkFileExistsBeforeUpload([block.file]); + // Copy the block to not mutate directly + const blockCopy = { ...block }; + // Replace the file name on the block with the actual file + blockCopy.file = uploadedFiles; + updatedBlocks.push(blockCopy); + } else if (block.__component === 'shared.slider') { + // Get files already uploaded to Strapi or upload new files + const existingAndUploadedFiles = await checkFileExistsBeforeUpload(block.files); + // Copy the block to not mutate directly + const blockCopy = { ...block }; + // Replace the file names on the block with the actual files + blockCopy.files = existingAndUploadedFiles; + // Push the updated block + updatedBlocks.push(blockCopy); + } else { + // Just push the block as is + updatedBlocks.push(block); + } + } - return updatedBlocks; + return updatedBlocks; } async function importArticles() { - for (const article of articles) { - const cover = await checkFileExistsBeforeUpload([`${article.slug}.jpg`]); - const updatedBlocks = await updateBlocks(article.blocks); + for (const article of articles) { + const cover = await checkFileExistsBeforeUpload([`${article.slug}.jpg`]); + const updatedBlocks = await updateBlocks(article.blocks); - await createEntry({ - model: "article", - entry: { - ...article, - cover, - blocks: updatedBlocks, - // Make sure it's not a draft - publishedAt: Date.now(), - }, - }); - } + await createEntry({ + model: 'article', + entry: { + ...article, + cover, + blocks: updatedBlocks, + // Make sure it's not a draft + publishedAt: Date.now(), + }, + }); + } } async function importGlobal() { - const favicon = await checkFileExistsBeforeUpload(["favicon.png"]); - const shareImage = await checkFileExistsBeforeUpload(["default-image.png"]); - return createEntry({ - model: "global", - entry: { - ...global, - favicon, - // Make sure it's not a draft - publishedAt: Date.now(), - defaultSeo: { - ...global.defaultSeo, - shareImage, - }, - }, - }); + const favicon = await checkFileExistsBeforeUpload(['favicon.png']); + const shareImage = await checkFileExistsBeforeUpload(['default-image.png']); + return createEntry({ + model: 'global', + entry: { + ...global, + favicon, + // Make sure it's not a draft + publishedAt: Date.now(), + defaultSeo: { + ...global.defaultSeo, + shareImage, + }, + }, + }); } async function importAbout() { - const updatedBlocks = await updateBlocks(about.blocks); + const updatedBlocks = await updateBlocks(about.blocks); - await createEntry({ - model: "about", - entry: { - ...about, - blocks: updatedBlocks, - // Make sure it's not a draft - publishedAt: Date.now(), - }, - }); + await createEntry({ + model: 'about', + entry: { + ...about, + blocks: updatedBlocks, + // Make sure it's not a draft + publishedAt: Date.now(), + }, + }); } async function importCategories() { - for (const category of categories) { - await createEntry({ model: "category", entry: category }); - } + for (const category of categories) { + await createEntry({ model: 'category', entry: category }); + } } async function importAuthors() { - for (const author of authors) { - const avatar = await checkFileExistsBeforeUpload([author.avatar]); + for (const author of authors) { + const avatar = await checkFileExistsBeforeUpload([author.avatar]); - await createEntry({ - model: "author", - entry: { - ...author, - avatar, - }, - }); - } + await createEntry({ + model: 'author', + entry: { + ...author, + avatar, + }, + }); + } } async function importSeedData() { - // Allow read of application content types - await setPublicPermissions({ - article: ["find", "findOne"], - category: ["find", "findOne"], - author: ["find", "findOne"], - global: ["find", "findOne"], - about: ["find", "findOne"], - }); + // Allow read of application content types + await setPublicPermissions({ + article: ['find', 'findOne'], + category: ['find', 'findOne'], + author: ['find', 'findOne'], + global: ['find', 'findOne'], + about: ['find', 'findOne'], + }); - // Create all entries - await importCategories(); - await importAuthors(); - await importArticles(); - await importGlobal(); - await importAbout(); + // Create all entries + await importCategories(); + await importAuthors(); + await importArticles(); + await importGlobal(); + await importAbout(); } // const setup = require("./dist/server/services/setup") @@ -265,16 +255,16 @@ async function importSeedData() { */ module.exports = async (strapi) => { - try { - if (process.env.ENABLE_SUPER_USER == "true") { - if (!(await hasSuperUser(strapi))) { - await createSuperUser(strapi); - } else { - strapi.log.info("Found a Superuser account."); - } - } - } catch (e) { - /* if(await isFirstRun()){ + try { + if (process.env.ENABLE_SUPER_USER == 'true') { + if (!(await hasSuperUser(strapi))) { + await createSuperUser(strapi); + } else { + strapi.log.info('Found a Superuser account.'); + } + } + } catch (e) { + /* if(await isFirstRun()){ let medusaRoleId = await setup.hasMedusaRole(strapi) if (!medusaRoleId) { const plugins = await strapi.plugins[ @@ -300,18 +290,18 @@ module.exports = async (strapi) => { medusaUserId = await createMedusaUser(strapi,medusaRoleId) }*/ - console.error(e); - } - const shouldImportSeedData = await isFirstRun(); + console.error(e); + } + const shouldImportSeedData = await isFirstRun(); - if (shouldImportSeedData) { - try { - console.log("Setting up the template..."); - await importSeedData(); - console.log("Ready to go"); - } catch (error) { - console.log("Could not import seed data"); - console.error(error); - } - } + if (shouldImportSeedData) { + try { + console.log('Setting up the template...'); + await importSeedData(); + console.log('Ready to go'); + } catch (error) { + console.log('Could not import seed data'); + console.error(error); + } + } }; diff --git a/packages/medusa-strapi/src/extensions/documentation/documentation/1.0.0/full_documentation.json b/packages/medusa-strapi/src/extensions/documentation/documentation/1.0.0/full_documentation.json index 4edb4de2..89c2200c 100644 --- a/packages/medusa-strapi/src/extensions/documentation/documentation/1.0.0/full_documentation.json +++ b/packages/medusa-strapi/src/extensions/documentation/documentation/1.0.0/full_documentation.json @@ -14,7 +14,7 @@ "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, - "x-generation-date": "2023-07-28T10:13:09.350Z" + "x-generation-date": "2023-08-23T08:05:06.254Z" }, "x-strapi-config": { "path": "/documentation", @@ -56804,7 +56804,7 @@ }, "responses": { "200": { - "description": "Successfull registration", + "description": "Successful registration", "content": { "application/json": { "schema": { diff --git a/packages/medusa-strapi/src/utils/utils.js b/packages/medusa-strapi/src/utils/utils.js index aa8accd4..952fa970 100644 --- a/packages/medusa-strapi/src/utils/utils.js +++ b/packages/medusa-strapi/src/utils/utils.js @@ -105,6 +105,23 @@ async function controllerfindOne(ctx, strapi, uid) { } // const entity = await strapi.service("api::entity-service.entity-service").findOne({ region_id: medusaId }); } + +async function controllerfindMany(ctx, strapi, uid) { + try { + const entity = await strapi.entityService.findMany(uid, ctx.query); + strapi.log.debug(`requested ${uid} query: ${JSON.stringify(ctx.query)}`); + if (entity && entity.length > 0) { + return (ctx.body = { data: entity }); + } + return ctx.notFound(ctx); + } catch (e) { + handleError(strapi, e); + return ctx.internalServerError(ctx); + } + + // const entity = await strapi.service("api::entity-service.entity-service").findOne({ region_id: medusaId }); +} + async function uploadFile(strapi, uid, fileData, processedData, fieldName = 'files') { const service = strapi.service('plugin::upload.upload'); const id = processedData.id; @@ -130,8 +147,8 @@ async function controllerCreate(ctx, strapi, uid) { delete ctx.request.body?.data?.id; let processedData; - let data = _.cloneDeep(ctx.request.body.data ?? ctx.request.body); - strapi.log.info(`Medusa is creating entity ${uid} on Strapi`, {data: data}); + let data = _.cloneDeep(ctx.request.body.data ?? ctx.request.body); + strapi.log.info(`Medusa is creating entity ${uid} on Strapi`, { data: data }); try { if (typeof data == 'string') { data = JSON.parse(data); @@ -160,7 +177,7 @@ async function getStrapiIdFromMedusaId(uid, strapi, medusa_id) { function findContentUid(name, strapi) { let objectUid; - name = name.replace('_', '-'); + name = name.replace('_', '-'); const contentTypes = Object.keys(strapi.contentTypes); for (const contentType of contentTypes) { const value = strapi.contentTypes[contentType]; @@ -240,19 +257,19 @@ async function attachOrCreateStrapiIdFromMedusaId(uid, strapi, dataReceived, cal if (callBack) { await callBack(dataReceived); } - } catch (e) { - switch (e.name) { - case 'ValidationError': - strapi.log.error( - `Cannot create ${uid}. Validation errors occured on ${ - dataReceived["medusa_id"] - }: ${e.details.errors.map((error) => error.message + " ")}` - ); - break; - default: - strapi.log.error(`unable to create ${uid} ${e.message} ${dataReceived['medusa_id']}`); - break; - } + } catch (e) { + switch (e.name) { + case 'ValidationError': + strapi.log.error( + `Cannot create ${uid}. Validation errors occured on ${ + dataReceived['medusa_id'] + }: ${e.details.errors.map((error) => error.message + ' ')}` + ); + break; + default: + strapi.log.error(`unable to create ${uid} ${e.message} ${dataReceived['medusa_id']}`); + break; + } // throw e; } } catch (e) { @@ -275,13 +292,13 @@ async function getStrapiEntityByUniqueField(uid, strapi, dataReceived) { const filters = {}; filters[field] = dataReceived[field]; - // we're not iterating over empty fields as they're not unique + // we're not iterating over empty fields as they're not unique - if (dataReceived[field] === null || dataReceived[field] === '') { - continue; - } + if (dataReceived[field] === null || dataReceived[field] === '') { + continue; + } - try { + try { const entity = await strapi.entityService.findMany(uid, { filters, fields: ['id', ...uniqueFields], @@ -431,14 +448,14 @@ async function controllerDelete(ctx, strapi, uid) { async function controllerUpdate(ctx, strapi, uid) { const { id: medusa_id } = ctx.params; delete ctx.request.body?.data?.id; - const data = ctx.request.body.data; + const data = ctx.request.body.data || ctx.request.body; - strapi.log.info(`Medusa is updating entity ${medusa_id} of type ${uid} in Strapi`, {data: data}); + strapi.log.info(`Medusa is updating entity ${medusa_id} of type ${uid} in Strapi`, { data: data }); try { const entityId = await getStrapiIdFromMedusaId(uid, strapi, medusa_id); if (entityId) { - const processedData = await attachOrCreateStrapiIdFromMedusaId(uid, strapi, data); + const processedData = await attachOrCreateStrapiIdFromMedusaId(uid, strapi, data); const result = await strapi.services[uid].update(entityId, { data: processedData, }); @@ -446,7 +463,7 @@ async function controllerUpdate(ctx, strapi, uid) { data: result, }); } else { - strapi.log.warn(`Cannot update entity ${medusa_id} of type ${uid} as it doesnt exist in strapi`); + strapi.log.warn(`Cannot update entity ${medusa_id} of type ${uid} as it doesnt exist in strapi`); return ctx.notFound(ctx); } } catch (e) { @@ -459,7 +476,7 @@ function createMedusaDefaultController(uid) { return createCoreController(uid, { async find(ctx) { // eslint-disable-next-line no-undef - return await strapi.entityService.findMany(uid, { fields: ['id'] }); + return await controllerfindMany(ctx, strapi, uid); }, async findOne(ctx) { diff --git a/packages/medusa-strapi/test-db/test.db-journal b/packages/medusa-strapi/test-db/test.db-journal deleted file mode 100644 index 2424d377..00000000 Binary files a/packages/medusa-strapi/test-db/test.db-journal and /dev/null differ diff --git a/packages/medusa-strapi/tests/2.services.test.js b/packages/medusa-strapi/tests/2.services.test.js index f75be553..16d56b04 100644 --- a/packages/medusa-strapi/tests/2.services.test.js +++ b/packages/medusa-strapi/tests/2.services.test.js @@ -110,7 +110,10 @@ describe('Testing strapi ', () => { const entityCreated = await service.create({ data: data }); expect(entityCreated.id).toBeDefined(); let entityRead = await service.findOne(entityCreated.id); + let entityReadAll = await service.find({ medusa_id: entityCreated.id }); expect(entityRead.id).toBeDefined(); + expect(entityReadAll.results.length > 0).toBeTruthy(); + const entityUpdated = await service.update(entityCreated.id, { data: data, }); @@ -120,6 +123,8 @@ describe('Testing strapi ', () => { expect(entityDeleted.id).toBeDefined(); try { entityRead = await service.findOne(entityCreated.id); + let entityReadAll = await service.find({ medusa_id: entityCreated.id }); + expect(entityReadAll.results.length == 0).toBeTruthy(); } catch (e) { entityRead = undefined; } diff --git a/packages/medusa-strapi/tests/3.apis.test.js b/packages/medusa-strapi/tests/3.apis.test.js index cbc8cd77..d971c7ef 100644 --- a/packages/medusa-strapi/tests/3.apis.test.js +++ b/packages/medusa-strapi/tests/3.apis.test.js @@ -131,8 +131,13 @@ async function testPost(testInfo) { async function testGet(apiName, id, isSingleType) { let getResult; if (!id) { - getResult = await request(strapi.server.httpServer).get(`/api/${apiName}/`); - expect(getResult.status).toBe(200); + try { + getResult = await request(strapi.server.httpServer).get(`/api/${apiName}`); + expect(getResult.status).toBe(200); + } catch (e) { + console.log(`${apiName} no data `); + expect(getResult.status).toBe(404); + } } else { const creds = await request(strapi.server.httpServer).post(`/api/auth/local`).send(authCreds); expect(creds.status).toBe(200); @@ -211,7 +216,9 @@ function sanityCheckTest() { } else { return; } - expect(sanityCheckResult[apiEndPoint]?.status).toBe(200); + expect( + sanityCheckResult[apiEndPoint]?.status == 200 || sanityCheckResult[apiEndPoint]?.status == 404 + ).toBeTruthy(); }); } } diff --git a/packages/strapi-plugin-medusajs/package.json b/packages/strapi-plugin-medusajs/package.json index da71bd32..b8aea8ba 100644 --- a/packages/strapi-plugin-medusajs/package.json +++ b/packages/strapi-plugin-medusajs/package.json @@ -68,21 +68,25 @@ }, "license": "MIT", "peerDependencies": { - "@strapi/logger": "4.11.7", - "@strapi/plugin-documentation": "4.11.7", - "@strapi/plugin-i18n": "4.11.7", - "@strapi/plugin-sentry": "4.11.7", + "@strapi/logger": "4.12.5", + "@strapi/plugin-documentation": "4.12.5", + "@strapi/plugin-i18n": "4.12.5", + "@strapi/plugin-sentry": "4.12.5", "@strapi/plugin-seo": "^1.7.5", - "@strapi/plugin-upload": "4.11.7", - "@strapi/plugin-users-permissions": "4.11.7", - "@strapi/provider-email-sendgrid": "4.11.7", - "@strapi/provider-upload-aws-s3": "4.11.7", - "@strapi/provider-upload-local": "4.11.7", - "@strapi/strapi": "4.11.7", + "@strapi/plugin-upload": "4.12.5", + "@strapi/plugin-users-permissions": "4.12.5", + "@strapi/provider-email-sendgrid": "4.12.5", + "@strapi/provider-upload-aws-s3": "4.12.5", + "@strapi/provider-upload-local": "4.12.5", + "@strapi/strapi": "4.12.5", "bcryptjs": "^2.4.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, + "resolutions": { + "**/@strapi/utils":"^4.12.5", + "**/tough-cookie":"^4.1.3" + }, "files": [ "dist", "*.js", diff --git a/packages/strapi-plugin-multi-country-select/package.json b/packages/strapi-plugin-multi-country-select/package.json index c7ba089a..787afd96 100644 --- a/packages/strapi-plugin-multi-country-select/package.json +++ b/packages/strapi-plugin-multi-country-select/package.json @@ -24,7 +24,7 @@ }, "license": "MIT", "peerDependencies": { - "@strapi/strapi": "^4.11.7" + "@strapi/strapi": "^4.12.5" }, "repository": { "type": "git", diff --git a/packages/strapi-plugin-sso-medusa/package.json b/packages/strapi-plugin-sso-medusa/package.json index 3b72516f..13722d01 100644 --- a/packages/strapi-plugin-sso-medusa/package.json +++ b/packages/strapi-plugin-sso-medusa/package.json @@ -25,17 +25,17 @@ "Cognito" ], "peerDependencies": { - "@strapi/logger": "4.11.7", - "@strapi/plugin-documentation": "4.11.7", - "@strapi/plugin-i18n": "4.11.7", - "@strapi/plugin-sentry": "4.11.7", + "@strapi/logger": "4.12.5", + "@strapi/plugin-documentation": "4.12.5", + "@strapi/plugin-i18n": "4.12.5", + "@strapi/plugin-sentry": "4.12.5", "@strapi/plugin-seo": "^1.7.5", - "@strapi/plugin-upload": "4.11.7", - "@strapi/plugin-users-permissions": "4.11.7", - "@strapi/provider-email-sendgrid": "4.11.7", - "@strapi/provider-upload-aws-s3": "4.11.7", - "@strapi/provider-upload-local": "4.11.7", - "@strapi/strapi": "4.11.7" + "@strapi/plugin-upload": "4.12.5", + "@strapi/plugin-users-permissions": "4.12.5", + "@strapi/provider-email-sendgrid": "4.12.5", + "@strapi/provider-upload-aws-s3": "4.12.5", + "@strapi/provider-upload-local": "4.12.5", + "@strapi/strapi": "4.12.5" }, "dependencies": { "axios": "^0.27.2", diff --git a/yarn.lock b/yarn.lock index 117ec47d..e583adc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2661,7 +2661,7 @@ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== @@ -2673,6 +2673,11 @@ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.5.1": + version "4.7.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.7.0.tgz#96e7c05e738327602ae5942437f9c6b177ec279a" + integrity sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA== + "@eslint/eslintrc@^2.0.2": version "2.0.2" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" @@ -5915,38 +5920,38 @@ resolved "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== -"@strapi/admin@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/admin/-/admin-4.11.7.tgz#92a8493ebb80ba5de24135b08d453c9dd663349b" - integrity sha512-5lPyPg8zWCYyl3hnEA0uLJtU4BqJsrCsoYLB/U0zaF17ng0j74HAupjLmXyIm8mTo+/Ta5vjYrUjobt4N0psGA== +"@strapi/admin@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/admin/-/admin-4.12.5.tgz#8025c934a39faeb514f4a38c03e417f671c76286" + integrity sha512-x36vMVvgttWqHJ92Sn8HxjHqMYyNKHVP9+bkrS6dhBto5lrcv7lTHnH4GakAbkhLAv0Qzpdiiy+LRxZhzJQVTQ== dependencies: "@casl/ability" "^5.4.3" "@pmmmwh/react-refresh-webpack-plugin" "0.5.10" - "@strapi/data-transfer" "4.11.7" - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/permissions" "4.11.7" - "@strapi/provider-audit-logs-local" "4.11.7" - "@strapi/typescript-utils" "4.11.7" - "@strapi/utils" "4.11.7" + "@strapi/data-transfer" "4.12.5" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/permissions" "4.12.5" + "@strapi/provider-audit-logs-local" "4.12.5" + "@strapi/typescript-utils" "4.12.5" + "@strapi/utils" "4.12.5" axios "1.4.0" bcryptjs "2.4.3" browserslist "^4.17.3" browserslist-to-esbuild "1.2.0" chalk "^4.1.2" - chokidar "^3.5.1" + chokidar "3.5.3" codemirror5 "npm:codemirror@^5.65.11" cross-env "^7.0.3" css-loader "^6.8.1" date-fns "2.30.0" - dotenv "8.5.1" + dotenv "14.2.0" esbuild-loader "^2.21.0" - execa "^1.0.0" + execa "5.1.1" fast-deep-equal "3.1.3" find-root "1.1.0" fork-ts-checker-webpack-plugin "7.3.0" - formik "^2.4.0" + formik "2.4.0" fractional-indexing "3.2.0" fs-extra "10.0.0" highlight.js "^10.4.1" @@ -5994,10 +5999,10 @@ react-select "5.7.0" react-window "1.8.8" redux "^4.2.1" - reselect "^4.1.7" + reselect "4.1.7" rimraf "3.0.2" - sanitize-html "2.10.0" - semver "7.5.1" + sanitize-html "2.11.0" + semver "7.5.4" sift "16.0.1" style-loader "3.3.1" styled-components "5.3.3" @@ -6006,37 +6011,37 @@ webpack-cli "^5.1.0" webpack-dev-server "^4.15.0" webpackbar "^5.0.2" - yup "^0.32.9" + yup "0.32.9" -"@strapi/data-transfer@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/data-transfer/-/data-transfer-4.11.7.tgz#7d8f64543b075d8ce1471eb4f2591bf66f1de9e4" - integrity sha512-MHrIGO4+KmyHv/5bqx4lwYn++q0OJDsmdh6rlWdZ1bMRrZoYc6GLLpTUtpyL6Xpfd5s0OvmOS7x33Otxc80sdQ== +"@strapi/data-transfer@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/data-transfer/-/data-transfer-4.12.5.tgz#f7a0184f63ccdc5cf69ffff6ce5cadee90fd710c" + integrity sha512-uGHZ7Swt3iJlCpzrbnJumui0go2Qu9ROSnheiADyWK8DnmWCNGeewCK0JzXialjnA/UyomQbjecZ6lTYDrwAAw== dependencies: - "@strapi/logger" "4.11.7" - "@strapi/strapi" "4.11.7" + "@strapi/logger" "4.12.5" + "@strapi/strapi" "4.12.5" chalk "4.1.2" fs-extra "10.0.0" lodash "4.17.21" - semver "7.5.1" + semver "7.5.4" stream-chain "2.2.5" stream-json "1.8.0" tar "6.1.13" tar-stream "2.2.0" ws "8.13.0" -"@strapi/database@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/database/-/database-4.11.7.tgz#dfa8174b64b1c8d95158b693417dcfe8ef3a47a6" - integrity sha512-FlV72mvR2LlJdhggt1Wo81M6n0x9c8hAcGKhi2mCT1cFSgkXPUN3R+rkbpPXyAhJuii4g3mx/+b7daywLkLRyA== +"@strapi/database@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/database/-/database-4.12.5.tgz#478fd4b375d16bbf5578056275c23d85b0afc1dc" + integrity sha512-YViFxfDQFwo0lQ4DV8xR7Oic2bQFxAQlKvN+vdTK+CG90NUYUof0IkYBDdUDc75OAkKXomoBbLwVpki6r8oWvw== dependencies: - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" date-fns "2.30.0" debug "4.3.4" fs-extra "10.0.0" knex "2.5.0" lodash "4.17.21" - semver "7.5.1" + semver "7.5.4" umzug "3.2.1" "@strapi/design-system@1.6.6": @@ -6052,10 +6057,10 @@ compute-scroll-into-view "^1.0.17" prop-types "^15.7.2" -"@strapi/design-system@1.8.2": - version "1.8.2" - resolved "https://registry.npmjs.org/@strapi/design-system/-/design-system-1.8.2.tgz#8f70d7231f5a3bf43ac9e36bf903fc13f06ae746" - integrity sha512-PBS/F9bCiNbM4hr6AY4QOR+QhxajLvtoJKLIhPfmmPCkPorT46DzvggTveJku/1bWiJmkVHhqytsKEhrvMsjHQ== +"@strapi/design-system@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@strapi/design-system/-/design-system-1.9.0.tgz#fbccd17f74cba0262c4aabbfdd8d1e8325f64e79" + integrity sha512-JDeoJigur0lNJFkQN9XuM9BuGXHa+LIqSqT6cefH1a6x4zMxW2LGSsM7sewZfaAolKmwVgHWBI3ON9ViOLcT6Q== dependencies: "@codemirror/lang-json" "^6.0.1" "@floating-ui/react-dom" "^2.0.1" @@ -6064,8 +6069,8 @@ "@radix-ui/react-dismissable-layer" "^1.0.4" "@radix-ui/react-dropdown-menu" "^2.0.5" "@radix-ui/react-focus-scope" "1.0.3" - "@strapi/ui-primitives" "^1.8.2" - "@uiw/react-codemirror" "^4.21.7" + "@strapi/ui-primitives" "^1.9.0" + "@uiw/react-codemirror" "^4.21.9" aria-hidden "^1.2.3" compute-scroll-into-view "^3.0.3" prop-types "^15.8.1" @@ -6087,10 +6092,10 @@ compute-scroll-into-view "^3.0.3" prop-types "^15.8.1" -"@strapi/generate-new@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/generate-new/-/generate-new-4.11.7.tgz#a61c62d8a8dca0fdb7b72b2167c990338db96ec7" - integrity sha512-a9Njs9f3ZuEc+L9NSw2/QI6mcKiySP5Qg7NXz+6bNE92CBjGdwwvJiaAuG/sc6tUfLAvLXslJLJEHIBwXmSAiA== +"@strapi/generate-new@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/generate-new/-/generate-new-4.12.5.tgz#98fcb41d297c2388a6fc762cf8ec1f32803a3112" + integrity sha512-aJrs+Mja/7NJ5gg2AC64G5peeSfg/UAFtqhcMFztly2D9ayFs2iH7hIYIbdY/ZRqOILP4XGFmWmTea5HjkIQrA== dependencies: "@sentry/node" "6.19.7" chalk "^4.1.2" @@ -6098,20 +6103,20 @@ fs-extra "10.0.0" inquirer "8.2.5" lodash "4.17.21" - node-fetch "^2.6.9" + node-fetch "2.6.9" node-machine-id "^1.1.10" ora "^5.4.1" - semver "7.5.1" + semver "7.5.4" tar "6.1.13" -"@strapi/generators@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/generators/-/generators-4.11.7.tgz#53a1bae8e62e0ceb794d182713b4ce4660720bb8" - integrity sha512-NcocLgrRdS3PzmFIuP0yHJOi5aKOQaAIZB2QPOdNlBhcdgtq//OFXwwGA7uugAYwcYVFDyn0TwoIFReP6P1IcA== +"@strapi/generators@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/generators/-/generators-4.12.5.tgz#9c3c9774e6901fe6e9aa1770ba0e19889ae4105f" + integrity sha512-BQjZaUAeAU9GpSi6erfxpKaVA9lR/1rs+RLIeKjL+FSsCp53HP71w2/5E444lRykGDffSn4jFLdTtfK5bb23iA== dependencies: "@sindresorhus/slugify" "1.1.0" - "@strapi/typescript-utils" "4.11.7" - "@strapi/utils" "4.11.7" + "@strapi/typescript-utils" "4.12.5" + "@strapi/utils" "4.12.5" chalk "4.1.2" copyfiles "2.4.1" fs-extra "10.0.0" @@ -6135,14 +6140,14 @@ react-intl "6.3.2" react-select "5.7.0" -"@strapi/helper-plugin@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/helper-plugin/-/helper-plugin-4.11.7.tgz#7cf4291e0585d9fcb19cff9ff1daee400d18f5db" - integrity sha512-Q6uAgkwrvSw3UQgS5UiCSqFmzpnQl/U6fQlSvPdeOTfWHOt1YdzSEVCUP6K0zx1VCydByzGYNe/EjEGuGZDsJA== +"@strapi/helper-plugin@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/helper-plugin/-/helper-plugin-4.12.5.tgz#e20aead6de4c3ab8dfd870d0ddf9b314f2c08f65" + integrity sha512-sNC2dg+Mribpj/95DBG7bcCFqlhEwVz5c5wdbWOXp+MT1XkuSArjzGw+hqDf8ZHDpegFyYe2cnZT/xgpC6Zfvw== dependencies: axios "1.4.0" date-fns "2.30.0" - formik "^2.4.0" + formik "2.4.0" immer "9.0.19" lodash "4.17.21" prop-types "^15.8.1" @@ -6157,54 +6162,54 @@ resolved "https://registry.npmjs.org/@strapi/icons/-/icons-1.6.6.tgz#e5259cdb6fc2425e926dfb0afc6e7c72748f1bab" integrity sha512-DxPX2WycDzoDmfi4KU7jQ7aDGTC//Sb67LxTjX2WsNeRgZrl0KxA9h2p8ZeGDD/UEw1GjPAq/x1jYAPn7/j3mQ== -"@strapi/icons@1.8.2": - version "1.8.2" - resolved "https://registry.npmjs.org/@strapi/icons/-/icons-1.8.2.tgz#d838e6566ba67ecb9adc0fce773cf54e93a13d59" - integrity sha512-FiSYN7bDk7B8nieXLddyRgU3xMWjOcRSL2Q7b8A+pedIDLiIpfrDnsSlzmpVpU7LtQSnkOcDlFHqEXEm7zwIvg== +"@strapi/icons@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@strapi/icons/-/icons-1.9.0.tgz#a3d12f965e8a42082cc83149af8fb0a5e610dfe8" + integrity sha512-w+4PGz/8mdzW+kDS8vJX/5fAZ7NBaWPDdhuLE4rqWQZuUDSsetVjgX5RQlulw/f3R52JKJmp5+p2shT84kyMbw== "@strapi/icons@^1.4.1", "@strapi/icons@^1.6.3": version "1.7.2" resolved "https://registry.npmjs.org/@strapi/icons/-/icons-1.7.2.tgz#ce16151111200fa3a3b34308bc323b2bab4b77b4" integrity sha512-PhQa4iDPsusd3OZpt79UmFrhmJroWlXvcG8zQgQIovoMKc19miiiNKO85DN+b/uBt3/fZwZwE9XY8biCT+DLrw== -"@strapi/logger@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/logger/-/logger-4.11.7.tgz#948f3094f60b8412e988bd91420679a9466e79cf" - integrity sha512-ewfzWAdueJ8bTEko5oNRolqlV1isNoldDGJrIG23wcmMW0/MADsve70brlLECp5FHR1w3BRF7PRXqHeDTP2BqA== +"@strapi/logger@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/logger/-/logger-4.12.5.tgz#c517d9c4de102b7b9bae91d07d0ca14fe7f5c6ff" + integrity sha512-0Z7MyXt/vqmEA1WyRZsjszKFr5DEZXBVWISVCnI0hUnoSKFAE+Jcvr3d0ECDmWwkj2MMLlgMeOFV7Jm4WyUZmA== dependencies: lodash "4.17.21" - winston "3.9.0" + winston "3.10.0" -"@strapi/permissions@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/permissions/-/permissions-4.11.7.tgz#991c7a4c771adbcd4502ec5c55655e008f60e665" - integrity sha512-lf4WRryF0VGyG9kvVecw/jxSMj4hsrOWITkujBTWKdry2LG1iK3TwX3oX455HUssIgSGiR44NNSMwHOP7Yui7Q== +"@strapi/permissions@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/permissions/-/permissions-4.12.5.tgz#3e99769e6002939184fbecd8468edeff46aab782" + integrity sha512-DUYOHlJguKLuFvQ+C6zBwEN7O6uPCczjy+o9gzz5a7KVeTIUUpg2We4xcGGmrrWpAb0Px5EgcSGuyNiLx3hp3Q== dependencies: "@casl/ability" "5.4.4" - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" lodash "4.17.21" sift "16.0.1" -"@strapi/plugin-content-manager@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-content-manager/-/plugin-content-manager-4.11.7.tgz#99810849629c831a32d2c854530affe10bd54fb5" - integrity sha512-nZp205nwhDerMKaBXHxLMtty+qyskREX9vH773CxkgIWuQMQIfK4YDBxGKtNxjs/Jyur5X/DYbt+4ZZw6OUqWA== +"@strapi/plugin-content-manager@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-content-manager/-/plugin-content-manager-4.12.5.tgz#553e1db63559508c4ecab3579a0b2130a025bc38" + integrity sha512-utXIfJm0V93FPfQ9LCbFJ/YpM1/q/FpxXlzgoQQXehWEN1pbF4vldWyMEZjzlD4AOnzgvpM4KgXvJsFteP27/g== dependencies: "@sindresorhus/slugify" "1.1.0" - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" lodash "4.17.21" -"@strapi/plugin-content-type-builder@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-content-type-builder/-/plugin-content-type-builder-4.11.7.tgz#21547802f97927db9f014a5bff128f84f18bd126" - integrity sha512-eRvhnjIH36OOlrgNK7V2nopB/y+kltZkZSlIASo0YtSFSNtRVMqqe9qXt/Z6qKrJ3aTyv2vWe7ogGo3Y5j6YHQ== +"@strapi/plugin-content-type-builder@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-content-type-builder/-/plugin-content-type-builder-4.12.5.tgz#d6d0305dd7f10ac6f3b9c66b2093fffe7aeeb0d4" + integrity sha512-YoGCs3RDhuptzScXpYyAhxgctwqgH9iotKzvWzs7Z/APVt6j7vvSEEfkgYvojQIrnNGEJCpa7nQSATXtgjQrJA== dependencies: "@sindresorhus/slugify" "1.1.0" - "@strapi/design-system" "1.8.2" - "@strapi/generators" "4.11.7" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/generators" "4.12.5" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/utils" "4.12.5" fs-extra "10.0.0" immer "9.0.19" lodash "4.17.21" @@ -6215,18 +6220,18 @@ react-intl "6.4.1" react-redux "8.1.1" redux "^4.2.1" - reselect "^4.1.7" - yup "^0.32.9" + reselect "4.1.7" + yup "0.32.9" -"@strapi/plugin-documentation@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-documentation/-/plugin-documentation-4.11.7.tgz#3c07b452824c21bdcdeb9f2ee874f078d1f5a9de" - integrity sha512-hLq9X1NWmNb+eBC45wQoJkMj7yXrNcWrWxx4Y90dFFAomif/tbBvF+zVy72OIa5pc8uWr021ZN6dplvv9PsiVg== +"@strapi/plugin-documentation@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-documentation/-/plugin-documentation-4.12.5.tgz#01aef141f262e013bfb8bf05e90859cfca2808a0" + integrity sha512-AV/arbmhKsS4Qilpf/sdtW+pP31owSX8qvn7nTbtgciv4x+uE1nL1cmuwiUNXQF9YvG9YMs06fc5Lt6gbnnhzw== dependencies: - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/utils" "4.12.5" bcryptjs "2.4.3" cheerio "^1.0.0-rc.12" formik "2.4.0" @@ -6235,30 +6240,26 @@ koa-static "^5.0.0" lodash "4.17.21" path-to-regexp "6.2.1" - pluralize "8.0.0" react-helmet "^6.1.0" react-intl "6.4.1" react-query "3.39.3" - react-redux "8.1.1" - redux "^4.2.1" - reselect "^4.1.7" swagger-ui-dist "4.19.0" yaml "1.10.2" - yup "^0.32.9" + yup "0.32.9" -"@strapi/plugin-email@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-email/-/plugin-email-4.11.7.tgz#b1ec1326e6cb983f3889b6334721939d902de556" - integrity sha512-QRN5NjYgjrRalsc+fgNtGwDZVVl3AMDT/6ogjVjrL5YBpXRn+R/qoZTTjtJGkR8riHQKhPnOLntpcCCbdg7wJg== +"@strapi/plugin-email@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-email/-/plugin-email-4.12.5.tgz#2277583b2afe9944e11aa3409753ba2d4c896af7" + integrity sha512-zBrO1sYq/fMBhLSet2wZc/KFzVoZKgtCUrAxlHamuoU65D0AAIk+wW0Z1L1+F193O7pv3F8zDFtogXjj6Dle6w== dependencies: - "@strapi/design-system" "1.8.2" - "@strapi/icons" "1.8.2" - "@strapi/provider-email-sendmail" "4.11.7" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/icons" "1.9.0" + "@strapi/provider-email-sendmail" "4.12.5" + "@strapi/utils" "4.12.5" lodash "4.17.21" prop-types "^15.8.1" react-intl "6.4.1" - yup "^0.32.9" + yup "0.32.9" "@strapi/plugin-graphql@^4.9.2": version "4.10.1" @@ -6284,15 +6285,15 @@ nexus "1.3.0" pluralize "^8.0.0" -"@strapi/plugin-i18n@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-i18n/-/plugin-i18n-4.11.7.tgz#147d5ea274f68a8dcee2de31909c9fc7359ad255" - integrity sha512-oiyFQr0WuLzYKGOOEaBr+mR2jC9e9qckoDiyicnpFVoedN0quhZbwO/cu5O28Bk+mKfHfrrx5I4mLSCFx4/rcQ== +"@strapi/plugin-i18n@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-i18n/-/plugin-i18n-4.12.5.tgz#c8fcf3f907d2644a57552aff72d5613b9d2bcdc6" + integrity sha512-DRRI8T+CSJG2HdxuyDEw7OX8WWvn0U0HXeUFwA5S1j0rvlHUHIOGLElWPElaJwGRL+m1R7mZRds+eZslzNdWTw== dependencies: - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/utils" "4.12.5" formik "2.4.0" immer "9.0.19" lodash "4.17.21" @@ -6302,17 +6303,17 @@ react-query "3.39.3" react-redux "8.1.1" redux "^4.2.1" - yup "^0.32.9" + yup "0.32.9" -"@strapi/plugin-sentry@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-sentry/-/plugin-sentry-4.11.7.tgz#0c75abf37420bae1015f9a3f144cd12fa2669089" - integrity sha512-tzm7VsvewsgGi9o0Y/vGeQv+QiM65ukbciZ7Dmw/Y9H/cFjoxAxlMNe22AuGkbwB+igRutyQeFMeRyw+jf1P3Q== +"@strapi/plugin-sentry@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-sentry/-/plugin-sentry-4.12.5.tgz#f2ee24cc44f37ff8bf1b6ce90be86a9fb57fa627" + integrity sha512-4BeuTn96sef3CHYwqbTjq/dGCa3i4vOFXg0qPqPZPHtNBFFCrR55xe5Fku32fVsZhfMWvMq7kZS3gwa8gRYYRQ== dependencies: "@sentry/node" "6.19.7" - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" "@strapi/plugin-seo@1.7.5": version "1.7.5" @@ -6323,16 +6324,16 @@ lodash "^4.17.21" showdown "^1.9.1" -"@strapi/plugin-upload@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-upload/-/plugin-upload-4.11.7.tgz#55e28bd6d755101547d5f35e41ded3fee82ea689" - integrity sha512-QJOk6IOB2Nt1mcqDjRvIs1WC1rFWrbBHyj5F1wrX9atoPMN5MJ3rc99SYdqV3NXqYVwts3Mm45SrGHNpeg+5PA== +"@strapi/plugin-upload@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-upload/-/plugin-upload-4.12.5.tgz#134ecdf3a2b316a2b9f0554ed845d88c73c6350e" + integrity sha512-PD3uHfnoZYSH9SnKZtKMrv3/kiGK54Ix1n/TdwlNhtNqrK90Yj4fEbg0//F3yC0JbGQsVvqxIRBlUpRR970cpg== dependencies: - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/provider-upload-local" "4.11.7" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/provider-upload-local" "4.12.5" + "@strapi/utils" "4.12.5" axios "1.4.0" byte-size "7.0.1" cropperjs "1.5.12" @@ -6353,24 +6354,24 @@ react-redux "8.1.1" react-select "5.7.0" sharp "0.32.0" - yup "^0.32.9" + yup "0.32.9" -"@strapi/plugin-users-permissions@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/plugin-users-permissions/-/plugin-users-permissions-4.11.7.tgz#da5b54c612946de7e25e014d28fae3d94f885f2c" - integrity sha512-uRHG8adtP03nkCCRBiZn1S8Vx3KrBqDuOsa4Af3xXxIZOk5SF1PPrR56sTu71soTHX/FCMOGKKSAOSHzLUYB9w== +"@strapi/plugin-users-permissions@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/plugin-users-permissions/-/plugin-users-permissions-4.12.5.tgz#10ac347a4fbf7507c9d19bf05a9ee8e68b56c078" + integrity sha512-UDF5E8ynOnOraieCDwQoLuwWbXIqT2T6rgZAPFwN3mzn1x/wXEmoeGBXXIr2TpJ0426OEpFpqS+CbgAejh5mPQ== dependencies: - "@strapi/design-system" "1.8.2" - "@strapi/helper-plugin" "4.11.7" - "@strapi/icons" "1.8.2" - "@strapi/utils" "4.11.7" + "@strapi/design-system" "1.9.0" + "@strapi/helper-plugin" "4.12.5" + "@strapi/icons" "1.9.0" + "@strapi/utils" "4.12.5" bcryptjs "2.4.3" formik "2.4.0" grant-koa "5.4.8" immer "9.0.19" jsonwebtoken "9.0.0" jwk-to-pem "2.0.5" - koa "^2.13.4" + koa "2.13.4" koa2-ratelimit "^1.1.2" lodash "4.17.21" prop-types "^15.8.1" @@ -6379,7 +6380,7 @@ react-query "3.39.3" react-redux "8.1.1" url-join "4.0.1" - yup "^0.32.9" + yup "0.32.9" "@strapi/plugin-users-permissions@^4.6.1": version "4.10.1" @@ -6407,77 +6408,77 @@ url-join "4.0.1" yup "^0.32.9" -"@strapi/provider-audit-logs-local@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/provider-audit-logs-local/-/provider-audit-logs-local-4.11.7.tgz#149f11b38bc13efde6b560b08a09c1ba80960686" - integrity sha512-UJCdoUBxIrTL4/VTi9z62507jVoyhOz/8m/T0zWsSeqwnSh9timWLWRt3MZwqmA4iCZLF9/+5HreiWy5395Fbg== +"@strapi/provider-audit-logs-local@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/provider-audit-logs-local/-/provider-audit-logs-local-4.12.5.tgz#9399b1596060599d1ffd63ffac896b8410428cd5" + integrity sha512-uvOibg4UndG6PHrQEci8t9/iRXXVdtOYSKnws5t3r83FVen+mgLTPKy45ysNfvuEM0Cu4xYXNiRvhu+fZLuWWg== -"@strapi/provider-email-sendgrid@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/provider-email-sendgrid/-/provider-email-sendgrid-4.11.7.tgz#10f6430f2c6ac93d0c8179d8b161958bd2fa306e" - integrity sha512-PoyK/MvtG3kOtiflXR8a3fcCB8cVAIcRp8S8Hd47b8HUwFTBaHFJphEtkSKKZvdyttzCUY6zM4hryWzzLeBREQ== +"@strapi/provider-email-sendgrid@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/provider-email-sendgrid/-/provider-email-sendgrid-4.12.5.tgz#abaf80d36472052c94ad6ff1b1effb50d9bd458c" + integrity sha512-afBS6vL9L/7wK+A6x4tbjAFek9tW9Nwb+YyhepUCZOHr7NLmaQnSPVCuHu53RIGrb7Mry37G5TEypUL5xmjjFg== dependencies: "@sendgrid/mail" "7.7.0" - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" -"@strapi/provider-email-sendmail@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/provider-email-sendmail/-/provider-email-sendmail-4.11.7.tgz#3e6bbcee824dde60d7e1fd3c1b612cac704208fc" - integrity sha512-f5HaVVK8fO1KEGp0bLmf9Pp+RlPfJM3Zjy4xgrWP7YVkY7bStFDigDhnp1SrOv+k/0nSesz5S3bvC6s6bb/dBQ== +"@strapi/provider-email-sendmail@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/provider-email-sendmail/-/provider-email-sendmail-4.12.5.tgz#311c3281bf3f6b2e4005787170d310729fbcce21" + integrity sha512-4/aXnUhVmgm21p0ng6apeC3EkIeiQIsfxo9j0ZSpfXs6BBrMlkNT9cQpux48eE63NwkiFujq/wtCtCqWkYLaFA== dependencies: - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" sendmail "^1.6.1" -"@strapi/provider-upload-aws-s3@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/provider-upload-aws-s3/-/provider-upload-aws-s3-4.11.7.tgz#5865bbc6a3ac3218e72002c1f52741943f6545cb" - integrity sha512-JaBbVoZfr8VM4pQoHQDnyNzz92Jf1D+O4OPPO+U+TBP5mS4XU+8XecynHkvmWtfAST/zfHpbgfmIvsbLfEtpQw== +"@strapi/provider-upload-aws-s3@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/provider-upload-aws-s3/-/provider-upload-aws-s3-4.12.5.tgz#563335a2d86f3bb665654cce3cdee38e85b9ee38" + integrity sha512-8ysP3P5yeoERU4UToPQCeVlJNyhcC1svuDdAgd9IJPIUYokdDc8RW7rePM7XiItjBKMfHZggDulC2CC52iOLDg== dependencies: - aws-sdk "2.1413.0" + aws-sdk "2.1430.0" lodash "4.17.21" -"@strapi/provider-upload-local@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/provider-upload-local/-/provider-upload-local-4.11.7.tgz#6c92e63c54758cb88544e679739b965704669e65" - integrity sha512-XKFHlPLlGScn7O/eXVFtxDilXZqZwnkHCS6/gYMynikBoxW/PbsDoHou8z7vNLd1Pky1BgAeeDZRfb0W0GGmxQ== +"@strapi/provider-upload-local@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/provider-upload-local/-/provider-upload-local-4.12.5.tgz#72512bf7a21e50ac1b5f77ef77d017a9405845cc" + integrity sha512-nFQJtQAzk4QgIc5gqgOistLKhXXOOCW4/0CLwpWaklmO7tG52za0BEWtX+sD7IT7/MNbLmz/McjzxMvJCk2C7w== dependencies: - "@strapi/utils" "4.11.7" + "@strapi/utils" "4.12.5" fs-extra "10.0.0" -"@strapi/strapi@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/strapi/-/strapi-4.11.7.tgz#cdf6366a36d382ca35424cdda2e9ec4a87dfd2c5" - integrity sha512-cBNa/ujLSIxkPevrZ9TwN4Lrv80jbkm2wyQToF5Apv4IpaITWnACoAOyjHvSgkiwkx39ONOhW2bQ0jATY6s0yg== +"@strapi/strapi@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/strapi/-/strapi-4.12.5.tgz#a452fcfc58a2423fff3daa3a978d24b0433f9894" + integrity sha512-W5p45B3syIOJ78iyO5VcxjFYIn5Qz+L7Z0ka4yaecCH+sEygRM1WUvXDfOHrvTt/4XOCb2qCA5jKjnecrldwiw== dependencies: "@koa/cors" "3.4.3" "@koa/router" "10.1.1" - "@strapi/admin" "4.11.7" - "@strapi/data-transfer" "4.11.7" - "@strapi/database" "4.11.7" - "@strapi/generate-new" "4.11.7" - "@strapi/generators" "4.11.7" - "@strapi/logger" "4.11.7" - "@strapi/permissions" "4.11.7" - "@strapi/plugin-content-manager" "4.11.7" - "@strapi/plugin-content-type-builder" "4.11.7" - "@strapi/plugin-email" "4.11.7" - "@strapi/plugin-upload" "4.11.7" - "@strapi/typescript-utils" "4.11.7" - "@strapi/utils" "4.11.7" + "@strapi/admin" "4.12.5" + "@strapi/data-transfer" "4.12.5" + "@strapi/database" "4.12.5" + "@strapi/generate-new" "4.12.5" + "@strapi/generators" "4.12.5" + "@strapi/logger" "4.12.5" + "@strapi/permissions" "4.12.5" + "@strapi/plugin-content-manager" "4.12.5" + "@strapi/plugin-content-type-builder" "4.12.5" + "@strapi/plugin-email" "4.12.5" + "@strapi/plugin-upload" "4.12.5" + "@strapi/typescript-utils" "4.12.5" + "@strapi/utils" "4.12.5" bcryptjs "2.4.3" boxen "5.1.2" chalk "4.1.2" - chokidar "3.5.2" + chokidar "3.5.3" ci-info "3.8.0" cli-table3 "0.6.2" commander "8.3.0" configstore "5.0.1" debug "4.3.4" delegates "1.0.0" - dotenv "10.0.0" + dotenv "14.2.0" execa "5.1.1" fs-extra "10.0.0" - glob "7.2.0" + glob "7.2.3" http-errors "1.8.1" https-proxy-agent "5.0.1" inquirer "8.2.5" @@ -6501,17 +6502,17 @@ package-json "7.0.0" qs "6.11.1" resolve-cwd "3.0.0" - semver "7.5.1" + semver "7.5.4" statuses "2.0.1" -"@strapi/typescript-utils@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/typescript-utils/-/typescript-utils-4.11.7.tgz#4d4c24ce0734027e6afb5a2e01ce7201833de5db" - integrity sha512-2m+0W/ss4a99PR5hloCkzpOvrWl6GHoMmdL/2gjzUv9gFLjmEx8x9VhBGsvYr/bRFqzMxlnc2z/gaqUmhpQrAQ== +"@strapi/typescript-utils@4.12.5": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/typescript-utils/-/typescript-utils-4.12.5.tgz#0290412bea12ce5e5b968a7367dd98de4d592569" + integrity sha512-uenU1kC9+nm3cvzSSlkhbQxLQl+6I8a8xbWJn7lJOIueU1FHJx0VXgEslipuMkNn2gwFvOG6siS4qwXLKaF0Ag== dependencies: chalk "4.1.2" cli-table3 "0.6.2" - fs-extra "10.0.1" + fs-extra "10.0.0" lodash "4.17.21" prettier "2.8.4" typescript "5.1.3" @@ -6537,10 +6538,10 @@ aria-hidden "^1.2.3" react-remove-scroll "^2.5.5" -"@strapi/ui-primitives@^1.8.2": - version "1.8.2" - resolved "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.8.2.tgz#31e056c50993a898df7704329a87f3ef7d85221d" - integrity sha512-33GDdBXyH8BtBNyjUNiiZVoZ0R9BPtcKhCIb9VtR6RoyR/OVoAOgA3cOO9isxrwh8LZFP2BgofKW62ew3Y801w== +"@strapi/ui-primitives@^1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@strapi/ui-primitives/-/ui-primitives-1.9.0.tgz#c6727c31145bbea86a4430c3682c2236b8443799" + integrity sha512-pjtGALNbWry/rIu50pKpa9K2unoly4FrHwyK1/nbp8OvyMK16E/usPMSndUazQMYv4sjrVczHljNi9Kg5IwQlA== dependencies: "@radix-ui/number" "^1.0.1" "@radix-ui/primitive" "^1.0.1" @@ -6564,22 +6565,10 @@ aria-hidden "^1.2.3" react-remove-scroll "^2.5.6" -"@strapi/utils@4.10.1", "@strapi/utils@^4.0.0", "@strapi/utils@^4.5.2", "@strapi/utils@^4.9.2": - version "4.10.1" - resolved "https://registry.npmjs.org/@strapi/utils/-/utils-4.10.1.tgz#31efa29c0c6c3b9c2c5f05e64c9e059bb389d655" - integrity sha512-+t2dplbcmGpCJccTtVN3XsgDp/9SWSKUmKKDWkrGmddZkEwDH6PU9fN+9KGL09RMJyF3kjwJx6PJfXipyn/Vkg== - dependencies: - "@sindresorhus/slugify" "1.1.0" - date-fns "2.29.3" - http-errors "1.8.1" - lodash "4.17.21" - p-map "4.0.0" - yup "0.32.9" - -"@strapi/utils@4.11.7": - version "4.11.7" - resolved "https://registry.npmjs.org/@strapi/utils/-/utils-4.11.7.tgz#5d22866fc3df011af31a014870e9dd51e1eee704" - integrity sha512-NAnjcKxR9rpJFKsRgqDtjImoKEUrK0Zf5y+5AAowWtteyWXYujkUxNpWYKJ8D08sFnp//MyP8fT6Rtu196ZQTQ== +"@strapi/utils@4.10.1", "@strapi/utils@4.12.5", "@strapi/utils@^4.0.0", "@strapi/utils@^4.5.2", "@strapi/utils@^4.9.2": + version "4.12.5" + resolved "https://registry.npmjs.org/@strapi/utils/-/utils-4.12.5.tgz#c1d452d13efde330c8554b17cabdcaab152ee6b7" + integrity sha512-rZvRHJlWah762tFjAQb4N/anTR8Vnidmtpo6idFfqr58nnQ5WdJKrAy4WNEHd8wFxhnFGa39VamCAw5DeBXS8g== dependencies: "@sindresorhus/slugify" "1.1.0" date-fns "2.30.0" @@ -6816,7 +6805,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.14": +"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.17": version "4.17.17" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== @@ -6955,6 +6944,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.12": + version "7.0.12" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + "@types/jsonwebtoken@^8.5.9": version "8.5.9" resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz#2c064ecb0b3128d837d2764aa0b117b0ff6e4586" @@ -7218,6 +7212,11 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/semver@^7.5.0": + version "7.5.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + "@types/send@*": version "0.17.1" resolved "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" @@ -7338,7 +7337,7 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.4.0", "@typescript-eslint/eslint-plugin@^5.40.0", "@typescript-eslint/eslint-plugin@^5.41.0": +"@typescript-eslint/eslint-plugin@^5.4.0", "@typescript-eslint/eslint-plugin@^5.41.0": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" integrity sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== @@ -7354,7 +7353,24 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.4.0", "@typescript-eslint/parser@^5.40.0", "@typescript-eslint/parser@^5.41.0": +"@typescript-eslint/eslint-plugin@^6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.4.1.tgz#bc0c6f000134b53c304ad0bec4ee4753cd3e89d2" + integrity sha512-3F5PtBzUW0dYlq77Lcqo13fv+58KDwUib3BddilE8ajPJT+faGgxmI9Sw+I8ZS22BYwoir9ZhNXcLi+S+I2bkw== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.4.1" + "@typescript-eslint/type-utils" "6.4.1" + "@typescript-eslint/utils" "6.4.1" + "@typescript-eslint/visitor-keys" "6.4.1" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^5.4.0", "@typescript-eslint/parser@^5.41.0": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.1.tgz#73c2c12127c5c1182d2e5b71a8fa2a85d215cbb4" integrity sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== @@ -7364,6 +7380,17 @@ "@typescript-eslint/typescript-estree" "5.59.1" debug "^4.3.4" +"@typescript-eslint/parser@^6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz#85ad550bf4ac4aa227504f1becb828f8e46c44e3" + integrity sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg== + dependencies: + "@typescript-eslint/scope-manager" "6.4.1" + "@typescript-eslint/types" "6.4.1" + "@typescript-eslint/typescript-estree" "6.4.1" + "@typescript-eslint/visitor-keys" "6.4.1" + debug "^4.3.4" + "@typescript-eslint/scope-manager@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz#8a20222719cebc5198618a5d44113705b51fd7fe" @@ -7372,6 +7399,14 @@ "@typescript-eslint/types" "5.59.1" "@typescript-eslint/visitor-keys" "5.59.1" +"@typescript-eslint/scope-manager@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz#4b073a30be2dbe603e44e9ae0cff7e1d3ed19278" + integrity sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A== + dependencies: + "@typescript-eslint/types" "6.4.1" + "@typescript-eslint/visitor-keys" "6.4.1" + "@typescript-eslint/type-utils@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz#63981d61684fd24eda2f9f08c0a47ecb000a2111" @@ -7382,11 +7417,26 @@ debug "^4.3.4" tsutils "^3.21.0" +"@typescript-eslint/type-utils@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.4.1.tgz#fa21cb13016c8d6f352fe9b2d6c9ab6edc2d1857" + integrity sha512-7ON8M8NXh73SGZ5XvIqWHjgX2f+vvaOarNliGhjrJnv1vdjG0LVIz+ToYfPirOoBi56jxAKLfsLm40+RvxVVXA== + dependencies: + "@typescript-eslint/typescript-estree" "6.4.1" + "@typescript-eslint/utils" "6.4.1" + debug "^4.3.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/types@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.1.tgz#03f3fedd1c044cb336ebc34cc7855f121991f41d" integrity sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== +"@typescript-eslint/types@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz#b2c61159f46dda210fed9f117f5d027f65bb5c3b" + integrity sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg== + "@typescript-eslint/typescript-estree@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz#4aa546d27fd0d477c618f0ca00b483f0ec84c43c" @@ -7400,6 +7450,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz#91ff88101c710adb0f70a317f2f65efa9441da45" + integrity sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg== + dependencies: + "@typescript-eslint/types" "6.4.1" + "@typescript-eslint/visitor-keys" "6.4.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz#d89fc758ad23d2157cfae53f0b429bdf15db9473" @@ -7414,6 +7477,19 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.4.1.tgz#81bf62ff0c3119a26c19fab683582e29450717bc" + integrity sha512-F/6r2RieNeorU0zhqZNv89s9bDZSovv3bZQpUNOmmQK1L80/cV4KEu95YUJWi75u5PhboFoKUJBnZ4FQcoqhDw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.4.1" + "@typescript-eslint/types" "6.4.1" + "@typescript-eslint/typescript-estree" "6.4.1" + semver "^7.5.4" + "@typescript-eslint/visitor-keys@5.59.1": version "5.59.1" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz#0d96c36efb6560d7fb8eb85de10442c10d8f6058" @@ -7422,6 +7498,14 @@ "@typescript-eslint/types" "5.59.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.4.1": + version "6.4.1" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz#e3ccf7b8d42e625946ac5094ed92a405fb4115e0" + integrity sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ== + dependencies: + "@typescript-eslint/types" "6.4.1" + eslint-visitor-keys "^3.4.1" + "@ucast/core@^1.0.0", "@ucast/core@^1.4.1", "@ucast/core@^1.6.1": version "1.10.2" resolved "https://registry.npmjs.org/@ucast/core/-/core-1.10.2.tgz#30b6b893479823265368e528b61b042f752f2c92" @@ -7463,10 +7547,10 @@ "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" -"@uiw/codemirror-extensions-basic-setup@4.21.8": - version "4.21.8" - resolved "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.21.8.tgz#89980ffd4801b29984162ab4c44203b4d29038ae" - integrity sha512-uOPRPxexapuvlZ+hkVun5oyhQ0AtXIapBqv56cgjkzwZ49EILUk9mTubHFBY0B5kPqme7d57hSXYRLW8EH80LA== +"@uiw/codemirror-extensions-basic-setup@4.21.9": + version "4.21.9" + resolved "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.21.9.tgz#e886c6e6ad477bc0943691b9572958c81a2beab3" + integrity sha512-TQT6aF8brxZpFnk/K4fm/K/9k9eF3PMav/KKjHlYrGUT8BTNk/qL+ximLtIzvTUhmBFchjM1lrqSJdvpVom7/w== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/commands" "^6.0.0" @@ -7488,16 +7572,16 @@ "@uiw/codemirror-extensions-basic-setup" "4.19.16" codemirror "^6.0.0" -"@uiw/react-codemirror@^4.21.7": - version "4.21.8" - resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.21.8.tgz#0b2d833a0c7256c23f83b342463276c762863bad" - integrity sha512-IwnWdZcBkNIHrQie/AAsBoz2Q/XpWe/Up1nGIrpWxMXEE/+RxW3CIkqcYEwVcYDJlbfP3hcIRqN/Aoz6OeXc5Q== +"@uiw/react-codemirror@^4.21.9": + version "4.21.9" + resolved "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.21.9.tgz#74393955d159a7d452731e61957773ae053c65b8" + integrity sha512-aeLegPz2iCvqJjhzXp2WUMqpMZDqxsTnF3rX9kGRlfY6vQLsrjoctj0cQ29uxEtFYJChOVjtCOtnQUlyIuNAHQ== dependencies: "@babel/runtime" "^7.18.6" "@codemirror/commands" "^6.1.0" "@codemirror/state" "^6.1.1" "@codemirror/theme-one-dark" "^6.0.0" - "@uiw/codemirror-extensions-basic-setup" "4.21.8" + "@uiw/codemirror-extensions-basic-setup" "4.21.9" codemirror "^6.0.0" "@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": @@ -8264,10 +8348,10 @@ awilix@^8.0.0: camel-case "^4.1.2" fast-glob "^3.2.12" -aws-sdk@2.1413.0: - version "2.1413.0" - resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1413.0.tgz#5ca9c08bacd3523fd6442dc3849d5f558d4e1f5b" - integrity sha512-vKpjC7iRwOhgv7P0xw90mVGO//2rqVPJKyYIs7uxLzSV0JzriVD+yqktOu/Hz6/phOmAd1cMIeFgpEC9ynrppg== +aws-sdk@2.1430.0: + version "2.1430.0" + resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1430.0.tgz#db4fed9a0f7537bb621ec0297095c555c41bddf2" + integrity sha512-827BjW9Q9NwUucZBHHU64dh96ihE857LC0ZOEub0C5wjxujoEqET0i4qJR7k+/wn8tFMNtWO0rIGCSGSmgrm5A== dependencies: buffer "4.9.2" events "1.1.1" @@ -8306,39 +8390,7 @@ axios-retry@^3.1.9, axios-retry@^3.3.1: "@babel/runtime" "^7.15.4" is-retry-allowed "^2.2.0" -axios@*, axios@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@1.3.4: - version "1.3.4" - resolved "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" - integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@^0.21.1, axios@^0.21.4: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^0.26.0: - version "0.26.1" - resolved "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9" - integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA== - dependencies: - follow-redirects "^1.14.8" - -axios@^0.27.2: +axios@*, axios@0.27.2, axios@1.3.4, axios@1.4.0, axios@^0.21.1, axios@^0.21.4, axios@^0.26.0, axios@^0.27.2: version "0.27.2" resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== @@ -9250,22 +9302,7 @@ cheerio@^1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -chokidar@3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - 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" - -chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@3.5.3, chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -9619,24 +9656,11 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.65.13.tgz#c098a6f409db8b5a7c5722788bd9fa3bb2367f2e" integrity sha512-SVWEzKXmbHmTQQWaz03Shrh4nybG0wXx2MEu3FO4ezbPW8IbnZEd5iGHGEffSUaitKYa3i+pHpBsSvw8sPHtzg== -codemirror@5.65.11: +codemirror@5.65.11, codemirror@^6.0.0: version "5.65.11" resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.65.11.tgz#c818edc3274788c008f636520c5490a1f7009b4f" integrity sha512-Gp62g2eKSCHYt10axmGhKq3WoJSvVpvhXmowNq7pZdRVowwtvBR/hi2LSP5srtctKkRT33T6/n8Kv1UGp7JW4A== -codemirror@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" - integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== - dependencies: - "@codemirror/autocomplete" "^6.0.0" - "@codemirror/commands" "^6.0.0" - "@codemirror/language" "^6.0.0" - "@codemirror/lint" "^6.0.0" - "@codemirror/search" "^6.0.0" - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" - coffee-script@*: version "1.12.7" resolved "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" @@ -10213,7 +10237,7 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -10843,15 +10867,10 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" -dotenv@10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -dotenv@8.5.1: - version "8.5.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.5.1.tgz#e3a4c7862daba51b92bce0da5c349f11faa28663" - integrity sha512-qC1FbhCH7UH7B+BcRNUDhAk04d/n+tnGGB1ctwndZkVFeehYJOn39pRWWzmdzpFqImyX1KB8tO0DCHLf8yRaYQ== +dotenv@14.2.0: + version "14.2.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-14.2.0.tgz#7e77fd5dd6cff5942c4496e1acf2d0f37a9e67aa" + integrity sha512-05POuPJyPpO6jqzTNweQFfAyMSD4qa4lvsMOWyTRTdpHKy6nnnN+IYWaXF+lHivhBH/ufDKlR4IWCAN3oPnHuw== dotenv@^16.0.3: version "16.0.3" @@ -11277,6 +11296,11 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== +eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + eslint@^8.25.0, eslint@^8.27.0, eslint@^8.28.0, eslint@^8.3.0, eslint@^8.8.0: version "8.39.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" @@ -11411,19 +11435,6 @@ execa@5.1.1, execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/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" - exit@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -11851,7 +11862,7 @@ fn.name@1.x.x: resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9, follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -11979,19 +11990,6 @@ formik@2.4.0: tiny-warning "^1.0.2" tslib "^1.10.0" -formik@^2.4.0: - version "2.4.2" - resolved "https://registry.npmjs.org/formik/-/formik-2.4.2.tgz#a1115457cfb012a5c782cea3ad4b40b2fe36fa18" - integrity sha512-C6nx0hifW2uENP3M6HpPmnAE6HFWCcd8/sqBZEOHZY6lpHJ5qehsfAy43ktpFLEmkBmhiZDei726utcUB9leqg== - dependencies: - deepmerge "^2.1.1" - hoist-non-react-statics "^3.3.0" - lodash "^4.17.21" - lodash-es "^4.17.21" - react-fast-compare "^2.0.1" - tiny-warning "^1.0.2" - tslib "^2.0.0" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -12038,15 +12036,6 @@ fs-extra@10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" - integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -12260,13 +12249,6 @@ get-port@^5.1.1: resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/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.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -12389,18 +12371,6 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - 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@7.2.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -12629,6 +12599,11 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + graphql-depth-limit@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/graphql-depth-limit/-/graphql-depth-limit-1.1.0.tgz#59fe6b2acea0ab30ee7344f4c75df39cc18244e8" @@ -13232,7 +13207,7 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore@^5.1.1, ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -13959,11 +13934,6 @@ is-stream-ended@^0.1.4: resolved "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/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.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -16987,14 +16957,7 @@ node-fetch-native@^0.1.8: resolved "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-0.1.8.tgz#19e2eaf6d86ac14e711ebd2612f40517c3468f2a" integrity sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q== -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@2.6.9, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: +node-fetch@2.6.7, node-fetch@2.6.9, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.9" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== @@ -17405,13 +17368,6 @@ npm-run-all@^4.1.5: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/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.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -18270,7 +18226,7 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== @@ -18748,29 +18704,10 @@ proto3-json-serializer@^0.1.8: dependencies: protobufjs "^6.11.2" -protobufjs@6.11.3, protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8: - version "6.11.3" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" - integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -protobufjs@^7.0.0: - version "7.2.3" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz#01af019e40d9c6133c49acbb3ff9e30f4f0f70b2" - integrity sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg== +protobufjs@6.11.3, protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@^7.0.0, protobufjs@^7.2.4: + version "7.2.5" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d" + integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -18798,12 +18735,7 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.9.0" resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -19719,10 +19651,10 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.1.7: - version "4.1.8" - resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== +reselect@4.1.7: + version "4.1.7" + resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" + integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" @@ -19956,10 +19888,10 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize-html@2.10.0: - version "2.10.0" - resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz#74d28848dfcf72c39693139131895c78900ab452" - integrity sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ== +sanitize-html@2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz#9a6434ee8fcaeddc740d8ae7cd5dd71d3981f8f6" + integrity sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA== dependencies: deepmerge "^4.2.2" escape-string-regexp "^4.0.0" @@ -20051,30 +19983,13 @@ semver-diff@^4.0.0: dependencies: semver "^7.3.5" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.5.1: - version "7.5.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" - -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0: - version "7.5.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" - integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== +"semver@2 || 3 || 4 || 5", semver@7.5.4, semver@7.x, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.2, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -21005,11 +20920,6 @@ strip-bom@^3.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/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.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -21456,24 +21366,16 @@ toposort@^2.0.2: resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -tough-cookie@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== +tough-cookie@^4.0.0, tough-cookie@^4.1.3, tough-cookie@~2.5.0: + version "4.1.3" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/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@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -21508,6 +21410,11 @@ triple-beam@^1.3.0: resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== +ts-api-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz#7c094f753b6705ee4faee25c3c684ade52d66d99" + integrity sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ== + ts-jest@^27.1.3: version "27.1.5" resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz#0ddf1b163fbaae3d5b7504a1e65c914a95cff297" @@ -22580,10 +22487,10 @@ winston-transport@^4.5.0: readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@3.9.0: - version "3.9.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.9.0.tgz#2bbdeb8167a75fac6d9a0c6d002890cd908016c2" - integrity sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ== +winston@3.10.0: + version "3.10.0" + resolved "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz#d033cb7bd3ced026fed13bf9d92c55b903116803" + integrity sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g== dependencies: "@colors/colors" "1.5.0" "@dabh/diagnostics" "^2.0.2"