groupRecordsForFindMany( store, snapshots ) {
		const snapshotsByType = new Map();

		// group snapshots by type
		for ( const snapshot of snapshots ) {
			const { type } = snapshot;
			let snapshotGroup = snapshotsByType.get( type );
			if ( !snapshotGroup ) {
				snapshotGroup = [];
				snapshotsByType.set( type, snapshotGroup );
			}
			snapshotGroup.push( snapshot );
		}

		// build request groups
		const groups = [];
		for ( const [ type, snapshotGroup ] of snapshotsByType ) {
			const adapter = store.adapterFor( type.modelName );
			const {
				maxURLLength,
				findIdParam,
				findIdMax,
				findIdSeparator
			} = adapter;

			const baseLength = adapter._buildURL( type ).length;
			const paramName = findIdParam || store.serializerFor( type.modelName ).primaryKey;
			const paramNameLength = paramName.length;
			const findIdSeparatorLength = findIdSeparator?.length || 0;

			let group = [];
			let length = baseLength;

			for ( const snapshot of snapshotGroup ) {
				length += group.length === 0 || findIdSeparatorLength === 0
					// ${url}?${paramName}=${id1} ... &${paramName}=${id2}
					? 2 + paramNameLength
					// ${url}?${paramName}=${id1} ... ${findIdSeparator}${id2}
					: findIdSeparatorLength;
				length += String( snapshot.record.id ).length;

				if ( length <= maxURLLength && group.length < findIdMax ) {
					group.push( snapshot );
				} else {
					groups.push( group );
					group = [ snapshot ];
					length = baseLength;
				}
			}

			if ( group.length ) {
				groups.push( group );
			}
		}

		return groups;
	}
@param {DS.Store} store
@param {DS.Snapshot[]} snapshots
@return {Array<Array<DS.Snapshot>>}