You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Tools: Add eslint rule prefer-await-to-then
This commit is contained in:
		| @@ -90,6 +90,8 @@ module.exports = { | ||||
| 		// Disable because of this: https://github.com/facebook/react/issues/16265 | ||||
| 		// "react-hooks/exhaustive-deps": "warn", | ||||
|  | ||||
| 		'promise/prefer-await-to-then': 'error', | ||||
|  | ||||
| 		// ------------------------------- | ||||
| 		// Formatting | ||||
| 		// ------------------------------- | ||||
| @@ -141,6 +143,7 @@ module.exports = { | ||||
| 		'@seiyab/eslint-plugin-react-hooks', | ||||
| 		// 'react-hooks', | ||||
| 		'import', | ||||
| 		'promise', | ||||
| 	], | ||||
| 	'overrides': [ | ||||
| 		{ | ||||
|   | ||||
| @@ -69,6 +69,7 @@ | ||||
|     "eslint": "^8.22.0", | ||||
|     "eslint-interactive": "^10.0.0", | ||||
|     "eslint-plugin-import": "^2.26.0", | ||||
|     "eslint-plugin-promise": "^6.0.1", | ||||
|     "eslint-plugin-react": "^7.30.1", | ||||
|     "fs-extra": "^8.1.0", | ||||
|     "glob": "^7.1.6", | ||||
|   | ||||
| @@ -124,6 +124,7 @@ async function handleAutocompletionPromise(line) { | ||||
| 	return line; | ||||
| } | ||||
| function handleAutocompletion(str, callback) { | ||||
| // eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	handleAutocompletionPromise(str).then(function(res) { | ||||
| 		callback(undefined, res); | ||||
| 	}); | ||||
|   | ||||
| @@ -36,6 +36,7 @@ async function createClients() { | ||||
| 		const client = createClient(clientId); | ||||
| 		promises.push(fs.remove(client.profileDir)); | ||||
| 		promises.push( | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			execCommand(client, 'config sync.target 2').then(() => { | ||||
| 				return execCommand(client, `config sync.2.path ${syncDir}`); | ||||
| 			}) | ||||
| @@ -2324,10 +2325,12 @@ async function main() { | ||||
| 		clients[clientId].activeCommandCount++; | ||||
|  | ||||
| 		execRandomCommand(clients[clientId]) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.catch(error => { | ||||
| 				logger.info(`Client ${clientId}:`); | ||||
| 				logger.error(error); | ||||
| 			}) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then(r => { | ||||
| 				if (r) { | ||||
| 					logger.info(`Client ${clientId}:\n${r.trim()}`); | ||||
|   | ||||
| @@ -50,6 +50,7 @@ export default class PluginRunner extends BasePluginRunner { | ||||
| 			const callId = `${pluginId}::${path}::${uuid.createNano()}`; | ||||
| 			this.activeSandboxCalls_[callId] = true; | ||||
| 			const promise = executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler); | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			promise.finally(() => { | ||||
| 				delete this.activeSandboxCalls_[callId]; | ||||
| 			}); | ||||
|   | ||||
| @@ -502,6 +502,7 @@ class Application extends BaseApplication { | ||||
| 		if (Setting.value('env') === 'dev') { | ||||
| 			void AlarmService.updateAllNotifications(); | ||||
| 		} else { | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			void reg.scheduleSync(1000).then(() => { | ||||
| 				// Wait for the first sync before updating the notifications, since synchronisation | ||||
| 				// might change the notifications. | ||||
|   | ||||
| @@ -45,6 +45,7 @@ class ClipperConfigScreenComponent extends React.Component { | ||||
| 		if (confirm(_('Are you sure you want to renew the authorisation token?'))) { | ||||
| 			void EncryptionService.instance() | ||||
| 				.generateApiToken() | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.then((token) => { | ||||
| 					Setting.setValue('api.token', token); | ||||
| 				}); | ||||
|   | ||||
| @@ -174,9 +174,11 @@ class ResourceScreenComponent extends React.Component<Props, State> { | ||||
| 			return; | ||||
| 		} | ||||
| 		Resource.delete(resource.id) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.catch((error: Error) => { | ||||
| 				bridge().showErrorMessageBox(error.message); | ||||
| 			}) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.finally(() => { | ||||
| 				void this.reloadResources(this.state.sorting); | ||||
| 			}); | ||||
|   | ||||
| @@ -50,6 +50,7 @@ class FolderScreenComponent extends BaseScreenComponent { | ||||
| 				lastSavedFolder: Object.assign({}, folder), | ||||
| 			}); | ||||
| 		} else { | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			Folder.load(this.props.folderId).then(folder => { | ||||
| 				this.setState({ | ||||
| 					folder: folder, | ||||
|   | ||||
| @@ -151,10 +151,12 @@ class NotesScreenComponent extends BaseScreenComponent { | ||||
| 	} | ||||
|  | ||||
| 	deleteFolder_onPress(folderId) { | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		dialogs.confirm(this, _('Delete notebook? All notes and sub-notebooks within this notebook will also be deleted.')).then(ok => { | ||||
| 			if (!ok) return; | ||||
|  | ||||
| 			Folder.delete(folderId) | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.then(() => { | ||||
| 					this.props.dispatch({ | ||||
| 						type: 'NAV_GO', | ||||
| @@ -162,6 +164,7 @@ class NotesScreenComponent extends BaseScreenComponent { | ||||
| 						smartFilterId: 'c3176726992c11e9ac940492261af972', | ||||
| 					}); | ||||
| 				}) | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.catch(error => { | ||||
| 					alert(error.message); | ||||
| 				}); | ||||
|   | ||||
| @@ -633,6 +633,7 @@ async function initialize(dispatch: Function) { | ||||
| 	// start almost immediately to get the latest data. | ||||
| 	// doWifiConnectionCheck set to true so initial sync | ||||
| 	// doesn't happen on mobile data | ||||
| 	// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	void reg.scheduleSync(1000, null, true).then(() => { | ||||
| 		// Wait for the first sync before updating the notifications, since synchronisation | ||||
| 		// might change the notifications. | ||||
|   | ||||
| @@ -39,6 +39,7 @@ export default (dispatch: Function, folderId: string) => { | ||||
| 		void Note.save({ | ||||
| 			parent_id: folderId, | ||||
| 			is_todo: isTodo, | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		}, { provisional: true }).then((newNote: any) => { | ||||
| 			dispatch({ | ||||
| 				type: 'NAV_GO', | ||||
| @@ -51,6 +52,7 @@ export default (dispatch: Function, folderId: string) => { | ||||
|  | ||||
| 	DeviceEventEmitter.addListener('quickActionShortcut', handleQuickAction); | ||||
|  | ||||
| 	// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	QuickActions.popInitialAction().then(handleQuickAction).catch((reason: any) => reg.logger().error(reason)); | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -41,6 +41,7 @@ class DatabaseDriverReactNative { | ||||
| 	} | ||||
|  | ||||
| 	selectAll(sql, params = null) { | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		return this.exec(sql, params).then(r => { | ||||
| 			const output = []; | ||||
| 			for (let i = 0; i < r.rows.length; i++) { | ||||
|   | ||||
| @@ -880,6 +880,7 @@ export default class BaseApplication { | ||||
| 		if (!Setting.value('api.token')) { | ||||
| 			void EncryptionService.instance() | ||||
| 				.generateApiToken() | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.then((token: string) => { | ||||
| 					Setting.setValue('api.token', token); | ||||
| 				}); | ||||
|   | ||||
| @@ -248,6 +248,7 @@ class BaseModel { | ||||
| 		if (options.where) sql += ` WHERE ${options.where}`; | ||||
| 		return this.db() | ||||
| 			.selectOne(sql) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then((r: any) => { | ||||
| 				return r ? r['total'] : 0; | ||||
| 			}); | ||||
| @@ -335,6 +336,7 @@ class BaseModel { | ||||
| 		if (params === null) params = []; | ||||
| 		return this.db() | ||||
| 			.selectOne(sql, params) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then((model: any) => { | ||||
| 				return this.filter(this.addModelMd(model)); | ||||
| 			}); | ||||
| @@ -344,6 +346,7 @@ class BaseModel { | ||||
| 		if (params === null) params = []; | ||||
| 		return this.db() | ||||
| 			.selectAll(sql, params) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then((models: any[]) => { | ||||
| 				return this.filterArray(this.addModelMd(models)); | ||||
| 			}); | ||||
|   | ||||
| @@ -292,6 +292,7 @@ export default class JoplinDatabase extends Database { | ||||
| 		queries.push(this.wrapQuery('DELETE FROM table_fields')); | ||||
|  | ||||
| 		return this.selectAll('SELECT name FROM sqlite_master WHERE type="table"') | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then(tableRows => { | ||||
| 				const chain = []; | ||||
| 				for (let i = 0; i < tableRows.length; i++) { | ||||
| @@ -303,6 +304,7 @@ export default class JoplinDatabase extends Database { | ||||
| 					if (tableName === 'notes_spellfix') continue; | ||||
| 					if (tableName === 'search_aux') continue; | ||||
| 					chain.push(() => { | ||||
| 						// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 						return this.selectAll(`PRAGMA table_info("${tableName}")`).then(pragmas => { | ||||
| 							for (let i = 0; i < pragmas.length; i++) { | ||||
| 								const item = pragmas[i]; | ||||
| @@ -325,6 +327,7 @@ export default class JoplinDatabase extends Database { | ||||
|  | ||||
| 				return promiseChain(chain); | ||||
| 			}) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then(() => { | ||||
| 				queries.push({ sql: 'UPDATE version SET table_fields_version = ?', params: [newVersion] }); | ||||
| 				return this.transactionExecBatch(queries); | ||||
|   | ||||
| @@ -231,11 +231,14 @@ class Logger { | ||||
| 				// when many log operations are being done (eg. during sync in | ||||
| 				// dev mode). | ||||
| 				let release: Function = null; | ||||
| 				// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				writeToFileMutex_.acquire().then((r: Function) => { | ||||
| 					release = r; | ||||
| 					return Logger.fsDriver().appendFile(target.path, `${line.join(': ')}\n`, 'utf8'); | ||||
| 					// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				}).catch((error: any) => { | ||||
| 					console.error('Cannot write to log file:', error); | ||||
| 					// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				}).finally(() => { | ||||
| 					if (release) release(); | ||||
| 				}); | ||||
|   | ||||
| @@ -70,9 +70,11 @@ export default class TaskQueue { | ||||
|  | ||||
| 			task | ||||
| 				.callback() | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.then((result: any) => { | ||||
| 					completeTask(task, result, null); | ||||
| 				}) | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.catch((error: Error) => { | ||||
| 					if (!error) error = new Error('Unknown error'); | ||||
| 					completeTask(task, null, error); | ||||
|   | ||||
| @@ -102,6 +102,7 @@ shared.saveNoteButton_press = async function(comp, folderId = null, options = nu | ||||
| 	comp.setState(newState); | ||||
|  | ||||
| 	if (isProvisionalNote) { | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		Note.updateGeolocation(note.id).then(geoNote => { | ||||
| 			const stateNote = comp.state.note; | ||||
| 			if (!stateNote || !geoNote) return; | ||||
|   | ||||
| @@ -588,6 +588,7 @@ export default async function importEnex(parentFolderId: string, filePath: strin | ||||
| 				notes.push(note); | ||||
|  | ||||
| 				if (notes.length >= 10) { | ||||
| 					// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 					processNotes().catch(error => { | ||||
| 						importOptions.onError(createErrorWithNoteTitle(this, error)); | ||||
| 					}); | ||||
| @@ -648,6 +649,7 @@ export default async function importEnex(parentFolderId: string, filePath: strin | ||||
| 		saxStream.on('end', handleSaxStreamEvent(function() { | ||||
| 			// Wait till there is no more notes to process. | ||||
| 			const iid = shim.setInterval(() => { | ||||
| 				// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				void processNotes().then(allDone => { | ||||
| 					if (allDone) { | ||||
| 						shim.clearTimeout(iid); | ||||
|   | ||||
| @@ -55,6 +55,7 @@ export default class Folder extends BaseItem { | ||||
|  | ||||
| 		return this.db() | ||||
| 			.selectAll(`SELECT id FROM notes WHERE ${where.join(' AND ')}`, [parentId]) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then((rows: any[]) => { | ||||
| 				const output = []; | ||||
| 				for (let i = 0; i < rows.length; i++) { | ||||
| @@ -759,6 +760,7 @@ export default class Folder extends BaseItem { | ||||
|  | ||||
| 		syncDebugLog.info('Folder Save:', o); | ||||
|  | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		return super.save(o, options).then((folder: FolderEntity) => { | ||||
| 			this.dispatch({ | ||||
| 				type: 'FOLDER_UPDATE_ONE', | ||||
|   | ||||
| @@ -205,6 +205,7 @@ export default class Tag extends BaseItem { | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		return super.save(o, options).then((tag: TagEntity) => { | ||||
| 			if (options.dispatchUpdateAction) { | ||||
| 				this.dispatch({ | ||||
|   | ||||
| @@ -82,12 +82,14 @@ class OneDriveApiNodeUtils { | ||||
|  | ||||
| 				this.api() | ||||
| 					.execTokenRequest(query.code, `http://localhost:${port.toString()}`) | ||||
| 				// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 					.then(() => { | ||||
| 						writeResponse(200, _('The application has been authorised - you may now close this browser tab.')); | ||||
| 						targetConsole.log(''); | ||||
| 						targetConsole.log(_('The application has been successfully authorised.')); | ||||
| 						waitAndDestroy(); | ||||
| 					}) | ||||
| 				// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 					.catch(error => { | ||||
| 						writeResponse(400, error.message); | ||||
| 						targetConsole.log(''); | ||||
|   | ||||
| @@ -4,6 +4,7 @@ function promiseChain(chain, defaultValue = null) { | ||||
| 	}); | ||||
| 	for (let i = 0; i < chain.length; i++) { | ||||
| 		const f = chain[i]; | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		output = output.then(f); | ||||
| 	} | ||||
| 	return output; | ||||
|   | ||||
| @@ -49,6 +49,7 @@ describe('Registry', function() { | ||||
|  | ||||
| 		it('should sync if do wifi check is false', done => { | ||||
| 			void reg.scheduleSync(1, null, false) | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 				.then(() =>{ | ||||
| 					expect(sync.start).toHaveBeenCalled(); | ||||
| 					done(); | ||||
|   | ||||
| @@ -181,11 +181,13 @@ export default class ResourceFetcher extends BaseService { | ||||
|  | ||||
| 		fileApi | ||||
| 			.get(remoteResourceContentPath, { path: localResourceContentPath, target: 'file' }) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.then(async () => { | ||||
| 				await Resource.setLocalState(resource, { fetch_status: Resource.FETCH_STATUS_DONE }); | ||||
| 				this.logger().debug(`ResourceFetcher: Resource downloaded: ${resource.id}`); | ||||
| 				await completeDownload(true, localResourceContentPath); | ||||
| 			}) | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			.catch(async (error: any) => { | ||||
| 				this.logger().error(`ResourceFetcher: Could not download resource: ${resource.id}`, error); | ||||
| 				await Resource.setLocalState(resource, { fetch_status: Resource.FETCH_STATUS_ERROR, fetch_error: error.message }); | ||||
|   | ||||
| @@ -77,6 +77,7 @@ export default async function populateDatabase(db: any, options: Options = null) | ||||
| 	let tagBatch = []; | ||||
| 	for (let i = 0; i < options.tagCount; i++) { | ||||
| 		const tagTitle = randomElement(wordList); // `tag${i}` | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		tagBatch.push(Tag.save({ title: tagTitle }, { dispatchUpdateAction: false }).then((savedTag: any) => { | ||||
| 			createdTagIds.push(savedTag.id); | ||||
| 			if (!options.silent) console.info(`Tags: ${i} / ${options.tagCount}`); | ||||
| @@ -99,6 +100,7 @@ export default async function populateDatabase(db: any, options: Options = null) | ||||
| 		const parentIndex = randomIndex(createdFolderIds); | ||||
| 		note.parent_id = createdFolderIds[parentIndex]; | ||||
|  | ||||
| 		// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 		noteBatch.push(Note.save(note, { dispatchUpdateAction: false }).then((savedNote: any) => { | ||||
| 			createdNoteIds.push(savedNote.id); | ||||
| 			console.info(`Notes: ${i} / ${options.noteCount}`); | ||||
|   | ||||
| @@ -36,6 +36,7 @@ export default class JoplinPlugins { | ||||
| 			// We don't use `await` when calling onStart because the plugin might be awaiting | ||||
| 			// in that call too (for example, when opening a dialog on startup) so we don't | ||||
| 			// want to get stuck here. | ||||
| 			// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			void script.onStart({}).catch((error: any) => { | ||||
| 				// For some reason, error thrown from the executed script do not have the type "Error" | ||||
| 				// but are instead plain object. So recreate the Error object here so that it can | ||||
| @@ -43,6 +44,7 @@ export default class JoplinPlugins { | ||||
| 				const newError: Error = new Error(error.message); | ||||
| 				newError.stack = error.stack; | ||||
| 				logger.error(`Uncaught exception in plugin "${this.plugin.id}":`, newError); | ||||
| 				// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 			}).then(() => { | ||||
| 				logger.info(`Finished running onStart handler: ${this.plugin.id} (Took ${Date.now() - startTime}ms)`); | ||||
| 				this.plugin.emit('started'); | ||||
|   | ||||
| @@ -502,7 +502,9 @@ function shimInit(options = null) { | ||||
| 				const cleanUpOnError = error => { | ||||
| 					// We ignore any unlink error as we only want to report on the main error | ||||
| 					fs.unlink(filePath) | ||||
| 					// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 						.catch(() => {}) | ||||
| 					// eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 						.then(() => { | ||||
| 							if (file) { | ||||
| 								file.close(() => { | ||||
|   | ||||
| @@ -71,6 +71,7 @@ async function main() { | ||||
| } | ||||
|  | ||||
| if (require.main === module) { | ||||
| // eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	main().catch((error) => { | ||||
| 		console.error('Fatal error'); | ||||
| 		console.error(error); | ||||
|   | ||||
| @@ -87,6 +87,7 @@ async function start(): Promise<void> { | ||||
| } | ||||
|  | ||||
| if (require.main === module) { | ||||
| // eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	start().catch((error) => { | ||||
| 		console.error('Fatal error'); | ||||
| 		console.error(error); | ||||
|   | ||||
| @@ -48,6 +48,7 @@ const main = async () => { | ||||
| }; | ||||
|  | ||||
| if (require.main === module) { | ||||
| // eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	main().catch((error) => { | ||||
| 		console.error(error); | ||||
| 		process.exit(1); | ||||
|   | ||||
| @@ -12,6 +12,7 @@ async function main() { | ||||
| } | ||||
|  | ||||
| if (require.main === module) { | ||||
| // eslint-disable-next-line promise/prefer-await-to-then -- Old code before rule was applied | ||||
| 	main().catch((error) => { | ||||
| 		console.error('Fatal error'); | ||||
| 		console.error(error); | ||||
|   | ||||
							
								
								
									
										10
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								yarn.lock
									
									
									
									
									
								
							| @@ -15287,6 +15287,15 @@ __metadata: | ||||
|   languageName: node | ||||
|   linkType: hard | ||||
| 
 | ||||
| "eslint-plugin-promise@npm:^6.0.1": | ||||
|   version: 6.0.1 | ||||
|   resolution: "eslint-plugin-promise@npm:6.0.1" | ||||
|   peerDependencies: | ||||
|     eslint: ^7.0.0 || ^8.0.0 | ||||
|   checksum: c1bb3c2e591787e97133dcaf764f908420a3a1959a3132e199db8f14d70dfa79fc9caf991ca60a4b60ae5f1f9823bc96c2e52304828a4278ef2f3964fe121de9 | ||||
|   languageName: node | ||||
|   linkType: hard | ||||
| 
 | ||||
| "eslint-plugin-promise@npm:~3.4.0": | ||||
|   version: 3.4.2 | ||||
|   resolution: "eslint-plugin-promise@npm:3.4.2" | ||||
| @@ -30008,6 +30017,7 @@ __metadata: | ||||
|     eslint: ^8.22.0 | ||||
|     eslint-interactive: ^10.0.0 | ||||
|     eslint-plugin-import: ^2.26.0 | ||||
|     eslint-plugin-promise: ^6.0.1 | ||||
|     eslint-plugin-react: ^7.30.1 | ||||
|     fs-extra: ^8.1.0 | ||||
|     glob: ^7.1.6 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user