final public static function findAll(Api\Client $client, array $criteria = []) : Api\Collection
    {
        $filters = [
            'format' => [
                [
                    'in',
                    [
                        'comic', 'hardcover', 'trade paperback', 'magazine', 'digest',
                        'graphic novel', 'digital comic', 'infinite comic',
                    ]
                ],
            ],
            'formatType' => [['in', ['comic', 'collection']]],
            'noVariants' => [['bool'], ['bool-convert']],
            'dateDescriptor' => [['in', ['lastWeek', 'thisWeek', 'nextWeek', 'thisMonth']]],
            'fromDate' => [['date', true]],
            'toDate' => [['date', true]],
            'hasDigitalIssue' => [['bool'], ['bool-convert']],
            'modifiedSince' => [['date', true], ['date-format', 'c']],
            'creators' => [['ofScalars', [['uint']]], ['implode', ',']],
            'characters' => [['ofScalars', [['uint']]], ['implode', ',']],
            'series' => [['ofScalars', [['uint']]], ['implode', ',']],
            'events' => [['ofScalars', [['uint']]], ['implode', ',']],
            'stories' => [['ofScalars', [['uint']]], ['implode', ',']],
            'sharedAppearances' => [['ofScalars', [['uint']]], ['implode', ',']],
            'collaborators' => [['ofScalars', [['uint']]], ['implode', ',']],
            'orderBy' => [
                [
                    'in',
                    [
                        'focDate', 'onsaleDate', 'title', 'issueNumber', 'modified',
                        '-focDate', '-onsaleDate', '-title', '-issueNumber', '-modified',
                    ],
                ]
            ],

        ];

        list($success, $filteredCriteria, $error) = Api\Filterer::filter($filters, $criteria);
        Util::ensure(true, $success, $error);
        $toDate = Util\Arrays::get($filteredCriteria, 'toDate');
        $fromDate = Util\Arrays::get($filteredCriteria, 'fromDate');
        if ($toDate !== null && $fromDate !== null) {
            unset($filteredCriteria['toDate'], $filteredCriteria['fromDate']);
            $filteredCriteria['dateRange'] = "{$fromDate->format('c')},{$toDate->format('c')}";
        }

        return new Api\Collection($client, self::API_RESOURCE, $filteredCriteria);
    }