From a29019dbb004ad59ae328898c6b1fd25e372d413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Wed, 9 Mar 2022 22:57:37 +0100 Subject: [PATCH 01/25] Load react-datepicker asynchronously MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/components/birthday_input.js | 26 ++++++++-------- app/soapbox/features/birthdays/date_picker.js | 4 +++ .../compose/components/schedule_form.js | 30 ++++++++++--------- .../features/ui/util/async-components.js | 4 +++ 4 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 app/soapbox/features/birthdays/date_picker.js diff --git a/app/soapbox/components/birthday_input.js b/app/soapbox/components/birthday_input.js index 26131370b..912ba82fb 100644 --- a/app/soapbox/components/birthday_input.js +++ b/app/soapbox/components/birthday_input.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React from 'react'; -import DatePicker from 'react-datepicker'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { defineMessages, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; -import 'react-datepicker/dist/react-datepicker.css'; import IconButton from 'soapbox/components/icon_button'; +import BundleContainer from 'soapbox/features/ui/containers/bundle_container'; +import { DatePicker } from 'soapbox/features/ui/util/async-components'; import { getFeatures } from 'soapbox/utils/features'; const messages = defineMessages({ @@ -112,16 +112,18 @@ class BirthdayInput extends ImmutablePureComponent { )}
- + + {Component => ()} +
); diff --git a/app/soapbox/features/birthdays/date_picker.js b/app/soapbox/features/birthdays/date_picker.js new file mode 100644 index 000000000..1944067d7 --- /dev/null +++ b/app/soapbox/features/birthdays/date_picker.js @@ -0,0 +1,4 @@ +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; + +export default DatePicker; diff --git a/app/soapbox/features/compose/components/schedule_form.js b/app/soapbox/features/compose/components/schedule_form.js index a090abfb0..866b61429 100644 --- a/app/soapbox/features/compose/components/schedule_form.js +++ b/app/soapbox/features/compose/components/schedule_form.js @@ -3,12 +3,12 @@ import classNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; -import DatePicker from 'react-datepicker'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { connect } from 'react-redux'; -import 'react-datepicker/dist/react-datepicker.css'; import IconButton from 'soapbox/components/icon_button'; +import BundleContainer from 'soapbox/features/ui/containers/bundle_container'; +import { DatePicker } from 'soapbox/features/ui/util/async-components'; import { setSchedule, removeSchedule } from '../../../actions/compose'; @@ -104,18 +104,20 @@ class ScheduleForm extends React.Component {
- + + {Component => ()} +
diff --git a/app/soapbox/features/ui/util/async-components.js b/app/soapbox/features/ui/util/async-components.js index 9c2218f8e..1622ca575 100644 --- a/app/soapbox/features/ui/util/async-components.js +++ b/app/soapbox/features/ui/util/async-components.js @@ -465,3 +465,7 @@ export function CreateApp() { export function SettingsStore() { return import(/* webpackChunkName: "features/developers" */'../../developers/settings_store'); } + +export function DatePicker() { + return import(/* webpackChunkName: "date_picker" */'../../birthdays/date_picker'); +} From 71ea3ed425e1acd86642b9f2025c7dad10ac4aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Thu, 10 Mar 2022 18:47:20 +0100 Subject: [PATCH 02/25] Include media attachments when redrafting on Mastodon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/actions/statuses.js | 3 ++- app/soapbox/reducers/compose.js | 2 +- app/soapbox/utils/features.js | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/soapbox/actions/statuses.js b/app/soapbox/actions/statuses.js index b529e9b23..c0a8c58e5 100644 --- a/app/soapbox/actions/statuses.js +++ b/app/soapbox/actions/statuses.js @@ -101,13 +101,14 @@ export function redraft(status, raw_text) { return (dispatch, getState) => { const state = getState(); const instance = state.get('instance'); - const { explicitAddressing } = getFeatures(instance); + const { explicitAddressing, redraftMedia } = getFeatures(instance); dispatch({ type: REDRAFT, status, raw_text, explicitAddressing, + redraftMedia, }); }; } diff --git a/app/soapbox/reducers/compose.js b/app/soapbox/reducers/compose.js index 57796af63..405d92f7a 100644 --- a/app/soapbox/reducers/compose.js +++ b/app/soapbox/reducers/compose.js @@ -432,7 +432,7 @@ export default function compose(state = initialState, action) { map.set('in_reply_to', action.status.get('in_reply_to_id')); map.set('privacy', action.status.get('visibility')); // TODO: Actually fix this rather than just removing it - // map.set('media_attachments', action.status.get('media_attachments')); + if (action.redraftMedia) map.set('media_attachments', action.status.get('media_attachments')); map.set('focusDate', new Date()); map.set('caretPosition', null); map.set('idempotencyKey', uuid()); diff --git a/app/soapbox/utils/features.js b/app/soapbox/utils/features.js index 8f636eea0..f745cd0e7 100644 --- a/app/soapbox/utils/features.js +++ b/app/soapbox/utils/features.js @@ -110,6 +110,7 @@ export const getFeatures = createSelector([instance => instance], instance => { v.software === MASTODON && gte(v.compatVersion, '3.2.0'), v.software === PLEROMA && gte(v.version, '2.4.50'), ]), + redraftMedia: v.software === MASTODON, }, overrides); }); From 2489438ff4f75933c4933d4e1c70c1f645b1c9fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Thu, 10 Mar 2022 19:03:18 +0100 Subject: [PATCH 03/25] Set max-height to chat preview message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/styles/chats.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/chats.scss b/app/styles/chats.scss index 418d0eca8..6060e882f 100644 --- a/app/styles/chats.scss +++ b/app/styles/chats.scss @@ -487,6 +487,7 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + max-height: 19px; a { color: var(--highlight-text-color); From 40b5761460a2c190cb9824e1d4f4384659c9964d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Mon, 14 Mar 2022 22:55:55 +0100 Subject: [PATCH 04/25] Normalize Pleroma account location MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/normalizers/account.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index 7faa3282c..98f895aa8 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -132,11 +132,12 @@ const normalizeVerified = (account: ImmutableMap) => { }); }; -// Normalize Fedibird/Truth Social location +// Normalize Fedibird/Truth Social/Pleroma location const normalizeLocation = (account: ImmutableMap) => { return account.update('location', location => { return [ location, + account.getIn(['pleroma', 'location']), account.getIn(['other_settings', 'location']), ].find(Boolean); }); From d07d9b5beddb801e4a062ea999855582ea96a0d0 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 13:55:18 -0500 Subject: [PATCH 05/25] Mock API with MSW --- app/soapbox/__mocks__/api.js | 26 -- app/soapbox/__tests__/api.js | 8 + app/soapbox/actions/__tests__/preload-test.js | 14 +- .../actions/__tests__/statuses-test.js | 22 +- app/soapbox/msw.js | 13 + app/soapbox/test_helpers.js | 5 +- app/soapbox/test_setup.js | 10 +- package.json | 1 + yarn.lock | 361 +++++++++++++++++- 9 files changed, 407 insertions(+), 53 deletions(-) delete mode 100644 app/soapbox/__mocks__/api.js create mode 100644 app/soapbox/__tests__/api.js create mode 100644 app/soapbox/msw.js diff --git a/app/soapbox/__mocks__/api.js b/app/soapbox/__mocks__/api.js deleted file mode 100644 index fcb3a3253..000000000 --- a/app/soapbox/__mocks__/api.js +++ /dev/null @@ -1,26 +0,0 @@ -import MockAdapter from 'axios-mock-adapter'; - -const api = jest.requireActual('../api'); -let mocks = []; - -export const __stub = func => mocks.push(func); -export const __clear = () => mocks = []; - -const setupMock = axios => { - const mock = new MockAdapter(axios); - mocks.map(func => func(mock)); -}; - -export const staticClient = api.staticClient; - -export const baseClient = (...params) => { - const axios = api.baseClient(...params); - setupMock(axios); - return axios; -}; - -export default (...params) => { - const axios = api.default(...params); - setupMock(axios); - return axios; -}; diff --git a/app/soapbox/__tests__/api.js b/app/soapbox/__tests__/api.js new file mode 100644 index 000000000..420a74828 --- /dev/null +++ b/app/soapbox/__tests__/api.js @@ -0,0 +1,8 @@ +import api from 'soapbox/api'; +import { getState } from 'soapbox/test_helpers'; + +test('returns a 404', () => { + return api(getState).get('/').catch(error => { + expect(error.response).toMatchObject({ data: { error: 'Not implemented' } }); + }); +}); diff --git a/app/soapbox/actions/__tests__/preload-test.js b/app/soapbox/actions/__tests__/preload-test.js index 5290802d2..415b22da0 100644 --- a/app/soapbox/actions/__tests__/preload-test.js +++ b/app/soapbox/actions/__tests__/preload-test.js @@ -1,6 +1,6 @@ import { Map as ImmutableMap } from 'immutable'; -import { __stub } from 'soapbox/api'; +import { server, rest } from 'soapbox/msw'; import { mockStore } from 'soapbox/test_helpers'; import { VERIFY_CREDENTIALS_REQUEST } from '../auth'; @@ -14,10 +14,14 @@ describe('preloadMastodon()', () => { it('creates the expected actions', () => { const data = require('soapbox/__fixtures__/mastodon_initial_state.json'); - __stub(mock => { - mock.onGet('/api/v1/accounts/verify_credentials') - .reply(200, {}); - }); + server.use( + rest.get('/api/v1/accounts/verify_credentials', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json(require('soapbox/__fixtures__/pleroma-account.json')), + ); + }), + ); const store = mockStore(ImmutableMap()); store.dispatch(preloadMastodon(data)); diff --git a/app/soapbox/actions/__tests__/statuses-test.js b/app/soapbox/actions/__tests__/statuses-test.js index 71a0596a4..7c9fba1b0 100644 --- a/app/soapbox/actions/__tests__/statuses-test.js +++ b/app/soapbox/actions/__tests__/statuses-test.js @@ -1,21 +1,21 @@ -import { Map as ImmutableMap } from 'immutable'; - import { STATUSES_IMPORT } from 'soapbox/actions/importer'; -import { __stub } from 'soapbox/api'; -import { mockStore } from 'soapbox/test_helpers'; +import { server, rest } from 'soapbox/msw'; +import { rootState, mockStore } from 'soapbox/test_helpers'; import { fetchContext } from '../statuses'; describe('fetchContext()', () => { it('handles Mitra context', done => { - const statuses = require('soapbox/__fixtures__/mitra-context.json'); + server.use( + rest.get('/api/v1/statuses/017ed505-5926-392f-256a-f86d5075df70/context', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json(require('soapbox/__fixtures__/mitra-context.json')), + ); + }), + ); - __stub(mock => { - mock.onGet('/api/v1/statuses/017ed505-5926-392f-256a-f86d5075df70/context') - .reply(200, statuses); - }); - - const store = mockStore(ImmutableMap()); + const store = mockStore(rootState); store.dispatch(fetchContext('017ed505-5926-392f-256a-f86d5075df70')).then(context => { const actions = store.getActions(); diff --git a/app/soapbox/msw.js b/app/soapbox/msw.js new file mode 100644 index 000000000..c2dd4f0ef --- /dev/null +++ b/app/soapbox/msw.js @@ -0,0 +1,13 @@ +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; + +export const server = setupServer( + rest.get('*', (req, res, ctx) => { + return res( + ctx.status(404), + ctx.json({ error: 'Not implemented' }), + ); + }), +); + +export { rest } from 'msw'; diff --git a/app/soapbox/test_helpers.js b/app/soapbox/test_helpers.js index c9de38dc4..90f41119e 100644 --- a/app/soapbox/test_helpers.js +++ b/app/soapbox/test_helpers.js @@ -11,6 +11,9 @@ import thunk from 'redux-thunk'; import rootReducer from 'soapbox/reducers'; +export const rootState = rootReducer(undefined, {}); +export const getState = () => rootState; + // Mock Redux // https://redux.js.org/recipes/writing-tests/ const middlewares = [thunk]; @@ -20,7 +23,7 @@ export const mockStore = configureMockStore(middlewares); export const createComponent = (children, props = {}) => { props = ImmutableMap({ locale: 'en', - store: mockStore(rootReducer(ImmutableMap(), {})), + store: mockStore(rootState), }).merge(props); return renderer.create( diff --git a/app/soapbox/test_setup.js b/app/soapbox/test_setup.js index a3432a744..b7f7ce8b0 100644 --- a/app/soapbox/test_setup.js +++ b/app/soapbox/test_setup.js @@ -3,12 +3,14 @@ import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; -import { __clear as clearApiMocks } from 'soapbox/api'; +import { server } from 'soapbox/msw'; // Enzyme const adapter = new Adapter(); configure({ adapter }); -// API mocking -jest.mock('soapbox/api'); -afterEach(() => clearApiMocks()); +// Setup MSW +// https://mswjs.io/docs/api/setup-server +beforeAll(() => server.listen()); +afterEach(() => server.resetHandlers()); +afterAll(() => server.close()); diff --git a/package.json b/package.json index 2608b779a..cb3a48d59 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "mark-loader": "^0.1.6", "marky": "^1.2.1", "mini-css-extract-plugin": "^1.6.2", + "msw": "^0.39.2", "object-assign": "^4.1.1", "object-fit-images": "^3.2.3", "object.values": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index 2127e09ab..c138975d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1569,6 +1569,26 @@ minimatch "^3.0.3" slash "^1.0.0" +"@mswjs/cookies@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.0.tgz#7ef2b5d7e444498bb27cf57720e61f76a4ce9f23" + integrity sha512-GTKYnIfXVP8GL8HRWrse+ujqDXCLKvu7+JoL6pvZFzS/d2i9pziByoWD69cOe35JNoSrx2DPNqrhUF+vgV3qUA== + dependencies: + "@types/set-cookie-parser" "^2.4.0" + set-cookie-parser "^2.4.6" + +"@mswjs/interceptors@^0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.15.1.tgz#4a0009f56e51bc2cd3176f1507065c7d2f6c0d5e" + integrity sha512-D5B+ZJNlfvBm6ZctAfRBdNJdCHYAe2Ix4My5qfbHV5WH+3lkt3mmsjiWJzEh5ZwGDauzY487TldI275If7DJVw== + dependencies: + "@open-draft/until" "^1.0.3" + "@xmldom/xmldom" "^0.7.5" + debug "^4.3.3" + headers-polyfill "^3.0.4" + outvariant "^1.2.1" + strict-event-emitter "^0.2.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1590,6 +1610,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@open-draft/until@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" + integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== + "@polka/url@^1.0.0-next.20": version "1.0.0-next.20" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.20.tgz#111b5db0f501aa89b05076fa31f0ea0e0c292cd3" @@ -1747,6 +1772,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + "@types/escape-html@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-1.0.1.tgz#b19b4646915f0ae2c306bf984dc0a59c5cfc97ba" @@ -1826,6 +1856,11 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/js-levenshtein@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" + integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== + "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -1914,6 +1949,13 @@ dependencies: schema-utils "*" +"@types/set-cookie-parser@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" + integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== + dependencies: + "@types/node" "*" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -2074,6 +2116,11 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.2.tgz#ea584b637ff63c5a477f6f21604b5a205b72c9ec" integrity sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw== +"@xmldom/xmldom@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" + integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2217,7 +2264,7 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^5.0.0: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2632,6 +2679,11 @@ balanced-match@^2.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -2652,6 +2704,15 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2760,6 +2821,14 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2851,6 +2920,14 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" +chalk@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2899,6 +2976,11 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + cheerio-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" @@ -2992,6 +3074,11 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -3000,6 +3087,11 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3025,6 +3117,11 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3180,6 +3277,11 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-webpack-plugin@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz#b71d21991599f61a4ee00ba79087b8ba279bbb59" @@ -3530,6 +3632,13 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -3587,6 +3696,13 @@ default-gateway@^6.0.0: dependencies: execa "^5.0.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -4325,7 +4441,7 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.2.0: +events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -4427,6 +4543,15 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4487,6 +4612,13 @@ feather-icons@^4.28.0: classnames "^2.2.5" core-js "^3.1.3" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4810,6 +4942,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graphql@^16.3.0: + version "16.3.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.3.0.tgz#a91e24d10babf9e60c706919bb182b53ccdffc05" + integrity sha512-xm+ANmA16BzCT5pLjuXySbQVFwH3oJctUVdy81w1sV0vBU0KgDdBGtxQOUd5zqOBk/JayAFeG8Dlmeq74rjm/A== + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -4878,6 +5015,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +headers-polyfill@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.0.4.tgz#cd70c815a441dd882372fcd6eda212ce997c9b18" + integrity sha512-I1DOM1EdWYntdrnCvqQtcKwSSuiTzoqOExy4v1mdcFixFZABlWP4IPHdmoLtPda0abMHqDOY4H9svhQ10DFR4w== + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -5114,7 +5256,7 @@ husky@^7.0.2: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5126,6 +5268,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5208,7 +5355,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5223,6 +5370,26 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inquirer@^8.2.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.1.tgz#e00022e3e8930a92662f760f020686530a84671d" + integrity sha512-pxhBaw9cyTFMjwKtkjePWDhvwzvrNGAw7En4hottzlPvz80GZaMZthdDU35aA6/f5FRZf3uhE057q8w1DE3V2g== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + internal-ip@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-6.2.0.tgz#d5541e79716e406b74ac6b07b856ef18dc1621c1" @@ -5490,6 +5657,11 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-ip@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" @@ -5510,6 +5682,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-node-process@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.0.1.tgz#4fc7ac3a91e8aac58175fe0578abbc56f2831b23" + integrity sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ== + is-number-object@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" @@ -6138,6 +6315,11 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6918,6 +7100,31 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msw@^0.39.2: + version "0.39.2" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.39.2.tgz#832e9274db62c43cb79854d5a69dce031c700de8" + integrity sha512-ju/HpqQpE4/qCxZ23t5Gaau0KREn4QuFzdG28nP1EpidMrymMJuIvNd32+2uGTGG031PMwrC41YW7vCxHOwyHA== + dependencies: + "@mswjs/cookies" "^0.2.0" + "@mswjs/interceptors" "^0.15.1" + "@open-draft/until" "^1.0.3" + "@types/cookie" "^0.4.1" + "@types/js-levenshtein" "^1.1.1" + chalk "4.1.1" + chokidar "^3.4.2" + cookie "^0.4.2" + graphql "^16.3.0" + headers-polyfill "^3.0.4" + inquirer "^8.2.0" + is-node-process "^1.0.1" + js-levenshtein "^1.1.6" + node-fetch "^2.6.7" + path-to-regexp "^6.2.0" + statuses "^2.0.0" + strict-event-emitter "^0.2.0" + type-fest "^1.2.2" + yargs "^17.3.1" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -6931,6 +7138,11 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nanoid@^3.1.23: version "3.1.25" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" @@ -6974,6 +7186,13 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -7218,6 +7437,31 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +outvariant@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" + integrity sha512-bcILvFkvpMXh66+Ubax/inxbKRyWTUiiFIW2DWkiS79wakrLGn3Ydy+GvukadiyfZjaL6C7YhIem4EZSM282wA== + p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -7429,6 +7673,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" + integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8430,7 +8679,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8728,6 +8977,11 @@ rst-selector-parser@^2.2.3: lodash.flattendeep "^4.4.0" nearley "^2.7.10" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8742,6 +8996,13 @@ rxjs@^6.6.7: dependencies: tslib "^1.9.0" +rxjs@^7.5.5: + version "7.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" + integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -8918,6 +9179,11 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +set-cookie-parser@^2.4.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" + integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -9139,6 +9405,18 @@ stack-utils@^2.0.3: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strict-event-emitter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" + integrity sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w== + dependencies: + events "^3.3.0" + string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -9161,6 +9439,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.matchall@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" @@ -9244,6 +9531,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -9561,7 +9855,7 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through@^2.3.8: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9596,6 +9890,13 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9639,6 +9940,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -9756,6 +10062,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10081,6 +10392,18 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -10257,6 +10580,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" @@ -10396,6 +10727,11 @@ yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + yargs@^16.0.3: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -10409,6 +10745,19 @@ yargs@^16.0.3: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.3.1: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 63f33dca6a68a8af36a3096ae09e00a9ff8d141d Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 15:32:43 -0500 Subject: [PATCH 06/25] gitignore: add slashes --- .gitignore | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d2c20b8ef..1d36a4816 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ yarn-error.log* !/custom/**/.gitkeep # surge.sh -CNAME -AUTH -CORS -ROUTER +/CNAME +/AUTH +/CORS +/ROUTER From c0ea0a948dbdb1a103b9044d3edfe3c80de94906 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 16:01:36 -0500 Subject: [PATCH 07/25] Suggestions: limit to 50 results --- app/soapbox/actions/suggestions.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/soapbox/actions/suggestions.js b/app/soapbox/actions/suggestions.js index d896e6e07..0221b3a05 100644 --- a/app/soapbox/actions/suggestions.js +++ b/app/soapbox/actions/suggestions.js @@ -16,10 +16,10 @@ export const SUGGESTIONS_V2_FETCH_REQUEST = 'SUGGESTIONS_V2_FETCH_REQUEST'; export const SUGGESTIONS_V2_FETCH_SUCCESS = 'SUGGESTIONS_V2_FETCH_SUCCESS'; export const SUGGESTIONS_V2_FETCH_FAIL = 'SUGGESTIONS_V2_FETCH_FAIL'; -export function fetchSuggestionsV1() { +export function fetchSuggestionsV1(params = {}) { return (dispatch, getState) => { dispatch({ type: SUGGESTIONS_FETCH_REQUEST, skipLoading: true }); - return api(getState).get('/api/v1/suggestions').then(({ data: accounts }) => { + return api(getState).get('/api/v1/suggestions', { params }).then(({ data: accounts }) => { dispatch(importFetchedAccounts(accounts)); dispatch({ type: SUGGESTIONS_FETCH_SUCCESS, accounts, skipLoading: true }); return accounts; @@ -30,10 +30,10 @@ export function fetchSuggestionsV1() { }; } -export function fetchSuggestionsV2() { +export function fetchSuggestionsV2(params = {}) { return (dispatch, getState) => { dispatch({ type: SUGGESTIONS_V2_FETCH_REQUEST, skipLoading: true }); - return api(getState).get('/api/v2/suggestions').then(({ data: suggestions }) => { + return api(getState).get('/api/v2/suggestions', { params }).then(({ data: suggestions }) => { const accounts = suggestions.map(({ account }) => account); dispatch(importFetchedAccounts(accounts)); dispatch({ type: SUGGESTIONS_V2_FETCH_SUCCESS, suggestions, skipLoading: true }); @@ -45,21 +45,21 @@ export function fetchSuggestionsV2() { }; } -export function fetchSuggestions() { +export function fetchSuggestions(params = { limit: 50 }) { return (dispatch, getState) => { const state = getState(); const instance = state.get('instance'); const features = getFeatures(instance); if (features.suggestionsV2) { - dispatch(fetchSuggestionsV2()) + dispatch(fetchSuggestionsV2(params)) .then(suggestions => { const accountIds = suggestions.map(({ account }) => account.id); dispatch(fetchRelationships(accountIds)); }) .catch(() => {}); } else if (features.suggestions) { - dispatch(fetchSuggestionsV1()) + dispatch(fetchSuggestionsV1(params)) .then(accounts => { const accountIds = accounts.map(({ id }) => id); dispatch(fetchRelationships(accountIds)); From cd19425a0d9f204059b5986daf4943e138ea5aaa Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 19:23:07 -0500 Subject: [PATCH 08/25] Fix move notification crashing Notifications page --- .../pleroma-notification-move.json | 119 ++++++++++++++++++ .../reducers/__tests__/notifications-test.js | 16 +++ app/soapbox/reducers/notifications.js | 1 + 3 files changed, 136 insertions(+) create mode 100644 app/soapbox/__fixtures__/pleroma-notification-move.json diff --git a/app/soapbox/__fixtures__/pleroma-notification-move.json b/app/soapbox/__fixtures__/pleroma-notification-move.json new file mode 100644 index 000000000..d7a763457 --- /dev/null +++ b/app/soapbox/__fixtures__/pleroma-notification-move.json @@ -0,0 +1,119 @@ +{ + "account": { + "acct": "alex@fedibird.com", + "avatar": "https://gleasonator.com/images/avi.png", + "avatar_static": "https://gleasonator.com/images/avi.png", + "bot": false, + "created_at": "2022-01-24T21:25:37.000Z", + "display_name": "alex@fedibird.com", + "emojis": [], + "fields": [], + "followers_count": 2, + "following_count": 1, + "fqn": "alex@fedibird.com", + "header": "https://gleasonator.com/images/banner.png", + "header_static": "https://gleasonator.com/images/banner.png", + "id": "AFmHQ18XZ7Lco68MW8", + "last_status_at": "2022-03-16T22:07:53", + "locked": false, + "note": "

", + "pleroma": { + "accepts_chat_messages": null, + "also_known_as": [], + "ap_id": "https://fedibird.com/users/alex", + "background_image": null, + "birthday": "1993-07-03", + "deactivated": false, + "favicon": "https://gleasonator.com/proxy/HzfsidHss3CuA7aM2zxXN-tAjF8/aHR0cHM6Ly9mZWRpYmlyZC5jb20vZmF2aWNvbi5pY28/favicon.ico", + "hide_favorites": true, + "hide_followers": false, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "is_admin": false, + "is_confirmed": true, + "is_moderator": false, + "is_suggested": false, + "location": "Texas, USA", + "relationship": {}, + "skip_thread_containment": false, + "tags": [] + }, + "source": { + "fields": [], + "note": "", + "pleroma": { + "actor_type": "Person", + "discoverable": false + }, + "sensitive": false + }, + "statuses_count": 5, + "url": "https://fedibird.com/@alex", + "username": "alex" + }, + "created_at": "2022-03-17T00:08:48.000Z", + "id": "406814", + "pleroma": { + "is_muted": false, + "is_seen": true + }, + "target": { + "acct": "benis911", + "avatar": "https://gleasonator.com/images/avi.png", + "avatar_static": "https://gleasonator.com/images/avi.png", + "bot": false, + "created_at": "2021-03-26T20:42:11.000Z", + "display_name": "benis911", + "emojis": [], + "fields": [], + "followers_count": 0, + "following_count": 0, + "fqn": "benis911@gleasonator.com", + "header": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg", + "header_static": "https://media.gleasonator.com/fc595bbbcf5aabefecd1c2adfe5b7f5457db59847992881668653a0338ba25bd.jpg", + "id": "A5c5LK7EJTFR0u26Pg", + "last_status_at": "2022-03-16T22:01:57", + "locked": false, + "note": "hello world 2", + "pleroma": { + "accepts_chat_messages": true, + "also_known_as": [ + "https://gleasonator.com/users/alex", + "https://poa.st/users/alex", + "https://fedibird.com/users/alex" + ], + "ap_id": "https://gleasonator.com/users/benis911", + "background_image": null, + "birthday": "2000-01-25", + "deactivated": false, + "favicon": "https://gleasonator.com/favicon.png", + "hide_favorites": true, + "hide_followers": true, + "hide_followers_count": true, + "hide_follows": true, + "hide_follows_count": true, + "is_admin": false, + "is_confirmed": true, + "is_moderator": false, + "is_suggested": false, + "location": null, + "relationship": {}, + "skip_thread_containment": false, + "tags": [] + }, + "source": { + "fields": [], + "note": "hello world 2", + "pleroma": { + "actor_type": "Person", + "discoverable": false + }, + "sensitive": false + }, + "statuses_count": 172, + "url": "https://gleasonator.com/users/benis911", + "username": "benis911" + }, + "type": "move" +} diff --git a/app/soapbox/reducers/__tests__/notifications-test.js b/app/soapbox/reducers/__tests__/notifications-test.js index 630aa61e3..aa5b7cd62 100644 --- a/app/soapbox/reducers/__tests__/notifications-test.js +++ b/app/soapbox/reducers/__tests__/notifications-test.js @@ -93,6 +93,22 @@ describe('notifications reducer', () => { expect(result.items.size).toEqual(1); expect(result.items.get('4').id).toEqual('4'); }); + + it('imports move notification', () => { + const action = { + type: NOTIFICATIONS_EXPAND_SUCCESS, + notifications: [ + require('soapbox/__fixtures__/pleroma-notification-move.json'), + ], + next: null, + skipLoading: true, + }; + + const result = reducer(undefined, action).items.get('406814'); + + expect(result.account).toEqual('AFmHQ18XZ7Lco68MW8'); + expect(result.target).toEqual('A5c5LK7EJTFR0u26Pg'); + }); }); describe('NOTIFICATIONS_EXPAND_REQUEST', () => { diff --git a/app/soapbox/reducers/notifications.js b/app/soapbox/reducers/notifications.js index 02ffa58e9..fad2563c3 100644 --- a/app/soapbox/reducers/notifications.js +++ b/app/soapbox/reducers/notifications.js @@ -56,6 +56,7 @@ const comparator = (a, b) => { const minifyNotification = notification => { return notification.mergeWith((o, n) => n || o, { account: notification.getIn(['account', 'id']), + target: notification.getIn(['target', 'id']), status: notification.getIn(['status', 'id']), }); }; From 76eeb8a219159d20b3c173cd3a1b37bf6781f7f4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 20:54:41 -0500 Subject: [PATCH 09/25] Delete+Redraft: drop attachments with integer IDs from Pleroma --- .../__fixtures__/pleroma-status-deleted.json | 229 +++++++++++ app/soapbox/actions/statuses.js | 9 +- .../reducers/__tests__/compose-test.js | 361 ++---------------- app/soapbox/reducers/compose.js | 10 +- app/soapbox/utils/__tests__/numbers-test.js | 13 + app/soapbox/utils/__tests__/status-test.js | 12 + app/soapbox/utils/features.js | 1 - app/soapbox/utils/numbers.js | 2 + app/soapbox/utils/status.js | 7 + 9 files changed, 301 insertions(+), 343 deletions(-) create mode 100644 app/soapbox/__fixtures__/pleroma-status-deleted.json create mode 100644 app/soapbox/utils/__tests__/numbers-test.js create mode 100644 app/soapbox/utils/__tests__/status-test.js diff --git a/app/soapbox/__fixtures__/pleroma-status-deleted.json b/app/soapbox/__fixtures__/pleroma-status-deleted.json new file mode 100644 index 000000000..2d37af257 --- /dev/null +++ b/app/soapbox/__fixtures__/pleroma-status-deleted.json @@ -0,0 +1,229 @@ +{ + "account": { + "acct": "alex", + "avatar": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png", + "avatar_static": "https://media.gleasonator.com/6d64aecb17348b23aaff78db4687b9476cb0da1c07cc6a819c2e6ec7144c18b1.png", + "bot": false, + "created_at": "2020-01-08T01:25:43.000Z", + "display_name": "Alex Gleason", + "emojis": [], + "fields": [ + { + "name": "Website", + "value": "https://alexgleason.me" + }, + { + "name": "Soapbox", + "value": "https://soapbox.pub" + }, + { + "name": "Email", + "value": "alex@alexgleason.me" + }, + { + "name": "Gender identity", + "value": "Soyboy" + }, + { + "name": "Donate (PayPal)", + "value": "https://paypal.me/gleasonator" + }, + { + "name": "$BTC", + "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n" + }, + { + "name": "$ETH", + "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717" + }, + { + "name": "$DOGE", + "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D" + }, + { + "name": "$XMR", + "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK" + } + ], + "follow_requests_count": 0, + "followers_count": 2489, + "following_count": 1586, + "fqn": "alex@gleasonator.com", + "header": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png", + "header_static": "https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png", + "id": "9v5bmRalQvjOy0ECcC", + "last_status_at": "2022-03-16T21:57:17", + "locked": false, + "note": "I create Fediverse software that empowers people online.

I'm vegan btw

Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.", + "pleroma": { + "accepts_chat_messages": true, + "accepts_email_list": true, + "allow_following_move": true, + "also_known_as": [ + "https://mitra.social/users/alex" + ], + "ap_id": "https://gleasonator.com/users/alex", + "background_image": null, + "birthday": "1993-07-03", + "deactivated": false, + "email": "alex@alexgleason.me", + "favicon": "https://gleasonator.com/favicon.png", + "hide_favorites": true, + "hide_followers": false, + "hide_followers_count": false, + "hide_follows": false, + "hide_follows_count": false, + "is_admin": true, + "is_confirmed": true, + "is_moderator": false, + "is_suggested": true, + "location": null, + "notification_settings": { + "block_from_strangers": false, + "hide_notification_contents": false + }, + "relationship": {}, + "skip_thread_containment": false, + "tags": [], + "unread_conversation_count": 392, + "unread_notifications_count": 2 + }, + "source": { + "fields": [ + { + "name": "Website", + "value": "https://alexgleason.me" + }, + { + "name": "Soapbox", + "value": "https://soapbox.pub" + }, + { + "name": "Email", + "value": "alex@alexgleason.me" + }, + { + "name": "Gender identity", + "value": "Soyboy" + }, + { + "name": "Donate (PayPal)", + "value": "https://paypal.me/gleasonator" + }, + { + "name": "$BTC", + "value": "bc1q9cx35adpm73aq2fw40ye6ts8hfxqzjr5unwg0n" + }, + { + "name": "$ETH", + "value": "0xAc9aB5Fc04Dc1cB1789Af75b523Bd23C70B2D717" + }, + { + "name": "$DOGE", + "value": "D5zVZs6jrRakaPVGiErkQiHt9sayzm6V5D" + }, + { + "name": "$XMR", + "value": "45JDCLrjJ4bgVUSbbs2yjy9m5Mf4VLPW8fG7jw9sq5u69rXZZopQogZNeyYkMBnXpkaip4p4QwaaJNhdTotPa9g44DBCzdK" + } + ], + "note": "I create Fediverse software that empowers people online.\r\n\r\nI'm vegan btw\r\n\r\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.", + "pleroma": { + "actor_type": "Person", + "discoverable": false, + "no_rich_text": false, + "show_birthday": true, + "show_role": true + }, + "privacy": "public", + "sensitive": false + }, + "statuses_count": 23695, + "url": "https://gleasonator.com/users/alex", + "username": "alex" + }, + "application": { + "name": "Soapbox FE", + "website": "https://soapbox.pub/" + }, + "bookmarked": false, + "card": null, + "content": "

I am going to delete this post for testing purposes

", + "created_at": "2022-03-16T21:57:16.000Z", + "emojis": [], + "favourited": false, + "favourites_count": 3, + "id": "AHU2RrX0wdcwzCYjFQ", + "in_reply_to_account_id": null, + "in_reply_to_id": null, + "language": null, + "media_attachments": [ + { + "blurhash": "eWGlL@?b~q%MRj4nt7IUof%M%MIURjRjIUM{IUM{Rjayxut7j[j[xu", + "description": "", + "id": "508107650", + "meta": { + "original": { + "aspect": 1, + "height": 1024, + "width": 1024 + } + }, + "pleroma": { + "mime_type": "image/png" + }, + "preview_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png", + "remote_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png", + "text_url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png", + "type": "image", + "url": "https://media.gleasonator.com/2b9ddcd8b27cad786fd34bc2cfe02c1b63aa1b8e7b8d72379b5c9375fb61f199.png" + } + ], + "mentions": [], + "muted": false, + "pinned": false, + "pleroma": { + "content": { + "text/plain": "I am going to delete this post for testing purposes" + }, + "content_type": "text/markdown", + "conversation_id": "AHU2RrUB7BMIqPESpM", + "direct_conversation_id": null, + "emoji_reactions": [ + { + "count": 1, + "me": false, + "name": "😭" + }, + { + "count": 1, + "me": false, + "name": "❔" + } + ], + "expires_at": null, + "in_reply_to_account_acct": null, + "local": true, + "parent_visible": false, + "pinned_at": null, + "quote": null, + "quote_url": null, + "quote_visible": false, + "spoiler_text": { + "text/plain": "" + }, + "thread_muted": false + }, + "poll": null, + "reblog": null, + "reblogged": false, + "reblogs_count": 1, + "replies_count": 2, + "sensitive": false, + "spoiler_text": "", + "tags": [], + "text": "I am going to delete this post for testing purposes", + "uri": "https://gleasonator.com/objects/205ec868-d28d-4668-a56a-33321f7e285e", + "url": "https://gleasonator.com/notice/AHU2RrX0wdcwzCYjFQ", + "visibility": "public" +} diff --git a/app/soapbox/actions/statuses.js b/app/soapbox/actions/statuses.js index abc7e4f94..3433f47f2 100644 --- a/app/soapbox/actions/statuses.js +++ b/app/soapbox/actions/statuses.js @@ -1,5 +1,5 @@ import { isLoggedIn } from 'soapbox/utils/auth'; -import { getFeatures } from 'soapbox/utils/features'; +import { getFeatures, parseVersion } from 'soapbox/utils/features'; import { shouldHaveCard } from 'soapbox/utils/status'; import api from '../api'; @@ -99,17 +99,16 @@ export function fetchStatus(id) { export function redraft(status, raw_text, content_type) { return (dispatch, getState) => { - const state = getState(); - const instance = state.get('instance'); - const { explicitAddressing, redraftMedia } = getFeatures(instance); + const { instance } = getState(); + const { explicitAddressing } = getFeatures(instance); dispatch({ type: REDRAFT, status, raw_text, explicitAddressing, - redraftMedia, content_type, + v: parseVersion(instance.version), }); }; } diff --git a/app/soapbox/reducers/__tests__/compose-test.js b/app/soapbox/reducers/__tests__/compose-test.js index 348739a6b..454c787ca 100644 --- a/app/soapbox/reducers/__tests__/compose-test.js +++ b/app/soapbox/reducers/__tests__/compose-test.js @@ -1,10 +1,11 @@ -import { Map as ImmutableMap } from 'immutable'; +import { Map as ImmutableMap, fromJS } from 'immutable'; import * as actions from 'soapbox/actions/compose'; import { ME_FETCH_SUCCESS, ME_PATCH_SUCCESS } from 'soapbox/actions/me'; import { SETTING_CHANGE } from 'soapbox/actions/settings'; -//import { REDRAFT } from 'soapbox/actions/statuses'; +import { REDRAFT } from 'soapbox/actions/statuses'; import { TIMELINE_DELETE } from 'soapbox/actions/timelines'; +import { normalizeStatus } from 'soapbox/normalizers/status'; import reducer from '../compose'; @@ -38,6 +39,29 @@ describe('compose reducer', () => { expect(state.get('idempotencyKey').length === 36); }); + describe('REDRAFT', () => { + it('strips Pleroma integer attachments', () => { + const action = { + type: REDRAFT, + status: normalizeStatus(fromJS(require('soapbox/__fixtures__/pleroma-status-deleted.json'))), + v: { software: 'Pleroma' }, + }; + + const result = reducer(undefined, action); + expect(result.get('media_attachments').isEmpty()).toBe(true); + }); + + it('leaves non-Pleroma integer attachments alone', () => { + const action = { + type: REDRAFT, + status: normalizeStatus(fromJS(require('soapbox/__fixtures__/pleroma-status-deleted.json'))), + }; + + const result = reducer(undefined, action); + expect(result.getIn(['media_attachments', 0, 'id'])).toEqual('508107650'); + }); + }); + it('uses \'public\' scope as default', () => { const action = { type: actions.COMPOSE_REPLY, @@ -325,30 +349,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_UPLOAD_UNDO', () => { - // const state = ImmutableMap({ - // media_attachments: ImmutableList([ - // description: null, - // id: '1375732379', - // pleroma: { - // mime_type: 'image/jpeg' - // }, - // preview_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg', - // remote_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg', - // text_url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg', - // type: 'image', - // url: 'https://media.gleasonator.com/media_attachments/files/000/853/856/original/7035d67937053e1d.jpg' - // ]), - // }); - // const action = { - // type: actions.COMPOSE_UPLOAD_UNDO, - // mediaId: '1375732379', - // }; - // expect(reducer(state, action)).toEqual({ - // media_attachments: [], - // }); - // }); - it('should handle COMPOSE_UPLOAD_PROGRESS', () => { const state = ImmutableMap({ progress: 0 }); const action = { @@ -361,203 +361,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_MENTION', () => { - // const state = ImmutableMap({}); - // const account = { - // '9w1HhmenIAKBHJiUs4': { - // header_static: 'https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png', - // display_name_html: 'Alex Gleason', - // bot: false, - // display_name: 'Alex Gleason', - // created_at: '2020-06-12T21:47:28.000Z', - // locked: false, - // emojis: [], - // header: 'https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png', - // url: 'https://gleasonator.com/users/alex', - // note: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.', - // acct: 'alex@gleasonator.com', - // avatar_static: 'https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg', - // username: 'alex', - // avatar: 'https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg', - // fields: [ - // { - // name: 'Website', - // value: 'https://alexgleason.me', - // name_emojified: 'Website', - // value_emojified: 'https://alexgleason.me', - // value_plain: 'https://alexgleason.me' - // }, - // { - // name: 'Pleroma+Soapbox', - // value: 'https://soapbox.pub', - // name_emojified: 'Pleroma+Soapbox', - // value_emojified: 'https://soapbox.pub', - // value_plain: 'https://soapbox.pub' - // }, - // { - // name: 'Email', - // value: 'alex@alexgleason.me', - // name_emojified: 'Email', - // value_emojified: 'alex@alexgleason.me', - // value_plain: 'alex@alexgleason.me' - // }, - // { - // name: 'Gender identity', - // value: 'Soyboy', - // name_emojified: 'Gender identity', - // value_emojified: 'Soyboy', - // value_plain: 'Soyboy' - // } - // ], - // pleroma: { - // hide_follows: false, - // hide_followers_count: false, - // background_image: null, - // confirmation_pending: false, - // is_moderator: false, - // hide_follows_count: false, - // hide_followers: false, - // relationship: { - // showing_reblogs: true, - // followed_by: false, - // subscribing: false, - // blocked_by: false, - // requested: false, - // domain_blocking: false, - // following: false, - // endorsed: false, - // blocking: false, - // muting: false, - // id: '9w1HhmenIAKBHJiUs4', - // muting_notifications: false - // }, - // tags: [], - // hide_favorites: true, - // is_admin: false, - // skip_thread_containment: false - // }, - // source: { - // fields: [], - // note: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.', - // pleroma: { - // actor_type: 'Person', - // discoverable: false - // }, - // sensitive: false - // }, - // id: '9w1HhmenIAKBHJiUs4', - // note_emojified: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.' - // }, - // }; - // const action = { - // type: actions.COMPOSE_MENTION, - // account: account, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // text: '@alex@gleasonator.com', - // caretPosition: null, - // }); - // }); - - // it('should handle COMPOSE_DIRECT', () => { - // const state = ImmutableMap({}); - // const account = { - // '9w1HhmenIAKBHJiUs4': { - // header_static: 'https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png', - // display_name_html: 'Alex Gleason', - // bot: false, - // display_name: 'Alex Gleason', - // created_at: '2020-06-12T21:47:28.000Z', - // locked: false, - // emojis: [], - // header: 'https://media.gleasonator.com/accounts/headers/000/000/001/original/9d0e4dbf1c9dbc8f.png', - // url: 'https://gleasonator.com/users/alex', - // note: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.', - // acct: 'alex@gleasonator.com', - // avatar_static: 'https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg', - // username: 'alex', - // avatar: 'https://media.gleasonator.com/accounts/avatars/000/000/001/original/1a630e4c4c64c948.jpg', - // fields: [ - // { - // name: 'Website', - // value: 'https://alexgleason.me', - // name_emojified: 'Website', - // value_emojified: 'https://alexgleason.me', - // value_plain: 'https://alexgleason.me' - // }, - // { - // name: 'Pleroma+Soapbox', - // value: 'https://soapbox.pub', - // name_emojified: 'Pleroma+Soapbox', - // value_emojified: 'https://soapbox.pub', - // value_plain: 'https://soapbox.pub' - // }, - // { - // name: 'Email', - // value: 'alex@alexgleason.me', - // name_emojified: 'Email', - // value_emojified: 'alex@alexgleason.me', - // value_plain: 'alex@alexgleason.me' - // }, - // { - // name: 'Gender identity', - // value: 'Soyboy', - // name_emojified: 'Gender identity', - // value_emojified: 'Soyboy', - // value_plain: 'Soyboy' - // } - // ], - // pleroma: { - // hide_follows: false, - // hide_followers_count: false, - // background_image: null, - // confirmation_pending: false, - // is_moderator: false, - // hide_follows_count: false, - // hide_followers: false, - // relationship: { - // showing_reblogs: true, - // followed_by: false, - // subscribing: false, - // blocked_by: false, - // requested: false, - // domain_blocking: false, - // following: false, - // endorsed: false, - // blocking: false, - // muting: false, - // id: '9w1HhmenIAKBHJiUs4', - // muting_notifications: false - // }, - // tags: [], - // hide_favorites: true, - // is_admin: false, - // skip_thread_containment: false - // }, - // source: { - // fields: [], - // note: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.', - // pleroma: { - // actor_type: 'Person', - // discoverable: false - // }, - // sensitive: false - // }, - // id: '9w1HhmenIAKBHJiUs4', - // note_emojified: 'Fediverse developer. I come in peace. #vegan #freeculture #atheist #antiporn #gendercritical. Boosts ≠ endorsements.' - // } - // }; - // const action = { - // type: actions.COMPOSE_DIRECT, - // account: account, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // text: '@alex@gleasonator.com', - // caretPosition: null, - // privacy: 'direct', - // }); - // }); - // it('should handle COMPOSE_SUGGESTIONS_CLEAR', () => { const state = ImmutableMap({ }); const action = { @@ -570,28 +373,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_SUGGESTIONS_READY', () => { - // const state = ImmutableMap({ default_privacy: 'public', privacy: 'public'}); - // const action = { - // type: actions.COMPOSE_SUGGESTIONS_READY, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // default_privacy: 'unlisted', - // privacy: 'public', - // }); - // }); - // - // it('should handle COMPOSE_SUGGESTION_SELECT', () => { - // const state = ImmutableMap({ default_privacy: 'public', privacy: 'public'}); - // const action = { - // type: actions.COMPOSE_SUGGESTION_SELECT, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // default_privacy: 'unlisted', - // privacy: 'public', - // }); - // }); - // it('should handle COMPOSE_SUGGESTION_TAGS_UPDATE', () => { const state = ImmutableMap({ tagHistory: [ 'hashtag' ] }); const action = { @@ -627,42 +408,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_EMOJI_INSERT', () => { - // const state = ImmutableMap({ text: 'this is my' }); - // const action = { - // type: actions.COMPOSE_EMOJI_INSERT, - // position: 11, - // emoji: [], - // needsSpace, true, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // text: 'this is my :emoji:', - // caretPosition: 15, - // }); - // }); - // - // it('should handle COMPOSE_UPLOAD_CHANGE_SUCCESS', () => { - // const state = ImmutableMap({ default_privacy: 'public' }); - // const action = { - // type: actions.COMPOSE_UPLOAD_CHANGE_SUCCESS, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // default_privacy: 'unlisted', - // privacy: 'public', - // }); - // }); - // - // it('should handle REDRAFT', () => { - // const state = ImmutableMap({ default_privacy: 'public' }); - // const action = { - // type: REDRAFT, - // }; - // expect(reducer(state, action).toJS()).toMatchObject({ - // default_privacy: 'unlisted', - // privacy: 'public', - // }); - // }); - // it('should handle COMPOSE_POLL_ADD', () => { const state = ImmutableMap({ poll: null }); const initialPoll = Object({ @@ -691,34 +436,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_POLL_OPTION_ADD', () => { - // const initialPoll = Object({ - // options: [ - // 'option 1', - // 'option 2', - // ], - // expires_in: 86400, - // multiple: false - // }); - // const state = ImmutableMap({ poll: initialPoll }); - // const action = { - // type: actions.COMPOSE_POLL_OPTION_ADD, - // title: 'option 3', - // }; - // const updatedPoll = Object({ - // options: [ - // 'option 1', - // 'option 2', - // 'option 3', - // ], - // expires_in: 86400, - // multiple: false, - // }); - // expect(reducer(state, action).toJS()).toMatchObject({ - // poll: updatedPoll, - // }); - // }); - it('should handle COMPOSE_POLL_OPTION_CHANGE', () => { const initialPoll = Object({ options: [ @@ -747,32 +464,6 @@ describe('compose reducer', () => { }); }); - // it('should handle COMPOSE_POLL_OPTION_REMOVE', () => { - // const initialPoll = Object({ - // options: [ - // 'option 1', - // 'option 2', - // ], - // expires_in: 86400, - // multiple: false, - // }); - // const state = ImmutableMap({ poll: initialPoll }); - // const action = { - // type: actions.COMPOSE_POLL_OPTION_REMOVE, - // index: 1, - // }; - // const updatedPoll = Object({ - // options: [ - // 'option 1', - // ], - // expires_in: 86400, - // multiple: false, - // }); - // expect(reducer(state, action).toJS()).toMatchObject({ - // poll: updatedPoll, - // }); - // }); - it('sets the post content-type', () => { const action = { type: actions.COMPOSE_TYPE_CHANGE, diff --git a/app/soapbox/reducers/compose.js b/app/soapbox/reducers/compose.js index f4dc03985..43fd23154 100644 --- a/app/soapbox/reducers/compose.js +++ b/app/soapbox/reducers/compose.js @@ -1,6 +1,8 @@ import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; import { tagHistory } from 'soapbox/settings'; +import { PLEROMA } from 'soapbox/utils/features'; +import { hasIntegerMediaIds } from 'soapbox/utils/status'; import { COMPOSE_MOUNT, @@ -431,13 +433,17 @@ export default function compose(state = initialState, action) { map.set('to', action.explicitAddressing ? getExplicitMentions(action.status.get('account', 'id'), action.status) : undefined); map.set('in_reply_to', action.status.get('in_reply_to_id')); map.set('privacy', action.status.get('visibility')); - // TODO: Actually fix this rather than just removing it - if (action.redraftMedia) map.set('media_attachments', action.status.get('media_attachments')); map.set('focusDate', new Date()); map.set('caretPosition', null); map.set('idempotencyKey', uuid()); map.set('content_type', action.content_type || 'text/plain'); + if (action.v?.software === PLEROMA && hasIntegerMediaIds(action.status)) { + map.set('media_attachments', ImmutableList()); + } else { + map.set('media_attachments', action.status.get('media_attachments')); + } + if (action.status.get('spoiler_text').length > 0) { map.set('spoiler', true); map.set('spoiler_text', action.status.get('spoiler_text')); diff --git a/app/soapbox/utils/__tests__/numbers-test.js b/app/soapbox/utils/__tests__/numbers-test.js new file mode 100644 index 000000000..86923a781 --- /dev/null +++ b/app/soapbox/utils/__tests__/numbers-test.js @@ -0,0 +1,13 @@ +import { isIntegerId } from '../numbers'; + +test('isIntegerId()', () => { + expect(isIntegerId('0')).toBe(true); + expect(isIntegerId('1')).toBe(true); + expect(isIntegerId('508107650')).toBe(true); + expect(isIntegerId('-1764036199')).toBe(true); + expect(isIntegerId('106801667066418367')).toBe(true); + expect(isIntegerId('9v5bmRalQvjOy0ECcC')).toBe(false); + expect(isIntegerId(null)).toBe(false); + expect(isIntegerId(undefined)).toBe(false); + expect(isIntegerId()).toBe(false); +}); diff --git a/app/soapbox/utils/__tests__/status-test.js b/app/soapbox/utils/__tests__/status-test.js new file mode 100644 index 000000000..0dcb3e78a --- /dev/null +++ b/app/soapbox/utils/__tests__/status-test.js @@ -0,0 +1,12 @@ +import { fromJS } from 'immutable'; + +import { normalizeStatus } from 'soapbox/normalizers/status'; + +import { hasIntegerMediaIds } from '../status'; + +describe('hasIntegerMediaIds()', () => { + it('returns true for a Pleroma deleted status', () => { + const status = normalizeStatus(fromJS(require('soapbox/__fixtures__/pleroma-status-deleted.json'))); + expect(hasIntegerMediaIds(status)).toBe(true); + }); +}); diff --git a/app/soapbox/utils/features.js b/app/soapbox/utils/features.js index f745cd0e7..8f636eea0 100644 --- a/app/soapbox/utils/features.js +++ b/app/soapbox/utils/features.js @@ -110,7 +110,6 @@ export const getFeatures = createSelector([instance => instance], instance => { v.software === MASTODON && gte(v.compatVersion, '3.2.0'), v.software === PLEROMA && gte(v.version, '2.4.50'), ]), - redraftMedia: v.software === MASTODON, }, overrides); }); diff --git a/app/soapbox/utils/numbers.js b/app/soapbox/utils/numbers.js index 8191692b3..18f4d5019 100644 --- a/app/soapbox/utils/numbers.js +++ b/app/soapbox/utils/numbers.js @@ -12,3 +12,5 @@ export const shortNumberFormat = number => { return K; } }; + +export const isIntegerId = id => new RegExp(/^-?[0-9]+$/g).test(id); diff --git a/app/soapbox/utils/status.js b/app/soapbox/utils/status.js index 48554ced9..acd69dc5e 100644 --- a/app/soapbox/utils/status.js +++ b/app/soapbox/utils/status.js @@ -1,3 +1,5 @@ +import { isIntegerId } from 'soapbox/utils/numbers'; + export const getFirstExternalLink = status => { try { // Pulled from Pleroma's media parser @@ -13,3 +15,8 @@ export const getFirstExternalLink = status => { export const shouldHaveCard = status => { return Boolean(getFirstExternalLink(status)); }; + +// https://gitlab.com/soapbox-pub/soapbox-fe/-/merge_requests/1087 +export const hasIntegerMediaIds = status => { + return status.media_attachments.some(({ id }) => isIntegerId(id)); +}; From 6b8e79d8981e7673038592126b2234a1a56eb568 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 21:15:38 -0500 Subject: [PATCH 10/25] Export Record entities --- app/soapbox/normalizers/account.ts | 4 ++-- app/soapbox/normalizers/attachment.ts | 2 +- app/soapbox/normalizers/card.ts | 2 +- app/soapbox/normalizers/emoji.ts | 2 +- app/soapbox/normalizers/index.ts | 9 +++++++++ app/soapbox/normalizers/instance.ts | 2 +- app/soapbox/normalizers/mention.ts | 2 +- app/soapbox/normalizers/notification.ts | 2 +- app/soapbox/normalizers/poll.ts | 4 ++-- app/soapbox/normalizers/status.ts | 2 +- app/soapbox/reducers/index.js | 2 +- 11 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 app/soapbox/normalizers/index.ts diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index 98f895aa8..2a8a1748b 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -17,7 +17,7 @@ import { unescapeHTML } from 'soapbox/utils/html'; import { mergeDefined, makeEmojiMap } from 'soapbox/utils/normalizers'; // https://docs.joinmastodon.org/entities/account/ -const AccountRecord = ImmutableRecord({ +export const AccountRecord = ImmutableRecord({ acct: '', avatar: '', avatar_static: '', @@ -56,7 +56,7 @@ const AccountRecord = ImmutableRecord({ }); // https://docs.joinmastodon.org/entities/field/ -const FieldRecord = ImmutableRecord({ +export const FieldRecord = ImmutableRecord({ name: '', value: '', verified_at: null, diff --git a/app/soapbox/normalizers/attachment.ts b/app/soapbox/normalizers/attachment.ts index 9599fc1ce..f25f09581 100644 --- a/app/soapbox/normalizers/attachment.ts +++ b/app/soapbox/normalizers/attachment.ts @@ -11,7 +11,7 @@ import { import { mergeDefined } from 'soapbox/utils/normalizers'; // https://docs.joinmastodon.org/entities/attachment/ -const AttachmentRecord = ImmutableRecord({ +export const AttachmentRecord = ImmutableRecord({ blurhash: undefined, description: '', id: '', diff --git a/app/soapbox/normalizers/card.ts b/app/soapbox/normalizers/card.ts index c9ac76adb..0ae1f0b0f 100644 --- a/app/soapbox/normalizers/card.ts +++ b/app/soapbox/normalizers/card.ts @@ -6,7 +6,7 @@ import { Record as ImmutableRecord, Map as ImmutableMap } from 'immutable'; // https://docs.joinmastodon.org/entities/card/ -const CardRecord = ImmutableRecord({ +export const CardRecord = ImmutableRecord({ author_name: '', author_url: '', blurhash: null, diff --git a/app/soapbox/normalizers/emoji.ts b/app/soapbox/normalizers/emoji.ts index f450af253..133d294d1 100644 --- a/app/soapbox/normalizers/emoji.ts +++ b/app/soapbox/normalizers/emoji.ts @@ -6,7 +6,7 @@ import { Record as ImmutableRecord, Map as ImmutableMap } from 'immutable'; // https://docs.joinmastodon.org/entities/emoji/ -const EmojiRecord = ImmutableRecord({ +export const EmojiRecord = ImmutableRecord({ category: '', shortcode: '', static_url: '', diff --git a/app/soapbox/normalizers/index.ts b/app/soapbox/normalizers/index.ts new file mode 100644 index 000000000..c4a34d66c --- /dev/null +++ b/app/soapbox/normalizers/index.ts @@ -0,0 +1,9 @@ +export { AccountRecord, FieldRecord, normalizeAccount } from './account'; +export { AttachmentRecord, normalizeAttachment } from './attachment'; +export { CardRecord, normalizeCard } from './card'; +export { EmojiRecord, normalizeEmoji } from './emoji'; +export { InstanceRecord, normalizeInstance } from './instance'; +export { MentionRecord, normalizeMention } from './mention'; +export { NotificationRecord, normalizeNotification } from './notification'; +export { PollRecord, PollOptionRecord, normalizePoll } from './poll'; +export { StatusRecord, normalizeStatus } from './status'; diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts index 8e0fe02a6..aded8075d 100644 --- a/app/soapbox/normalizers/instance.ts +++ b/app/soapbox/normalizers/instance.ts @@ -15,7 +15,7 @@ import { isNumber } from 'soapbox/utils/numbers'; // Use Mastodon defaults // https://docs.joinmastodon.org/entities/instance/ -const InstanceRecord = ImmutableRecord({ +export const InstanceRecord = ImmutableRecord({ approval_required: false, contact_account: ImmutableMap(), configuration: ImmutableMap({ diff --git a/app/soapbox/normalizers/mention.ts b/app/soapbox/normalizers/mention.ts index 998202065..266f22dc6 100644 --- a/app/soapbox/normalizers/mention.ts +++ b/app/soapbox/normalizers/mention.ts @@ -11,7 +11,7 @@ import { import { normalizeAccount } from 'soapbox/normalizers/account'; // https://docs.joinmastodon.org/entities/mention/ -const MentionRecord = ImmutableRecord({ +export const MentionRecord = ImmutableRecord({ id: '', acct: '', username: '', diff --git a/app/soapbox/normalizers/notification.ts b/app/soapbox/normalizers/notification.ts index e0f466618..b05b50148 100644 --- a/app/soapbox/normalizers/notification.ts +++ b/app/soapbox/normalizers/notification.ts @@ -9,7 +9,7 @@ import { } from 'immutable'; // https://docs.joinmastodon.org/entities/notification/ -const NotificationRecord = ImmutableRecord({ +export const NotificationRecord = ImmutableRecord({ account: null, chat_message: null, // pleroma:chat_mention created_at: new Date(), diff --git a/app/soapbox/normalizers/poll.ts b/app/soapbox/normalizers/poll.ts index fa127702e..30fc7ff4e 100644 --- a/app/soapbox/normalizers/poll.ts +++ b/app/soapbox/normalizers/poll.ts @@ -15,7 +15,7 @@ import { normalizeEmoji } from 'soapbox/normalizers/emoji'; import { makeEmojiMap } from 'soapbox/utils/normalizers'; // https://docs.joinmastodon.org/entities/poll/ -const PollRecord = ImmutableRecord({ +export const PollRecord = ImmutableRecord({ emojis: ImmutableList(), expired: false, expires_at: new Date(), @@ -29,7 +29,7 @@ const PollRecord = ImmutableRecord({ }); // Sub-entity of Poll -const PollOptionRecord = ImmutableRecord({ +export const PollOptionRecord = ImmutableRecord({ title: '', votes_count: 0, diff --git a/app/soapbox/normalizers/status.ts b/app/soapbox/normalizers/status.ts index 2a1039f45..3257c112b 100644 --- a/app/soapbox/normalizers/status.ts +++ b/app/soapbox/normalizers/status.ts @@ -17,7 +17,7 @@ import { normalizePoll } from 'soapbox/normalizers/poll'; import { IStatus } from 'soapbox/types'; // https://docs.joinmastodon.org/entities/status/ -const StatusRecord = ImmutableRecord({ +export const StatusRecord = ImmutableRecord({ account: null, application: null, bookmarked: false, diff --git a/app/soapbox/reducers/index.js b/app/soapbox/reducers/index.js index 989a1fa1f..743a622d4 100644 --- a/app/soapbox/reducers/index.js +++ b/app/soapbox/reducers/index.js @@ -116,7 +116,7 @@ const reducers = { }; // Build a default state from all reducers: it has the key and `undefined` -const StateRecord = ImmutableRecord( +export const StateRecord = ImmutableRecord( Object.keys(reducers).reduce((params, reducer) => { params[reducer] = undefined; return params; From 8167b72762051c9a38553d8a4bcd435ab7891471 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 21:33:09 -0500 Subject: [PATCH 11/25] Call fromJS in all normalizers --- .../normalizers/__tests__/account-test.js | 38 +++++++++---------- .../normalizers/__tests__/attachment-test.js | 6 +-- .../normalizers/__tests__/card-test.js | 4 +- .../normalizers/__tests__/instance-test.js | 16 ++++---- .../normalizers/__tests__/mention-test.js | 6 +-- .../__tests__/notification-test.js | 4 +- .../normalizers/__tests__/poll-test.js | 8 ++-- .../normalizers/__tests__/status-test.js | 28 +++++++------- app/soapbox/normalizers/account.ts | 5 ++- app/soapbox/normalizers/attachment.ts | 13 +++++-- app/soapbox/normalizers/card.ts | 8 ++-- app/soapbox/normalizers/emoji.ts | 8 ++-- app/soapbox/normalizers/instance.ts | 11 +++--- app/soapbox/normalizers/mention.ts | 7 +--- app/soapbox/normalizers/notification.ts | 7 +++- app/soapbox/normalizers/poll.ts | 5 ++- app/soapbox/normalizers/status.ts | 5 ++- 17 files changed, 97 insertions(+), 82 deletions(-) diff --git a/app/soapbox/normalizers/__tests__/account-test.js b/app/soapbox/normalizers/__tests__/account-test.js index 9211a1cf8..538e2eb6b 100644 --- a/app/soapbox/normalizers/__tests__/account-test.js +++ b/app/soapbox/normalizers/__tests__/account-test.js @@ -6,7 +6,7 @@ const AVATAR_MISSING = require('images/avatar-missing.png'); describe('normalizeAccount()', () => { it('adds base fields', () => { - const account = fromJS({}); + const account = {}; const result = normalizeAccount(account); expect(ImmutableRecord.isRecord(result)).toBe(true); @@ -16,12 +16,12 @@ describe('normalizeAccount()', () => { }); it('normalizes a mention', () => { - const mention = fromJS({ + const mention = { acct: 'NEETzsche@iddqd.social', id: '9v5bw7hEGBPc9nrpzc', url: 'https://iddqd.social/users/NEETzsche', username: 'NEETzsche', - }); + }; const result = normalizeAccount(mention); expect(result.emojis).toEqual(fromJS([])); @@ -32,21 +32,21 @@ describe('normalizeAccount()', () => { }); it('normalizes Fedibird birthday', () => { - const account = fromJS(require('soapbox/__fixtures__/fedibird-account.json')); + const account = require('soapbox/__fixtures__/fedibird-account.json'); const result = normalizeAccount(account); expect(result.birthday).toEqual('1993-07-03'); }); it('normalizes Pleroma birthday', () => { - const account = fromJS(require('soapbox/__fixtures__/pleroma-account.json')); + const account = require('soapbox/__fixtures__/pleroma-account.json'); const result = normalizeAccount(account); expect(result.birthday).toEqual('1993-07-03'); }); it('normalizes Pleroma legacy fields', () => { - const account = fromJS(require('soapbox/__fixtures__/pleroma-2.2.2-account.json')); + const account = require('soapbox/__fixtures__/pleroma-2.2.2-account.json'); const result = normalizeAccount(account); expect(result.getIn(['pleroma', 'is_active'])).toBe(true); @@ -57,7 +57,7 @@ describe('normalizeAccount()', () => { }); it('prefers new Pleroma fields', () => { - const account = fromJS(require('soapbox/__fixtures__/pleroma-account.json')); + const account = require('soapbox/__fixtures__/pleroma-account.json'); const result = normalizeAccount(account); expect(result.getIn(['pleroma', 'is_active'])).toBe(true); @@ -66,76 +66,76 @@ describe('normalizeAccount()', () => { }); it('normalizes a verified Pleroma user', () => { - const account = fromJS(require('soapbox/__fixtures__/mk.json')); + const account = require('soapbox/__fixtures__/mk.json'); const result = normalizeAccount(account); expect(result.verified).toBe(true); }); it('normalizes an unverified Pleroma user', () => { - const account = fromJS(require('soapbox/__fixtures__/pleroma-account.json')); + const account = require('soapbox/__fixtures__/pleroma-account.json'); const result = normalizeAccount(account); expect(result.verified).toBe(false); }); it('normalizes a verified Truth Social user', () => { - const account = fromJS(require('soapbox/__fixtures__/realDonaldTrump.json')); + const account = require('soapbox/__fixtures__/realDonaldTrump.json'); const result = normalizeAccount(account); expect(result.verified).toBe(true); }); it('normalizes Fedibird location', () => { - const account = fromJS(require('soapbox/__fixtures__/fedibird-account.json')); + const account = require('soapbox/__fixtures__/fedibird-account.json'); const result = normalizeAccount(account); expect(result.location).toBe('Texas, USA'); }); it('normalizes Truth Social location', () => { - const account = fromJS(require('soapbox/__fixtures__/truthsocial-account.json')); + const account = require('soapbox/__fixtures__/truthsocial-account.json'); const result = normalizeAccount(account); expect(result.location).toBe('Texas'); }); it('sets display_name from username', () => { - const account = fromJS({ username: 'alex' }); + const account = { username: 'alex' }; const result = normalizeAccount(account); expect(result.display_name).toBe('alex'); }); it('sets display_name from acct', () => { - const account = fromJS({ acct: 'alex@gleasonator.com' }); + const account = { acct: 'alex@gleasonator.com' }; const result = normalizeAccount(account); expect(result.display_name).toBe('alex'); }); it('overrides a whitespace display_name', () => { - const account = fromJS({ username: 'alex', display_name: ' ' }); + const account = { username: 'alex', display_name: ' ' }; const result = normalizeAccount(account); expect(result.display_name).toBe('alex'); }); it('emojifies display name as `display_name_html`', () => { - const account = fromJS(require('soapbox/__fixtures__/account-with-emojis.json')); + const account = require('soapbox/__fixtures__/account-with-emojis.json'); const result = normalizeAccount(account); const expected = 'Alex Gleason 😂 :soapbox: :ablobcatrainbow:'; expect(result.display_name_html).toBe(expected); }); it('emojifies note as `note_emojified`', () => { - const account = fromJS(require('soapbox/__fixtures__/account-with-emojis.json')); + const account = require('soapbox/__fixtures__/account-with-emojis.json'); const result = normalizeAccount(account); const expected = 'I create Fediverse software that empowers people online. :soapbox:

I'm vegan btw

Note: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.'; expect(result.note_emojified).toBe(expected); }); it('unescapes HTML note as `note_plain`', () => { - const account = fromJS(require('soapbox/__fixtures__/account-with-emojis.json')); + const account = require('soapbox/__fixtures__/account-with-emojis.json'); const result = normalizeAccount(account); const expected = 'I create Fediverse software that empowers people online. :soapbox:\n\nI\'m vegan btw\n\nNote: If you have a question for me, please tag me publicly. This gives the opportunity for others to chime in, and bystanders to learn.'; expect(result.note_plain).toBe(expected); }); it('emojifies custom profile field', () => { - const account = fromJS(require('soapbox/__fixtures__/account-with-emojis.json')); + const account = require('soapbox/__fixtures__/account-with-emojis.json'); const result = normalizeAccount(account); const field = result.fields.get(1); diff --git a/app/soapbox/normalizers/__tests__/attachment-test.js b/app/soapbox/normalizers/__tests__/attachment-test.js index ecf3813e7..9647a55fa 100644 --- a/app/soapbox/normalizers/__tests__/attachment-test.js +++ b/app/soapbox/normalizers/__tests__/attachment-test.js @@ -1,10 +1,10 @@ -import { Record as ImmutableRecord, fromJS } from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizeAttachment } from '../attachment'; describe('normalizeAttachment()', () => { it('adds base fields', () => { - const attachment = fromJS({}); + const attachment = {}; const result = normalizeAttachment(attachment); expect(ImmutableRecord.isRecord(result)).toBe(true); @@ -13,7 +13,7 @@ describe('normalizeAttachment()', () => { }); it('infers preview_url from url', () => { - const attachment = fromJS({ url: 'https://site.fedi/123.png' }); + const attachment = { url: 'https://site.fedi/123.png' }; const result = normalizeAttachment(attachment); expect(result.preview_url).toEqual('https://site.fedi/123.png'); diff --git a/app/soapbox/normalizers/__tests__/card-test.js b/app/soapbox/normalizers/__tests__/card-test.js index e8ac120b0..fc8d06221 100644 --- a/app/soapbox/normalizers/__tests__/card-test.js +++ b/app/soapbox/normalizers/__tests__/card-test.js @@ -1,10 +1,10 @@ -import { Record as ImmutableRecord, fromJS } from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizeCard } from '../card'; describe('normalizeCard()', () => { it('adds base fields', () => { - const card = fromJS({}); + const card = {}; const result = normalizeCard(card); expect(ImmutableRecord.isRecord(result)).toBe(true); diff --git a/app/soapbox/normalizers/__tests__/instance-test.js b/app/soapbox/normalizers/__tests__/instance-test.js index 597fbbeee..2df36734f 100644 --- a/app/soapbox/normalizers/__tests__/instance-test.js +++ b/app/soapbox/normalizers/__tests__/instance-test.js @@ -59,7 +59,7 @@ describe('normalizeInstance()', () => { }); it('normalizes Pleroma instance with Mastodon configuration format', () => { - const instance = fromJS(require('soapbox/__fixtures__/pleroma-instance.json')); + const instance = require('soapbox/__fixtures__/pleroma-instance.json'); const expected = { configuration: { @@ -81,7 +81,7 @@ describe('normalizeInstance()', () => { }); it('normalizes Mastodon instance with retained configuration', () => { - const instance = fromJS(require('soapbox/__fixtures__/mastodon-instance.json')); + const instance = require('soapbox/__fixtures__/mastodon-instance.json'); const expected = { configuration: { @@ -111,7 +111,7 @@ describe('normalizeInstance()', () => { }); it('normalizes Mastodon 3.0.0 instance with default configuration', () => { - const instance = fromJS(require('soapbox/__fixtures__/mastodon-3.0.0-instance.json')); + const instance = require('soapbox/__fixtures__/mastodon-3.0.0-instance.json'); const expected = { configuration: { @@ -133,18 +133,18 @@ describe('normalizeInstance()', () => { }); it('normalizes Fedibird instance', () => { - const instance = fromJS(require('soapbox/__fixtures__/fedibird-instance.json')); + const instance = require('soapbox/__fixtures__/fedibird-instance.json'); const result = normalizeInstance(instance); // Sets description_limit expect(result.description_limit).toEqual(1500); // Preserves fedibird_capabilities - expect(result.fedibird_capabilities).toEqual(instance.get('fedibird_capabilities')); + expect(result.fedibird_capabilities).toEqual(fromJS(instance.fedibird_capabilities)); }); it('normalizes Mitra instance', () => { - const instance = fromJS(require('soapbox/__fixtures__/mitra-instance.json')); + const instance = require('soapbox/__fixtures__/mitra-instance.json'); const result = normalizeInstance(instance); // Adds configuration and description_limit @@ -153,7 +153,7 @@ describe('normalizeInstance()', () => { }); it('normalizes GoToSocial instance', () => { - const instance = fromJS(require('soapbox/__fixtures__/gotosocial-instance.json')); + const instance = require('soapbox/__fixtures__/gotosocial-instance.json'); const result = normalizeInstance(instance); // Normalizes max_toot_chars @@ -166,7 +166,7 @@ describe('normalizeInstance()', () => { }); it('normalizes Friendica instance', () => { - const instance = fromJS(require('soapbox/__fixtures__/friendica-instance.json')); + const instance = require('soapbox/__fixtures__/friendica-instance.json'); const result = normalizeInstance(instance); // Normalizes max_toot_chars diff --git a/app/soapbox/normalizers/__tests__/mention-test.js b/app/soapbox/normalizers/__tests__/mention-test.js index e429a03b1..03d712175 100644 --- a/app/soapbox/normalizers/__tests__/mention-test.js +++ b/app/soapbox/normalizers/__tests__/mention-test.js @@ -1,10 +1,10 @@ -import { Record as ImmutableRecord, fromJS } from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizeMention } from '../mention'; describe('normalizeMention()', () => { it('adds base fields', () => { - const account = fromJS({}); + const account = {}; const result = normalizeMention(account); expect(ImmutableRecord.isRecord(result)).toBe(true); @@ -15,7 +15,7 @@ describe('normalizeMention()', () => { }); it('infers username from acct', () => { - const account = fromJS({ acct: 'alex@gleasonator.com' }); + const account = { acct: 'alex@gleasonator.com' }; const result = normalizeMention(account); expect(result.username).toEqual('alex'); diff --git a/app/soapbox/normalizers/__tests__/notification-test.js b/app/soapbox/normalizers/__tests__/notification-test.js index c90b5451e..b72f0d9aa 100644 --- a/app/soapbox/normalizers/__tests__/notification-test.js +++ b/app/soapbox/normalizers/__tests__/notification-test.js @@ -1,10 +1,10 @@ -import { Record as ImmutableRecord, fromJS } from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizeNotification } from '../notification'; describe('normalizeNotification()', () => { it('normalizes an empty map', () => { - const notification = fromJS({}); + const notification = {}; const result = normalizeNotification(notification); expect(ImmutableRecord.isRecord(result)).toBe(true); diff --git a/app/soapbox/normalizers/__tests__/poll-test.js b/app/soapbox/normalizers/__tests__/poll-test.js index 4cc9dbbbc..31691f484 100644 --- a/app/soapbox/normalizers/__tests__/poll-test.js +++ b/app/soapbox/normalizers/__tests__/poll-test.js @@ -1,10 +1,10 @@ -import { Record as ImmutableRecord, fromJS } from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizePoll } from '../poll'; describe('normalizePoll()', () => { it('adds base fields', () => { - const poll = fromJS({ options: [{ title: 'Apples' }] }); + const poll = { options: [{ title: 'Apples' }] }; const result = normalizePoll(poll); const expected = { @@ -25,7 +25,7 @@ describe('normalizePoll()', () => { }); it('normalizes a Pleroma logged-out poll', () => { - const poll = fromJS(require('soapbox/__fixtures__/pleroma-status-with-poll.json')).get('poll'); + const { poll } = require('soapbox/__fixtures__/pleroma-status-with-poll.json'); const result = normalizePoll(poll); // Adds logged-in fields @@ -34,7 +34,7 @@ describe('normalizePoll()', () => { }); it('normalizes poll with emojis', () => { - const poll = fromJS(require('soapbox/__fixtures__/pleroma-status-with-poll-with-emojis.json')).get('poll'); + const { poll } = require('soapbox/__fixtures__/pleroma-status-with-poll-with-emojis.json'); const result = normalizePoll(poll); // Emojifies poll options diff --git a/app/soapbox/normalizers/__tests__/status-test.js b/app/soapbox/normalizers/__tests__/status-test.js index 2824615cc..ebfcb3eee 100644 --- a/app/soapbox/normalizers/__tests__/status-test.js +++ b/app/soapbox/normalizers/__tests__/status-test.js @@ -4,7 +4,7 @@ import { normalizeStatus } from '../status'; describe('normalizeStatus()', () => { it('adds base fields', () => { - const status = fromJS({}); + const status = {}; const result = normalizeStatus(status); expect(ImmutableRecord.isRecord(result)).toBe(true); @@ -17,7 +17,7 @@ describe('normalizeStatus()', () => { }); it('fixes the order of mentions', () => { - const status = fromJS(require('soapbox/__fixtures__/status-unordered-mentions.json')); + const status = require('soapbox/__fixtures__/status-unordered-mentions.json'); const expected = ['NEETzsche', 'alex', 'Lumeinshin', 'sneeden']; @@ -30,7 +30,7 @@ describe('normalizeStatus()', () => { }); it('adds mention to self in self-reply on Mastodon', () => { - const status = fromJS(require('soapbox/__fixtures__/mastodon-reply-to-self.json')); + const status = require('soapbox/__fixtures__/mastodon-reply-to-self.json'); const expected = { id: '106801667066418367', @@ -48,7 +48,7 @@ describe('normalizeStatus()', () => { }); it('normalizes mentions with only acct', () => { - const status = fromJS({ mentions: [{ acct: 'alex@gleasonator.com' }] }); + const status = { mentions: [{ acct: 'alex@gleasonator.com' }] }; const expected = [{ id: '', @@ -63,7 +63,7 @@ describe('normalizeStatus()', () => { }); it('normalizes Mitra attachments', () => { - const status = fromJS(require('soapbox/__fixtures__/mitra-status-with-attachments.json')); + const status = require('soapbox/__fixtures__/mitra-status-with-attachments.json'); const expected = [{ id: '017eeb0e-e5df-30a4-77a7-a929145cb836', @@ -97,7 +97,7 @@ describe('normalizeStatus()', () => { }); it('leaves Pleroma attachments alone', () => { - const status = fromJS(require('soapbox/__fixtures__/pleroma-status-with-attachments.json')); + const status = require('soapbox/__fixtures__/pleroma-status-with-attachments.json'); const result = normalizeStatus(status).media_attachments; expect(result.size).toBe(4); @@ -108,15 +108,15 @@ describe('normalizeStatus()', () => { }); it('normalizes Pleroma quote post', () => { - const status = fromJS(require('soapbox/__fixtures__/pleroma-quote-post.json')); + const status = require('soapbox/__fixtures__/pleroma-quote-post.json'); const result = normalizeStatus(status); - expect(result.quote).toEqual(status.getIn(['pleroma', 'quote'])); + expect(result.quote).toEqual(fromJS(status.pleroma.quote)); expect(result.pleroma.get('quote')).toBe(undefined); }); it('normalizes GoToSocial status', () => { - const status = fromJS(require('soapbox/__fixtures__/gotosocial-status.json')); + const status = require('soapbox/__fixtures__/gotosocial-status.json'); const result = normalizeStatus(status); // Adds missing fields @@ -132,7 +132,7 @@ describe('normalizeStatus()', () => { }); it('normalizes Friendica status', () => { - const status = fromJS(require('soapbox/__fixtures__/friendica-status.json')); + const status = require('soapbox/__fixtures__/friendica-status.json'); const result = normalizeStatus(status); // Adds missing fields @@ -145,7 +145,7 @@ describe('normalizeStatus()', () => { }); it('normalizes poll and poll options', () => { - const status = fromJS({ poll: { options: [{ title: 'Apples' }] } }); + const status = { poll: { options: [{ title: 'Apples' }] } }; const result = normalizeStatus(status); const expected = { @@ -166,7 +166,7 @@ describe('normalizeStatus()', () => { }); it('normalizes a Pleroma logged-out poll', () => { - const status = fromJS(require('soapbox/__fixtures__/pleroma-status-with-poll.json')); + const status = require('soapbox/__fixtures__/pleroma-status-with-poll.json'); const result = normalizeStatus(status); // Adds logged-in fields @@ -175,7 +175,7 @@ describe('normalizeStatus()', () => { }); it('normalizes poll with emojis', () => { - const status = fromJS(require('soapbox/__fixtures__/pleroma-status-with-poll-with-emojis.json')); + const status = require('soapbox/__fixtures__/pleroma-status-with-poll-with-emojis.json'); const result = normalizeStatus(status); // Emojifies poll options @@ -188,7 +188,7 @@ describe('normalizeStatus()', () => { }); it('normalizes a card', () => { - const status = fromJS(require('soapbox/__fixtures__/status-with-card.json')); + const status = require('soapbox/__fixtures__/status-with-card.json'); const result = normalizeStatus(status); expect(ImmutableRecord.isRecord(result.card)).toBe(true); diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index 2a8a1748b..feb443f59 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -8,6 +8,7 @@ import { Map as ImmutableMap, List as ImmutableList, Record as ImmutableRecord, + fromJS, } from 'immutable'; import emojify from 'soapbox/features/emoji/emoji'; @@ -181,9 +182,9 @@ const addInternalFields = (account: ImmutableMap) => { }); }; -export const normalizeAccount = (account: ImmutableMap): IAccount => { +export const normalizeAccount = (account: Record): IAccount => { return AccountRecord( - account.withMutations(account => { + ImmutableMap(fromJS(account)).withMutations(account => { normalizePleromaLegacyFields(account); normalizeEmojis(account); normalizeAvatar(account); diff --git a/app/soapbox/normalizers/attachment.ts b/app/soapbox/normalizers/attachment.ts index f25f09581..adb596dd0 100644 --- a/app/soapbox/normalizers/attachment.ts +++ b/app/soapbox/normalizers/attachment.ts @@ -6,6 +6,7 @@ import { Map as ImmutableMap, Record as ImmutableRecord, + fromJS, } from 'immutable'; import { mergeDefined } from 'soapbox/utils/normalizers'; @@ -28,8 +29,7 @@ export const AttachmentRecord = ImmutableRecord({ status: null, }); -// Ensure attachments have required fields -export const normalizeAttachment = (attachment: ImmutableMap) => { +const normalizeUrls = (attachment: ImmutableMap) => { const url = [ attachment.get('url'), attachment.get('preview_url'), @@ -41,5 +41,12 @@ export const normalizeAttachment = (attachment: ImmutableMap) => { preview_url: url, }); - return AttachmentRecord(attachment.mergeWith(mergeDefined, base)); + return attachment.mergeWith(mergeDefined, base); +}; + +// Ensure attachments have required fields +export const normalizeAttachment = (attachment: Record) => { + return AttachmentRecord( + normalizeUrls(ImmutableMap(fromJS(attachment))), + ); }; diff --git a/app/soapbox/normalizers/card.ts b/app/soapbox/normalizers/card.ts index 0ae1f0b0f..169492647 100644 --- a/app/soapbox/normalizers/card.ts +++ b/app/soapbox/normalizers/card.ts @@ -3,7 +3,7 @@ * Converts API cards into our internal format. * @see {@link https://docs.joinmastodon.org/entities/card/} */ -import { Record as ImmutableRecord, Map as ImmutableMap } from 'immutable'; +import { Record as ImmutableRecord, Map as ImmutableMap, fromJS } from 'immutable'; // https://docs.joinmastodon.org/entities/card/ export const CardRecord = ImmutableRecord({ @@ -23,6 +23,8 @@ export const CardRecord = ImmutableRecord({ width: 0, }); -export const normalizeCard = (card: ImmutableMap) => { - return CardRecord(card); +export const normalizeCard = (card: Record) => { + return CardRecord( + ImmutableMap(fromJS(card)), + ); }; diff --git a/app/soapbox/normalizers/emoji.ts b/app/soapbox/normalizers/emoji.ts index 133d294d1..8d973b175 100644 --- a/app/soapbox/normalizers/emoji.ts +++ b/app/soapbox/normalizers/emoji.ts @@ -3,7 +3,7 @@ * Converts API emojis into our internal format. * @see {@link https://docs.joinmastodon.org/entities/emoji/} */ -import { Record as ImmutableRecord, Map as ImmutableMap } from 'immutable'; +import { Record as ImmutableRecord, Map as ImmutableMap, fromJS } from 'immutable'; // https://docs.joinmastodon.org/entities/emoji/ export const EmojiRecord = ImmutableRecord({ @@ -14,6 +14,8 @@ export const EmojiRecord = ImmutableRecord({ visible_in_picker: true, }); -export const normalizeEmoji = (emoji: ImmutableMap) => { - return EmojiRecord(emoji); +export const normalizeEmoji = (emoji: Record) => { + return EmojiRecord( + ImmutableMap(fromJS(emoji)), + ); }; diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts index aded8075d..6e2c0b4f9 100644 --- a/app/soapbox/normalizers/instance.ts +++ b/app/soapbox/normalizers/instance.ts @@ -7,6 +7,7 @@ import { Map as ImmutableMap, List as ImmutableList, Record as ImmutableRecord, + fromJS, } from 'immutable'; import { parseVersion, PLEROMA } from 'soapbox/utils/features'; @@ -84,12 +85,12 @@ const pleromaToMastodonConfig = (instance: ImmutableMap) => { const getAttachmentLimit = (software: string) => software === PLEROMA ? Infinity : 4; // Normalize instance (Pleroma, Mastodon, etc.) to Mastodon's format -export const normalizeInstance = (instance: ImmutableMap) => { - const { software } = parseVersion(instance.get('version')); - const mastodonConfig = pleromaToMastodonConfig(instance); - +export const normalizeInstance = (instance: Record) => { return InstanceRecord( - instance.withMutations(instance => { + ImmutableMap(fromJS(instance)).withMutations((instance: ImmutableMap) => { + const { software } = parseVersion(instance.get('version')); + const mastodonConfig = pleromaToMastodonConfig(instance); + // Merge configuration instance.update('configuration', ImmutableMap(), configuration => ( configuration.mergeDeepWith(mergeDefined, mastodonConfig) diff --git a/app/soapbox/normalizers/mention.ts b/app/soapbox/normalizers/mention.ts index 266f22dc6..5ff35ce16 100644 --- a/app/soapbox/normalizers/mention.ts +++ b/app/soapbox/normalizers/mention.ts @@ -3,10 +3,7 @@ * Converts API mentions into our internal format. * @see {@link https://docs.joinmastodon.org/entities/mention/} */ -import { - Map as ImmutableMap, - Record as ImmutableRecord, -} from 'immutable'; +import { Record as ImmutableRecord } from 'immutable'; import { normalizeAccount } from 'soapbox/normalizers/account'; @@ -18,7 +15,7 @@ export const MentionRecord = ImmutableRecord({ url: '', }); -export const normalizeMention = (mention: ImmutableMap) => { +export const normalizeMention = (mention: Record) => { // Simply normalize it as an account then cast it as a mention ¯\_(ツ)_/¯ return MentionRecord(normalizeAccount(mention)); }; diff --git a/app/soapbox/normalizers/notification.ts b/app/soapbox/normalizers/notification.ts index b05b50148..defd51215 100644 --- a/app/soapbox/normalizers/notification.ts +++ b/app/soapbox/normalizers/notification.ts @@ -6,6 +6,7 @@ import { Map as ImmutableMap, Record as ImmutableRecord, + fromJS, } from 'immutable'; // https://docs.joinmastodon.org/entities/notification/ @@ -20,6 +21,8 @@ export const NotificationRecord = ImmutableRecord({ type: '', }); -export const normalizeNotification = (notification: ImmutableMap) => { - return NotificationRecord(notification); +export const normalizeNotification = (notification: Record) => { + return NotificationRecord( + ImmutableMap(fromJS(notification)), + ); }; diff --git a/app/soapbox/normalizers/poll.ts b/app/soapbox/normalizers/poll.ts index 30fc7ff4e..592f9aa65 100644 --- a/app/soapbox/normalizers/poll.ts +++ b/app/soapbox/normalizers/poll.ts @@ -8,6 +8,7 @@ import { Map as ImmutableMap, List as ImmutableList, Record as ImmutableRecord, + fromJS, } from 'immutable'; import emojify from 'soapbox/features/emoji/emoji'; @@ -76,9 +77,9 @@ const normalizePollVoted = (poll: ImmutableMap) => { }); }; -export const normalizePoll = (poll: ImmutableMap) => { +export const normalizePoll = (poll: Record) => { return PollRecord( - poll.withMutations((poll: ImmutableMap) => { + ImmutableMap(fromJS(poll)).withMutations((poll: ImmutableMap) => { normalizeEmojis(poll); normalizePollOptions(poll); normalizePollOwnVotes(poll); diff --git a/app/soapbox/normalizers/status.ts b/app/soapbox/normalizers/status.ts index 3257c112b..8db44ba39 100644 --- a/app/soapbox/normalizers/status.ts +++ b/app/soapbox/normalizers/status.ts @@ -7,6 +7,7 @@ import { Map as ImmutableMap, List as ImmutableList, Record as ImmutableRecord, + fromJS, } from 'immutable'; import { normalizeAttachment } from 'soapbox/normalizers/attachment'; @@ -135,9 +136,9 @@ const fixQuote = (status: ImmutableMap) => { }); }; -export const normalizeStatus = (status: ImmutableMap): IStatus => { +export const normalizeStatus = (status: Record): IStatus => { return StatusRecord( - status.withMutations(status => { + ImmutableMap(fromJS(status)).withMutations(status => { normalizeAttachments(status); normalizeMentions(status); normalizeEmojis(status); From f1a286f5e0fd2c121df688829fd1ce89d3ddc5dd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 21:52:20 -0500 Subject: [PATCH 12/25] Don't call fromJS in some reducers --- app/soapbox/reducers/accounts.js | 6 +++--- app/soapbox/reducers/polls.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/soapbox/reducers/accounts.js b/app/soapbox/reducers/accounts.js index c601ed928..de7926feb 100644 --- a/app/soapbox/reducers/accounts.js +++ b/app/soapbox/reducers/accounts.js @@ -46,7 +46,7 @@ const minifyAccount = account => { }; const fixAccount = (state, account) => { - const normalized = minifyAccount(normalizeAccount(fromJS(account))); + const normalized = minifyAccount(normalizeAccount(account)); return state.set(account.id, normalized); }; @@ -119,7 +119,7 @@ const removePermission = (state, accountIds, permissionGroup) => { }); }; -const buildAccount = adminUser => normalizeAccount(fromJS({ +const buildAccount = adminUser => normalizeAccount({ id: adminUser.get('id'), username: adminUser.get('nickname').split('@')[0], acct: adminUser.get('nickname'), @@ -142,7 +142,7 @@ const buildAccount = adminUser => normalizeAccount(fromJS({ }, }, should_refetch: true, -})); +}); const mergeAdminUser = (account, adminUser) => { return account.withMutations(account => { diff --git a/app/soapbox/reducers/polls.js b/app/soapbox/reducers/polls.js index f1a06fdc1..f9f220edc 100644 --- a/app/soapbox/reducers/polls.js +++ b/app/soapbox/reducers/polls.js @@ -1,4 +1,4 @@ -import { Map as ImmutableMap, fromJS } from 'immutable'; +import { Map as ImmutableMap } from 'immutable'; import { POLLS_IMPORT } from 'soapbox/actions/importer'; import { normalizeStatus } from 'soapbox/normalizers/status'; @@ -6,7 +6,7 @@ import { normalizeStatus } from 'soapbox/normalizers/status'; // HOTFIX: Convert the poll into a fake status to normalize it... // TODO: get rid of POLLS_IMPORT and use STATUS_IMPORT here. const normalizePoll = poll => { - const status = fromJS({ poll }); + const status = { poll }; return normalizeStatus(status).poll; }; From b0623597eab2fba0ed670541f7048f03c900b9ed Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 21:58:30 -0500 Subject: [PATCH 13/25] Fix comment --- app/soapbox/normalizers/attachment.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/soapbox/normalizers/attachment.ts b/app/soapbox/normalizers/attachment.ts index adb596dd0..26e616696 100644 --- a/app/soapbox/normalizers/attachment.ts +++ b/app/soapbox/normalizers/attachment.ts @@ -29,6 +29,7 @@ export const AttachmentRecord = ImmutableRecord({ status: null, }); +// Ensure attachments have required fields const normalizeUrls = (attachment: ImmutableMap) => { const url = [ attachment.get('url'), @@ -44,7 +45,6 @@ const normalizeUrls = (attachment: ImmutableMap) => { return attachment.mergeWith(mergeDefined, base); }; -// Ensure attachments have required fields export const normalizeAttachment = (attachment: Record) => { return AttachmentRecord( normalizeUrls(ImmutableMap(fromJS(attachment))), From c75965c2b4980ef4e3cf04f12888c86b6b4d8bf1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 22:06:51 -0500 Subject: [PATCH 14/25] Update browserlist --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c138975d8..41ddd3384 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2909,9 +2909,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001252, caniuse-lite@^1.0.30001254: - version "1.0.30001257" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz#150aaf649a48bee531104cfeda57f92ce587f6e5" - integrity sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== + version "1.0.30001317" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz" + integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ== catharsis@^0.9.0: version "0.9.0" From 58466ce79cff52a065484628de2a04113371bcf1 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 22:41:25 -0500 Subject: [PATCH 15/25] Normalize Mastodon RC version --- .../__fixtures__/mastodon-instance-rc.json | 123 ++++++++++++++++++ .../normalizers/__tests__/instance-test.js | 7 + app/soapbox/normalizers/instance.ts | 15 +++ 3 files changed, 145 insertions(+) create mode 100644 app/soapbox/__fixtures__/mastodon-instance-rc.json diff --git a/app/soapbox/__fixtures__/mastodon-instance-rc.json b/app/soapbox/__fixtures__/mastodon-instance-rc.json new file mode 100644 index 000000000..277839d14 --- /dev/null +++ b/app/soapbox/__fixtures__/mastodon-instance-rc.json @@ -0,0 +1,123 @@ +{ + "uri": "mastodon.social", + "title": "Mastodon", + "short_description": "Server run by the main developers of the project \"🐘\" It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!", + "description": "Server run by the main developers of the project \"🐘\" It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!", + "email": "staff@mastodon.social", + "version": "3.5.0rc1", + "urls": { + "streaming_api": "wss://mastodon.social" + }, + "stats": { + "user_count": 635078, + "status_count": 34700866, + "domain_count": 21989 + }, + "thumbnail": "https://files.mastodon.social/site_uploads/files/000/000/001/original/vlcsnap-2018-08-27-16h43m11s127.png", + "languages": [ + "en" + ], + "registrations": true, + "approval_required": false, + "invites_enabled": true, + "configuration": { + "statuses": { + "max_characters": 500, + "max_media_attachments": 4, + "characters_reserved_per_url": 23 + }, + "media_attachments": { + "supported_mime_types": [ + "image/jpeg", + "image/png", + "image/gif", + "video/webm", + "video/mp4", + "video/quicktime", + "video/ogg", + "audio/wave", + "audio/wav", + "audio/x-wav", + "audio/x-pn-wave", + "audio/ogg", + "audio/vorbis", + "audio/mpeg", + "audio/mp3", + "audio/webm", + "audio/flac", + "audio/aac", + "audio/m4a", + "audio/x-m4a", + "audio/mp4", + "audio/3gpp", + "video/x-ms-asf" + ], + "image_size_limit": 10485760, + "image_matrix_limit": 16777216, + "video_size_limit": 41943040, + "video_frame_rate_limit": 60, + "video_matrix_limit": 2304000 + }, + "polls": { + "max_options": 4, + "max_characters_per_option": 50, + "min_expiration": 300, + "max_expiration": 2629746 + } + }, + "contact_account": { + "id": "1", + "username": "Gargron", + "acct": "Gargron", + "display_name": "Eugen", + "locked": false, + "bot": false, + "discoverable": true, + "group": false, + "created_at": "2016-03-16T00:00:00.000Z", + "note": "

Founder, CEO and lead developer @Mastodon, Germany.

", + "url": "https://mastodon.social/@Gargron", + "avatar": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png", + "avatar_static": "https://files.mastodon.social/accounts/avatars/000/000/001/original/ccb05a778962e171.png", + "header": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg", + "header_static": "https://files.mastodon.social/accounts/headers/000/000/001/original/3b91c9965d00888b.jpeg", + "followers_count": 99760, + "following_count": 274, + "statuses_count": 71657, + "last_status_at": "2022-03-17", + "emojis": [], + "fields": [ + { + "name": "Patreon", + "value": "https://www.patreon.com/mastodon", + "verified_at": null + } + ] + }, + "rules": [ + { + "id": "1", + "text": "Sexually explicit or violent media must be marked as sensitive when posting" + }, + { + "id": "2", + "text": "No racism, sexism, homophobia, transphobia, xenophobia, or casteism" + }, + { + "id": "3", + "text": "No incitement of violence or promotion of violent ideologies" + }, + { + "id": "4", + "text": "No harassment, dogpiling or doxxing of other users" + }, + { + "id": "5", + "text": "No content illegal in Germany" + }, + { + "id": "7", + "text": "Do not share intentionally false or misleading information" + } + ] +} diff --git a/app/soapbox/normalizers/__tests__/instance-test.js b/app/soapbox/normalizers/__tests__/instance-test.js index 2df36734f..f5fd4f6af 100644 --- a/app/soapbox/normalizers/__tests__/instance-test.js +++ b/app/soapbox/normalizers/__tests__/instance-test.js @@ -177,4 +177,11 @@ describe('normalizeInstance()', () => { expect(result.get('configuration') instanceof ImmutableMap).toBe(true); expect(result.get('description_limit')).toBe(1500); }); + + it('normalizes a Mastodon RC version', () => { + const instance = require('soapbox/__fixtures__/mastodon-instance-rc.json'); + const result = normalizeInstance(instance); + + expect(result.version).toEqual('3.5.0-rc1'); + }); }); diff --git a/app/soapbox/normalizers/instance.ts b/app/soapbox/normalizers/instance.ts index 6e2c0b4f9..a33601bf9 100644 --- a/app/soapbox/normalizers/instance.ts +++ b/app/soapbox/normalizers/instance.ts @@ -84,6 +84,18 @@ const pleromaToMastodonConfig = (instance: ImmutableMap) => { // Get the software's default attachment limit const getAttachmentLimit = (software: string) => software === PLEROMA ? Infinity : 4; +// Normalize version +const normalizeVersion = (instance: ImmutableMap) => { + return instance.update('version', '0.0.0', version => { + // Handle Mastodon release candidates + if (new RegExp(/[0-9\.]+rc[0-9]+/g).test(version)) { + return version.split('rc').join('-rc'); + } else { + return version; + } + }); +}; + // Normalize instance (Pleroma, Mastodon, etc.) to Mastodon's format export const normalizeInstance = (instance: Record) => { return InstanceRecord( @@ -101,6 +113,9 @@ export const normalizeInstance = (instance: Record) => { return isNumber(value) ? value : getAttachmentLimit(software); }); + // Normalize version + normalizeVersion(instance); + // Merge defaults instance.mergeDeepWith(mergeDefined, InstanceRecord()); }), From 9c0a3049260d1579572a1d483a3f2752c40c3618 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 16 Mar 2022 22:44:30 -0500 Subject: [PATCH 16/25] External auth: normalize instance --- app/soapbox/actions/external_auth.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/soapbox/actions/external_auth.js b/app/soapbox/actions/external_auth.js index f4058cba2..8bf0bba3f 100644 --- a/app/soapbox/actions/external_auth.js +++ b/app/soapbox/actions/external_auth.js @@ -6,11 +6,10 @@ * @see module:soapbox/actions/oauth */ -import { Map as ImmutableMap, fromJS } from 'immutable'; - import { createApp } from 'soapbox/actions/apps'; import { authLoggedIn, verifyCredentials, switchAccount } from 'soapbox/actions/auth'; import { obtainOAuthToken } from 'soapbox/actions/oauth'; +import { normalizeInstance } from 'soapbox/normalizers'; import { parseBaseURL } from 'soapbox/utils/auth'; import sourceCode from 'soapbox/utils/code'; import { getWalletAndSign } from 'soapbox/utils/ethereum'; @@ -22,12 +21,12 @@ import { baseClient } from '../api'; const fetchExternalInstance = baseURL => { return baseClient(null, baseURL) .get('/api/v1/instance') - .then(({ data: instance }) => fromJS(instance)) + .then(({ data: instance }) => normalizeInstance(instance)) .catch(error => { if (error.response?.status === 401) { // Authenticated fetch is enabled. // Continue with a limited featureset. - return ImmutableMap({ version: '0.0.0' }); + return normalizeInstance({}); } else { throw error; } From cf215a6b587d7697a745f0245ca9cfec62c1e1ea Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 17 Mar 2022 14:45:40 -0500 Subject: [PATCH 17/25] Update README --- README.md | 8 ++++++-- soapbox-screenshot.png | Bin 119085 -> 163482 bytes 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a3a4e8ddc..6068126d3 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,14 @@ ![Soapbox FE Screenshot](soapbox-screenshot.png) -**Soapbox FE** is a frontend for Pleroma with a focus on custom branding and ease of use. +**Soapbox FE** is a frontend for Mastodon and Pleroma with a focus on custom branding and ease of use. It's part of the [Soapbox](https://soapbox.pub) project. -# :rocket: Deploy on Pleroma +## Try it out + +Visit https://fe.soapbox.pub/ and point it to your favorite instance. + +## :rocket: Deploy on Pleroma Installing Soapbox FE on an existing Pleroma server is extremely easy. Just ssh into the server and download a .zip of the latest build: diff --git a/soapbox-screenshot.png b/soapbox-screenshot.png index 4b3f82cbfc88cd09ffab67b95649e8d66cc76750..19c19e2c4b94f09fc5da8fa9328906210421e1af 100644 GIT binary patch literal 163482 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

FW;|gscX>{sVF&vjdCvLVt71j%Gy_$Ak=R! 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 z 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 SCzZ-;AYGoWelF{r5}E+O=_LLD From 7c6c373eb2cdfcde43f17b2c9928b8e18474432a Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 17 Mar 2022 14:49:42 -0500 Subject: [PATCH 18/25] Support account `website` field --- app/soapbox/normalizers/__tests__/account-test.js | 6 ++++++ app/soapbox/normalizers/account.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/app/soapbox/normalizers/__tests__/account-test.js b/app/soapbox/normalizers/__tests__/account-test.js index 538e2eb6b..c52f86bd2 100644 --- a/app/soapbox/normalizers/__tests__/account-test.js +++ b/app/soapbox/normalizers/__tests__/account-test.js @@ -95,6 +95,12 @@ describe('normalizeAccount()', () => { expect(result.location).toBe('Texas'); }); + it('normalizes Truth Social website', () => { + const account = require('soapbox/__fixtures__/truthsocial-account.json'); + const result = normalizeAccount(account); + expect(result.website).toBe('https://soapbox.pub'); + }); + it('sets display_name from username', () => { const account = { username: 'alex' }; const result = normalizeAccount(account); diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index feb443f59..f85bcb924 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -45,6 +45,7 @@ export const AccountRecord = ImmutableRecord({ uri: '', url: '', username: '', + website: '', verified: false, // Internal fields From 19e87511783e9e29f9d0d061c109e99f0d958a74 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 17 Mar 2022 15:21:55 -0500 Subject: [PATCH 19/25] Change default avatar, add default header --- app/images/avatar-missing.png | Bin 14800 -> 4138 bytes app/images/avatar-missing.svg | 132 +++--------------- app/images/header-missing.png | Bin 0 -> 81 bytes .../normalizers/__tests__/account-test.js | 12 ++ app/soapbox/normalizers/account.ts | 13 ++ 5 files changed, 48 insertions(+), 109 deletions(-) create mode 100644 app/images/header-missing.png diff --git a/app/images/avatar-missing.png b/app/images/avatar-missing.png index b3e6b5709c611c8b26d18d3c55bac315ae46b176..6de33a5a49ef140a54261b3bac8e20c0199e9f35 100644 GIT binary patch literal 4138 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 GG5-Vg%>KOq literal 14800 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 aV(i#=ulV2_$bplZAXzCT$!ZB`(0>E8Zt?m6 diff --git a/app/images/avatar-missing.svg b/app/images/avatar-missing.svg index 7eb156089..d5833c90c 100644 --- a/app/images/avatar-missing.svg +++ b/app/images/avatar-missing.svg @@ -1,116 +1,30 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - + xmlns:dc="http://purl.org/dc/elements/1.1/">image/svg+xml diff --git a/app/images/header-missing.png b/app/images/header-missing.png new file mode 100644 index 0000000000000000000000000000000000000000..26b59e75a08de1c5d3d7b0705e9fc19d317dc4cb GIT binary patch literal 81 zcmeAS@N?(olHy`uVBq!ia0vp^j35jm7|ip2ssJgbk|4ie28Oc9XDxs{E>9Q75RU7~ Y2_P8;#z%^KjDai$Pgg&ebxsLQ04O{U&j0`b literal 0 HcmV?d00001 diff --git a/app/soapbox/normalizers/__tests__/account-test.js b/app/soapbox/normalizers/__tests__/account-test.js index c52f86bd2..cbe45419f 100644 --- a/app/soapbox/normalizers/__tests__/account-test.js +++ b/app/soapbox/normalizers/__tests__/account-test.js @@ -3,6 +3,7 @@ import { Record as ImmutableRecord, fromJS } from 'immutable'; import { normalizeAccount } from '../account'; const AVATAR_MISSING = require('images/avatar-missing.png'); +const HEADER_MISSING = require('images/header-missing.png'); describe('normalizeAccount()', () => { it('adds base fields', () => { @@ -13,6 +14,7 @@ describe('normalizeAccount()', () => { expect(result.acct).toEqual(''); expect(result.note).toEqual(''); expect(result.avatar).toEqual(AVATAR_MISSING); + expect(result.header_static).toEqual(HEADER_MISSING); }); it('normalizes a mention', () => { @@ -149,4 +151,14 @@ describe('normalizeAccount()', () => { expect(field.value_emojified).toBe('https://soapbox.pub :soapbox:'); expect(field.value_plain).toBe('https://soapbox.pub :soapbox:'); }); + + it('adds default avatar and banner to GoToSocial account', () => { + const account = require('soapbox/__fixtures__/gotosocial-account.json'); + const result = normalizeAccount(account); + + expect(result.avatar).toEqual(AVATAR_MISSING); + expect(result.avatar_static).toEqual(AVATAR_MISSING); + expect(result.header).toEqual(HEADER_MISSING); + expect(result.header_static).toEqual(HEADER_MISSING); + }); }); diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index f85bcb924..a96c9ad2d 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -97,6 +97,18 @@ const normalizeAvatar = (account: ImmutableMap) => { }); }; +// Add header, if missing +const normalizeHeader = (account: ImmutableMap) => { + const header = account.get('header'); + const headerStatic = account.get('header_static'); + const missing = require('images/header-missing.png'); + + return account.withMutations(account => { + account.set('header', header || headerStatic || missing); + account.set('header_static', headerStatic || header || missing); + }); +}; + // Normalize custom fields const normalizeFields = (account: ImmutableMap) => { return account.update('fields', ImmutableList(), fields => fields.map(FieldRecord)); @@ -189,6 +201,7 @@ export const normalizeAccount = (account: Record): IAccount => { normalizePleromaLegacyFields(account); normalizeEmojis(account); normalizeAvatar(account); + normalizeHeader(account); normalizeFields(account); normalizeVerified(account); normalizeBirthday(account); From da07c9355a12ac23ca7704c4d383770c4fe4a423 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 17 Mar 2022 15:52:57 -0500 Subject: [PATCH 20/25] Account: normalize fqn --- .../__fixtures__/mastodon-account.json | 23 +++++++++++++++++++ .../normalizers/__tests__/account-test.js | 7 ++++++ app/soapbox/normalizers/account.ts | 6 +++++ app/soapbox/utils/accounts.ts | 8 +++---- 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 app/soapbox/__fixtures__/mastodon-account.json diff --git a/app/soapbox/__fixtures__/mastodon-account.json b/app/soapbox/__fixtures__/mastodon-account.json new file mode 100644 index 000000000..7a00340bf --- /dev/null +++ b/app/soapbox/__fixtures__/mastodon-account.json @@ -0,0 +1,23 @@ +{ + "id": "106801667066418367", + "username": "benis911", + "acct": "benis911", + "display_name": "", + "locked": false, + "bot": false, + "discoverable": null, + "group": false, + "created_at": "2021-08-22T00:00:00.000Z", + "note": "", + "url": "https://mastodon.social/@benis911", + "avatar": "https://mastodon.social/avatars/original/missing.png", + "avatar_static": "https://mastodon.social/avatars/original/missing.png", + "header": "https://mastodon.social/headers/original/missing.png", + "header_static": "https://mastodon.social/headers/original/missing.png", + "followers_count": 1, + "following_count": 0, + "statuses_count": 5, + "last_status_at": "2022-02-23", + "emojis": [], + "fields": [] +} diff --git a/app/soapbox/normalizers/__tests__/account-test.js b/app/soapbox/normalizers/__tests__/account-test.js index cbe45419f..8d12a935d 100644 --- a/app/soapbox/normalizers/__tests__/account-test.js +++ b/app/soapbox/normalizers/__tests__/account-test.js @@ -161,4 +161,11 @@ describe('normalizeAccount()', () => { expect(result.header).toEqual(HEADER_MISSING); expect(result.header_static).toEqual(HEADER_MISSING); }); + + it('adds fqn to Mastodon account', () => { + const account = require('soapbox/__fixtures__/mastodon-account.json'); + const result = normalizeAccount(account); + + expect(result.fqn).toEqual('benis911@mastodon.social'); + }); }); diff --git a/app/soapbox/normalizers/account.ts b/app/soapbox/normalizers/account.ts index a96c9ad2d..1c536ee4a 100644 --- a/app/soapbox/normalizers/account.ts +++ b/app/soapbox/normalizers/account.ts @@ -14,6 +14,7 @@ import { import emojify from 'soapbox/features/emoji/emoji'; import { normalizeEmoji } from 'soapbox/normalizers/emoji'; import { IAccount } from 'soapbox/types'; +import { acctFull } from 'soapbox/utils/accounts'; import { unescapeHTML } from 'soapbox/utils/html'; import { mergeDefined, makeEmojiMap } from 'soapbox/utils/normalizers'; @@ -195,6 +196,10 @@ const addInternalFields = (account: ImmutableMap) => { }); }; +const normalizeFqn = (account: ImmutableMap) => { + return account.set('fqn', acctFull(account)); +}; + export const normalizeAccount = (account: Record): IAccount => { return AccountRecord( ImmutableMap(fromJS(account)).withMutations(account => { @@ -206,6 +211,7 @@ export const normalizeAccount = (account: Record): IAccount => { normalizeVerified(account); normalizeBirthday(account); normalizeLocation(account); + normalizeFqn(account); fixUsername(account); fixDisplayName(account); addInternalFields(account); diff --git a/app/soapbox/utils/accounts.ts b/app/soapbox/utils/accounts.ts index e93138c86..a97f76338 100644 --- a/app/soapbox/utils/accounts.ts +++ b/app/soapbox/utils/accounts.ts @@ -10,14 +10,14 @@ const getDomainFromURL = (account: ImmutableMap): string => { }; export const getDomain = (account: ImmutableMap): string => { - const domain = account.get('acct').split('@')[1]; + const domain = account.get('acct', '').split('@')[1]; return domain ? domain : getDomainFromURL(account); }; export const guessFqn = (account: ImmutableMap): string => { - const [user, domain] = account.get('acct').split('@'); + const [user, domain] = account.get('acct', '').split('@'); if (!domain) return [user, getDomainFromURL(account)].join('@'); - return account.get('acct'); + return account.get('acct', ''); }; export const getBaseURL = (account: ImmutableMap): string => { @@ -31,7 +31,7 @@ export const getBaseURL = (account: ImmutableMap): string => { // user@domain even for local users export const acctFull = (account: ImmutableMap): string => ( - account.get('fqn') || guessFqn(account) + account.get('fqn') || guessFqn(account) || '' ); export const getAcct = (account: ImmutableMap, displayFqn: boolean): string => ( From 8587bd4bf60658c86ca223ad7c9e723ddcbb2025 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 18 Mar 2022 16:08:42 +0000 Subject: [PATCH 21/25] Revert "Merge branch 'msw' into 'develop'" This reverts merge request !1100 --- app/soapbox/__mocks__/api.js | 26 ++ app/soapbox/__tests__/api.js | 8 - app/soapbox/actions/__tests__/preload-test.js | 14 +- .../actions/__tests__/statuses-test.js | 22 +- app/soapbox/msw.js | 13 - app/soapbox/test_helpers.js | 5 +- app/soapbox/test_setup.js | 10 +- package.json | 1 - yarn.lock | 361 +----------------- 9 files changed, 53 insertions(+), 407 deletions(-) create mode 100644 app/soapbox/__mocks__/api.js delete mode 100644 app/soapbox/__tests__/api.js delete mode 100644 app/soapbox/msw.js diff --git a/app/soapbox/__mocks__/api.js b/app/soapbox/__mocks__/api.js new file mode 100644 index 000000000..fcb3a3253 --- /dev/null +++ b/app/soapbox/__mocks__/api.js @@ -0,0 +1,26 @@ +import MockAdapter from 'axios-mock-adapter'; + +const api = jest.requireActual('../api'); +let mocks = []; + +export const __stub = func => mocks.push(func); +export const __clear = () => mocks = []; + +const setupMock = axios => { + const mock = new MockAdapter(axios); + mocks.map(func => func(mock)); +}; + +export const staticClient = api.staticClient; + +export const baseClient = (...params) => { + const axios = api.baseClient(...params); + setupMock(axios); + return axios; +}; + +export default (...params) => { + const axios = api.default(...params); + setupMock(axios); + return axios; +}; diff --git a/app/soapbox/__tests__/api.js b/app/soapbox/__tests__/api.js deleted file mode 100644 index 420a74828..000000000 --- a/app/soapbox/__tests__/api.js +++ /dev/null @@ -1,8 +0,0 @@ -import api from 'soapbox/api'; -import { getState } from 'soapbox/test_helpers'; - -test('returns a 404', () => { - return api(getState).get('/').catch(error => { - expect(error.response).toMatchObject({ data: { error: 'Not implemented' } }); - }); -}); diff --git a/app/soapbox/actions/__tests__/preload-test.js b/app/soapbox/actions/__tests__/preload-test.js index 415b22da0..5290802d2 100644 --- a/app/soapbox/actions/__tests__/preload-test.js +++ b/app/soapbox/actions/__tests__/preload-test.js @@ -1,6 +1,6 @@ import { Map as ImmutableMap } from 'immutable'; -import { server, rest } from 'soapbox/msw'; +import { __stub } from 'soapbox/api'; import { mockStore } from 'soapbox/test_helpers'; import { VERIFY_CREDENTIALS_REQUEST } from '../auth'; @@ -14,14 +14,10 @@ describe('preloadMastodon()', () => { it('creates the expected actions', () => { const data = require('soapbox/__fixtures__/mastodon_initial_state.json'); - server.use( - rest.get('/api/v1/accounts/verify_credentials', (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require('soapbox/__fixtures__/pleroma-account.json')), - ); - }), - ); + __stub(mock => { + mock.onGet('/api/v1/accounts/verify_credentials') + .reply(200, {}); + }); const store = mockStore(ImmutableMap()); store.dispatch(preloadMastodon(data)); diff --git a/app/soapbox/actions/__tests__/statuses-test.js b/app/soapbox/actions/__tests__/statuses-test.js index 7c9fba1b0..71a0596a4 100644 --- a/app/soapbox/actions/__tests__/statuses-test.js +++ b/app/soapbox/actions/__tests__/statuses-test.js @@ -1,21 +1,21 @@ +import { Map as ImmutableMap } from 'immutable'; + import { STATUSES_IMPORT } from 'soapbox/actions/importer'; -import { server, rest } from 'soapbox/msw'; -import { rootState, mockStore } from 'soapbox/test_helpers'; +import { __stub } from 'soapbox/api'; +import { mockStore } from 'soapbox/test_helpers'; import { fetchContext } from '../statuses'; describe('fetchContext()', () => { it('handles Mitra context', done => { - server.use( - rest.get('/api/v1/statuses/017ed505-5926-392f-256a-f86d5075df70/context', (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json(require('soapbox/__fixtures__/mitra-context.json')), - ); - }), - ); + const statuses = require('soapbox/__fixtures__/mitra-context.json'); - const store = mockStore(rootState); + __stub(mock => { + mock.onGet('/api/v1/statuses/017ed505-5926-392f-256a-f86d5075df70/context') + .reply(200, statuses); + }); + + const store = mockStore(ImmutableMap()); store.dispatch(fetchContext('017ed505-5926-392f-256a-f86d5075df70')).then(context => { const actions = store.getActions(); diff --git a/app/soapbox/msw.js b/app/soapbox/msw.js deleted file mode 100644 index c2dd4f0ef..000000000 --- a/app/soapbox/msw.js +++ /dev/null @@ -1,13 +0,0 @@ -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; - -export const server = setupServer( - rest.get('*', (req, res, ctx) => { - return res( - ctx.status(404), - ctx.json({ error: 'Not implemented' }), - ); - }), -); - -export { rest } from 'msw'; diff --git a/app/soapbox/test_helpers.js b/app/soapbox/test_helpers.js index 90f41119e..c9de38dc4 100644 --- a/app/soapbox/test_helpers.js +++ b/app/soapbox/test_helpers.js @@ -11,9 +11,6 @@ import thunk from 'redux-thunk'; import rootReducer from 'soapbox/reducers'; -export const rootState = rootReducer(undefined, {}); -export const getState = () => rootState; - // Mock Redux // https://redux.js.org/recipes/writing-tests/ const middlewares = [thunk]; @@ -23,7 +20,7 @@ export const mockStore = configureMockStore(middlewares); export const createComponent = (children, props = {}) => { props = ImmutableMap({ locale: 'en', - store: mockStore(rootState), + store: mockStore(rootReducer(ImmutableMap(), {})), }).merge(props); return renderer.create( diff --git a/app/soapbox/test_setup.js b/app/soapbox/test_setup.js index b7f7ce8b0..a3432a744 100644 --- a/app/soapbox/test_setup.js +++ b/app/soapbox/test_setup.js @@ -3,14 +3,12 @@ import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; -import { server } from 'soapbox/msw'; +import { __clear as clearApiMocks } from 'soapbox/api'; // Enzyme const adapter = new Adapter(); configure({ adapter }); -// Setup MSW -// https://mswjs.io/docs/api/setup-server -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); +// API mocking +jest.mock('soapbox/api'); +afterEach(() => clearApiMocks()); diff --git a/package.json b/package.json index cb3a48d59..2608b779a 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,6 @@ "mark-loader": "^0.1.6", "marky": "^1.2.1", "mini-css-extract-plugin": "^1.6.2", - "msw": "^0.39.2", "object-assign": "^4.1.1", "object-fit-images": "^3.2.3", "object.values": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index 41ddd3384..68c4f6882 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1569,26 +1569,6 @@ minimatch "^3.0.3" slash "^1.0.0" -"@mswjs/cookies@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.0.tgz#7ef2b5d7e444498bb27cf57720e61f76a4ce9f23" - integrity sha512-GTKYnIfXVP8GL8HRWrse+ujqDXCLKvu7+JoL6pvZFzS/d2i9pziByoWD69cOe35JNoSrx2DPNqrhUF+vgV3qUA== - dependencies: - "@types/set-cookie-parser" "^2.4.0" - set-cookie-parser "^2.4.6" - -"@mswjs/interceptors@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.15.1.tgz#4a0009f56e51bc2cd3176f1507065c7d2f6c0d5e" - integrity sha512-D5B+ZJNlfvBm6ZctAfRBdNJdCHYAe2Ix4My5qfbHV5WH+3lkt3mmsjiWJzEh5ZwGDauzY487TldI275If7DJVw== - dependencies: - "@open-draft/until" "^1.0.3" - "@xmldom/xmldom" "^0.7.5" - debug "^4.3.3" - headers-polyfill "^3.0.4" - outvariant "^1.2.1" - strict-event-emitter "^0.2.0" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1610,11 +1590,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@open-draft/until@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" - integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== - "@polka/url@^1.0.0-next.20": version "1.0.0-next.20" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.20.tgz#111b5db0f501aa89b05076fa31f0ea0e0c292cd3" @@ -1772,11 +1747,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - "@types/escape-html@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-1.0.1.tgz#b19b4646915f0ae2c306bf984dc0a59c5cfc97ba" @@ -1856,11 +1826,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/js-levenshtein@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" - integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== - "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -1949,13 +1914,6 @@ dependencies: schema-utils "*" -"@types/set-cookie-parser@^2.4.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" - integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== - dependencies: - "@types/node" "*" - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -2116,11 +2074,6 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.5.2.tgz#ea584b637ff63c5a477f6f21604b5a205b72c9ec" integrity sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw== -"@xmldom/xmldom@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" - integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2264,7 +2217,7 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2679,11 +2632,6 @@ balanced-match@^2.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -2704,15 +2652,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2821,14 +2760,6 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2920,14 +2851,6 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" -chalk@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2976,11 +2899,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - cheerio-select@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" @@ -3074,11 +2992,6 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -3087,11 +3000,6 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3117,11 +3025,6 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3277,11 +3180,6 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -cookie@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - copy-webpack-plugin@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-9.0.1.tgz#b71d21991599f61a4ee00ba79087b8ba279bbb59" @@ -3632,13 +3530,6 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -3696,13 +3587,6 @@ default-gateway@^6.0.0: dependencies: execa "^5.0.0" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -4441,7 +4325,7 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.2.0, events@^3.3.0: +events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -4543,15 +4427,6 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4612,13 +4487,6 @@ feather-icons@^4.28.0: classnames "^2.2.5" core-js "^3.1.3" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4942,11 +4810,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== -graphql@^16.3.0: - version "16.3.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.3.0.tgz#a91e24d10babf9e60c706919bb182b53ccdffc05" - integrity sha512-xm+ANmA16BzCT5pLjuXySbQVFwH3oJctUVdy81w1sV0vBU0KgDdBGtxQOUd5zqOBk/JayAFeG8Dlmeq74rjm/A== - gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -5015,11 +4878,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -headers-polyfill@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.0.4.tgz#cd70c815a441dd882372fcd6eda212ce997c9b18" - integrity sha512-I1DOM1EdWYntdrnCvqQtcKwSSuiTzoqOExy4v1mdcFixFZABlWP4IPHdmoLtPda0abMHqDOY4H9svhQ10DFR4w== - hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -5256,7 +5114,7 @@ husky@^7.0.2: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5268,11 +5126,6 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -5355,7 +5208,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5370,26 +5223,6 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^8.2.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.1.tgz#e00022e3e8930a92662f760f020686530a84671d" - integrity sha512-pxhBaw9cyTFMjwKtkjePWDhvwzvrNGAw7En4hottzlPvz80GZaMZthdDU35aA6/f5FRZf3uhE057q8w1DE3V2g== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - internal-ip@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-6.2.0.tgz#d5541e79716e406b74ac6b07b856ef18dc1621c1" @@ -5657,11 +5490,6 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-ip@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" @@ -5682,11 +5510,6 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-node-process@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.0.1.tgz#4fc7ac3a91e8aac58175fe0578abbc56f2831b23" - integrity sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ== - is-number-object@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" @@ -6315,11 +6138,6 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-levenshtein@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7100,31 +6918,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msw@^0.39.2: - version "0.39.2" - resolved "https://registry.yarnpkg.com/msw/-/msw-0.39.2.tgz#832e9274db62c43cb79854d5a69dce031c700de8" - integrity sha512-ju/HpqQpE4/qCxZ23t5Gaau0KREn4QuFzdG28nP1EpidMrymMJuIvNd32+2uGTGG031PMwrC41YW7vCxHOwyHA== - dependencies: - "@mswjs/cookies" "^0.2.0" - "@mswjs/interceptors" "^0.15.1" - "@open-draft/until" "^1.0.3" - "@types/cookie" "^0.4.1" - "@types/js-levenshtein" "^1.1.1" - chalk "4.1.1" - chokidar "^3.4.2" - cookie "^0.4.2" - graphql "^16.3.0" - headers-polyfill "^3.0.4" - inquirer "^8.2.0" - is-node-process "^1.0.1" - js-levenshtein "^1.1.6" - node-fetch "^2.6.7" - path-to-regexp "^6.2.0" - statuses "^2.0.0" - strict-event-emitter "^0.2.0" - type-fest "^1.2.2" - yargs "^17.3.1" - multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -7138,11 +6931,6 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nanoid@^3.1.23: version "3.1.25" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" @@ -7186,13 +6974,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -7437,31 +7218,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -outvariant@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" - integrity sha512-bcILvFkvpMXh66+Ubax/inxbKRyWTUiiFIW2DWkiS79wakrLGn3Ydy+GvukadiyfZjaL6C7YhIem4EZSM282wA== - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -7673,11 +7429,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-to-regexp@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" - integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8679,7 +8430,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8977,11 +8728,6 @@ rst-selector-parser@^2.2.3: lodash.flattendeep "^4.4.0" nearley "^2.7.10" -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -8996,13 +8742,6 @@ rxjs@^6.6.7: dependencies: tslib "^1.9.0" -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== - dependencies: - tslib "^2.1.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -9179,11 +8918,6 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-cookie-parser@^2.4.6: - version "2.4.8" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" - integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -9405,18 +9139,6 @@ stack-utils@^2.0.3: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -strict-event-emitter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" - integrity sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w== - dependencies: - events "^3.3.0" - string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -9439,15 +9161,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string.prototype.matchall@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" @@ -9531,13 +9244,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -9855,7 +9561,7 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through@^2.3.6, through@^2.3.8: +through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9890,13 +9596,6 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -9940,11 +9639,6 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -10062,11 +9756,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10392,18 +10081,6 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -10580,14 +10257,6 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" @@ -10727,11 +10396,6 @@ yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - yargs@^16.0.3: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -10745,19 +10409,6 @@ yargs@^16.0.3: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: - version "17.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" - integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 608958f1e821d079e7655a318059f5da426af651 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 18 Mar 2022 11:32:05 -0500 Subject: [PATCH 22/25] Add @types/http-link-header --- package.json | 1 + yarn.lock | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/package.json b/package.json index fda7716ca..e58c8643f 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "@sentry/tracing": "^6.12.0", "@tabler/icons": "^1.53.0", "@types/escape-html": "^1.0.1", + "@types/http-link-header": "^1.0.3", "@types/redux-immutable": "^4.0.2", "array-includes": "^3.0.3", "autoprefixer": "^10.0.0", diff --git a/yarn.lock b/yarn.lock index 5bc0a3e5a..ac74e6ea9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1814,6 +1814,13 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== +"@types/http-link-header@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/http-link-header/-/http-link-header-1.0.3.tgz#899adf1d8d2036074514f3dbd148fb901ceff920" + integrity sha512-y8HkoD/vyid+5MrJ3aas0FvU3/BVBGcyG9kgxL0Zn4JwstA8CglFPnrR0RuzOjRCXwqzL5uxWC2IO7Ub0rMU2A== + dependencies: + "@types/node" "*" + "@types/http-proxy@^1.17.5": version "1.17.7" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.7.tgz#30ea85cc2c868368352a37f0d0d3581e24834c6f" From 1fe7a72790a22290ce0c6e6a48a5c93df6bdacbd Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 18 Mar 2022 12:20:03 -0500 Subject: [PATCH 23/25] Fix API mock --- app/soapbox/__mocks__/api.js | 26 ----------------- app/soapbox/__mocks__/api.ts | 28 +++++++++++++++++++ .../actions/__tests__/statuses-test.js | 6 ++-- app/soapbox/test_helpers.js | 5 +++- 4 files changed, 34 insertions(+), 31 deletions(-) delete mode 100644 app/soapbox/__mocks__/api.js create mode 100644 app/soapbox/__mocks__/api.ts diff --git a/app/soapbox/__mocks__/api.js b/app/soapbox/__mocks__/api.js deleted file mode 100644 index fcb3a3253..000000000 --- a/app/soapbox/__mocks__/api.js +++ /dev/null @@ -1,26 +0,0 @@ -import MockAdapter from 'axios-mock-adapter'; - -const api = jest.requireActual('../api'); -let mocks = []; - -export const __stub = func => mocks.push(func); -export const __clear = () => mocks = []; - -const setupMock = axios => { - const mock = new MockAdapter(axios); - mocks.map(func => func(mock)); -}; - -export const staticClient = api.staticClient; - -export const baseClient = (...params) => { - const axios = api.baseClient(...params); - setupMock(axios); - return axios; -}; - -export default (...params) => { - const axios = api.default(...params); - setupMock(axios); - return axios; -}; diff --git a/app/soapbox/__mocks__/api.ts b/app/soapbox/__mocks__/api.ts new file mode 100644 index 000000000..a0b91a967 --- /dev/null +++ b/app/soapbox/__mocks__/api.ts @@ -0,0 +1,28 @@ +import MockAdapter from 'axios-mock-adapter'; +import { AxiosInstance } from 'axios'; +import { jest } from '@jest/globals'; + +const api = jest.requireActual('../api') as Record; +let mocks: Array = []; + +export const __stub = (func: Function) => mocks.push(func); +export const __clear = (): Function[] => mocks = []; + +const setupMock = (axios: AxiosInstance) => { + const mock = new MockAdapter(axios); + mocks.map(func => func(mock)); +}; + +export const staticClient = api.staticClient; + +export const baseClient = (...params: any[]) => { + const axios = api.baseClient(...params); + setupMock(axios); + return axios; +}; + +export default (...params: any[]) => { + const axios = api.default(...params); + setupMock(axios); + return axios; +}; diff --git a/app/soapbox/actions/__tests__/statuses-test.js b/app/soapbox/actions/__tests__/statuses-test.js index 71a0596a4..aa1ac9f3d 100644 --- a/app/soapbox/actions/__tests__/statuses-test.js +++ b/app/soapbox/actions/__tests__/statuses-test.js @@ -1,8 +1,6 @@ -import { Map as ImmutableMap } from 'immutable'; - import { STATUSES_IMPORT } from 'soapbox/actions/importer'; import { __stub } from 'soapbox/api'; -import { mockStore } from 'soapbox/test_helpers'; +import { mockStore, rootState } from 'soapbox/test_helpers'; import { fetchContext } from '../statuses'; @@ -15,7 +13,7 @@ describe('fetchContext()', () => { .reply(200, statuses); }); - const store = mockStore(ImmutableMap()); + const store = mockStore(rootState); store.dispatch(fetchContext('017ed505-5926-392f-256a-f86d5075df70')).then(context => { const actions = store.getActions(); diff --git a/app/soapbox/test_helpers.js b/app/soapbox/test_helpers.js index c9de38dc4..90f41119e 100644 --- a/app/soapbox/test_helpers.js +++ b/app/soapbox/test_helpers.js @@ -11,6 +11,9 @@ import thunk from 'redux-thunk'; import rootReducer from 'soapbox/reducers'; +export const rootState = rootReducer(undefined, {}); +export const getState = () => rootState; + // Mock Redux // https://redux.js.org/recipes/writing-tests/ const middlewares = [thunk]; @@ -20,7 +23,7 @@ export const mockStore = configureMockStore(middlewares); export const createComponent = (children, props = {}) => { props = ImmutableMap({ locale: 'en', - store: mockStore(rootReducer(ImmutableMap(), {})), + store: mockStore(rootState), }).merge(props); return renderer.create( From 0daa53c03c56be2e5ee1f92151af18fd4dcb70c3 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 18 Mar 2022 13:16:59 -0500 Subject: [PATCH 24/25] Fix Typescript eslint --- .eslintrc.js | 12 +- app/soapbox/__mocks__/api.ts | 4 +- package.json | 5 +- yarn.lock | 290 ++++++++++++++++++++++++++++++++++- 4 files changed, 295 insertions(+), 16 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index f4b59595a..193d390bd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -254,18 +254,12 @@ module.exports = { }, overrides: [ { - files: ['**/*.tsx'], + files: ['**/*.ts', '**/*.tsx'], rules: { + 'no-undef': 'off', // https://stackoverflow.com/a/69155899 'react/prop-types': 'off', }, - }, - // Disable no-undef in TypeScript - // https://stackoverflow.com/a/69155899 - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-undef': 'off', - }, + parser: '@typescript-eslint/parser', }, ], }; diff --git a/app/soapbox/__mocks__/api.ts b/app/soapbox/__mocks__/api.ts index a0b91a967..2f3a0d7b8 100644 --- a/app/soapbox/__mocks__/api.ts +++ b/app/soapbox/__mocks__/api.ts @@ -1,6 +1,6 @@ -import MockAdapter from 'axios-mock-adapter'; -import { AxiosInstance } from 'axios'; import { jest } from '@jest/globals'; +import { AxiosInstance } from 'axios'; +import MockAdapter from 'axios-mock-adapter'; const api = jest.requireActual('../api') as Record; let mocks: Array = []; diff --git a/package.json b/package.json index e58c8643f..efb580854 100644 --- a/package.json +++ b/package.json @@ -158,7 +158,6 @@ "substring-trie": "^1.0.2", "terser-webpack-plugin": "^5.2.3", "tiny-queue": "^0.2.1", - "ts-jest": "^27.0.5", "ts-loader": "^9.2.6", "tslib": "^2.3.1", "twemoji": "https://github.com/twitter/twemoji#v13.0.2", @@ -173,6 +172,9 @@ "wicg-inert": "^3.1.1" }, "devDependencies": { + "@jest/globals": "^27.5.1", + "@typescript-eslint/eslint-plugin": "^5.15.0", + "@typescript-eslint/parser": "^5.15.0", "axios-mock-adapter": "^1.18.1", "babel-eslint": "^10.1.0", "babel-jest": "^27.1.0", @@ -194,6 +196,7 @@ "stylelint": "^13.7.2", "stylelint-config-standard": "^22.0.0", "stylelint-scss": "^3.18.0", + "ts-jest": "^27.0.5", "webpack-dev-server": "^4.1.0", "yargs": "^16.0.3" } diff --git a/yarn.lock b/yarn.lock index ac74e6ea9..78299464e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1453,6 +1453,16 @@ "@types/node" "*" jest-mock "^27.1.1" +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + "@jest/fake-timers@^27.2.0": version "27.2.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.0.tgz#560841bc21ae7fbeff0cbff8de8f5cf43ad3561d" @@ -1465,6 +1475,18 @@ jest-mock "^27.1.1" jest-util "^27.2.0" +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + "@jest/globals@^27.2.0": version "27.2.0" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.0.tgz#4d7085f51df5ac70c8240eb3501289676503933d" @@ -1474,6 +1496,15 @@ "@jest/types" "^27.1.1" expect "^27.2.0" +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + "@jest/reporters@^27.2.0": version "27.2.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.0.tgz#629886d9a42218e504a424889a293abb27919e25" @@ -1565,6 +1596,17 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + "@lcdp/offline-plugin@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@lcdp/offline-plugin/-/offline-plugin-5.1.0.tgz#826f3e10d618711bd002afd674edb36dc1d9a792" @@ -1703,6 +1745,13 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@stylelint/postcss-css-in-js@^0.37.2": version "0.37.2" resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" @@ -1852,6 +1901,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.9": + version "7.0.10" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.10.tgz#9b05b7896166cd00e9cbd59864853abf65d9ac23" + integrity sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1965,6 +2019,86 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz#c28ef7f2e688066db0b6a9d95fb74185c114fb9a" + integrity sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA== + dependencies: + "@typescript-eslint/scope-manager" "5.15.0" + "@typescript-eslint/type-utils" "5.15.0" + "@typescript-eslint/utils" "5.15.0" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.15.0.tgz#95f603f8fe6eca7952a99bfeef9b85992972e728" + integrity sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ== + dependencies: + "@typescript-eslint/scope-manager" "5.15.0" + "@typescript-eslint/types" "5.15.0" + "@typescript-eslint/typescript-estree" "5.15.0" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz#d97afab5e0abf4018d1289bd711be21676cdd0ee" + integrity sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg== + dependencies: + "@typescript-eslint/types" "5.15.0" + "@typescript-eslint/visitor-keys" "5.15.0" + +"@typescript-eslint/type-utils@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz#d2c02eb2bdf54d0a645ba3a173ceda78346cf248" + integrity sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA== + dependencies: + "@typescript-eslint/utils" "5.15.0" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.15.0.tgz#c7bdd103843b1abae97b5518219d3e2a0d79a501" + integrity sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA== + +"@typescript-eslint/typescript-estree@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz#81513a742a9c657587ad1ddbca88e76c6efb0aac" + integrity sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA== + dependencies: + "@typescript-eslint/types" "5.15.0" + "@typescript-eslint/visitor-keys" "5.15.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.15.0.tgz#468510a0974d3ced8342f37e6c662778c277f136" + integrity sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.15.0" + "@typescript-eslint/types" "5.15.0" + "@typescript-eslint/typescript-estree" "5.15.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz#5669739fbf516df060f978be6a6dce75855a8027" + integrity sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ== + dependencies: + "@typescript-eslint/types" "5.15.0" + eslint-visitor-keys "^3.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -2246,7 +2380,7 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^5.0.0: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -2992,6 +3126,11 @@ ci-info@^3.1.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== +ci-info@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" @@ -3559,6 +3698,13 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -3684,6 +3830,11 @@ diff-sequences@^27.0.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4240,6 +4391,13 @@ eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -4250,6 +4408,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +eslint-visitor-keys@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@^7.0.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -4408,6 +4571,16 @@ expect@^27.2.0: jest-message-util "^27.2.0" jest-regex-util "^27.0.6" +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -4472,6 +4645,17 @@ fast-glob@^3.1.1, fast-glob@^3.2.5: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -4822,6 +5006,18 @@ globby@^11.0.1, globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" @@ -4839,6 +5035,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + gzip-size@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" @@ -5165,6 +5366,11 @@ ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -5835,6 +6041,16 @@ jest-diff@^27.2.0: jest-get-type "^27.0.6" pretty-format "^27.2.0" +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-docblock@^27.0.6: version "27.0.6" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" @@ -5883,6 +6099,11 @@ jest-get-type@^27.0.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + jest-haste-map@^27.2.0: version "27.2.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.0.tgz#703b3a473e3f2e27d75ab07864ffd7bbaad0d75e" @@ -5945,6 +6166,16 @@ jest-matcher-utils@^27.2.0: jest-get-type "^27.0.6" pretty-format "^27.2.0" +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + jest-message-util@^27.2.0: version "27.2.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.0.tgz#2f65c71df55267208686b1d7514e18106c91ceaf" @@ -5960,6 +6191,21 @@ jest-message-util@^27.2.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^27.1.1: version "27.1.1" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.1.tgz#c7a2e81301fdcf3dab114931d23d89ec9d0c3a82" @@ -5968,6 +6214,14 @@ jest-mock@^27.1.1: "@jest/types" "^27.1.1" "@types/node" "*" +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" @@ -6119,6 +6373,18 @@ jest-util@^27.0.0, jest-util@^27.2.0: is-ci "^3.0.0" picomatch "^2.2.3" +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^27.2.0: version "27.2.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.0.tgz#b7535f12d95dd3b4382831f4047384ca098642ab" @@ -6807,7 +7073,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -7936,6 +8202,15 @@ pretty-format@^27.2.0: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -8556,7 +8831,7 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: +regexpp@^3.1.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -9717,7 +9992,7 @@ tsconfig-paths@^3.12.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -9727,6 +10002,13 @@ tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + twemoji-parser@13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-13.0.0.tgz#bd9d1b98474f1651dc174696b45cabefdfa405af" From e3c60647dcd18ca476a6ad189413cb832a237910 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 18 Mar 2022 15:17:32 -0500 Subject: [PATCH 25/25] tsconfig: exclude Jest files --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index cead8687c..20d08e4b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,6 @@ "moduleResolution": "node", "experimentalDecorators": true, "allowSyntheticDefaultImports": true - } + }, + "exclude": ["**/*.test.*", "**/__mocks__/*", "**/__tests__/*"] }