Attic is a cozy space with lofty ambitions.
attic.social
1// Copyright 2018-2026 the Deno authors. MIT license.
2/*!
3 * Adapted directly from negotiator at https://github.com/jshttp/negotiator/
4 * which is licensed as follows:
5 *
6 * (The MIT License)
7 *
8 * Copyright (c) 2012-2014 Federico Romero
9 * Copyright (c) 2012-2014 Isaac Z. Schlueter
10 * Copyright (c) 2014-2015 Douglas Christopher Wilson
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining
13 * a copy of this software and associated documentation files (the
14 * 'Software'), to deal in the Software without restriction, including
15 * without limitation the rights to use, copy, modify, merge, publish,
16 * distribute, sublicense, and/or sell copies of the Software, and to
17 * permit persons to whom the Software is furnished to do so, subject to
18 * the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be
21 * included in all copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
26 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
27 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
28 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
29 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 */
31
32export interface Specificity {
33 i: number;
34 o: number | undefined;
35 q: number;
36 s: number | undefined;
37}
38
39export function compareSpecs(a: Specificity, b: Specificity): number {
40 return (
41 b.q - a.q ||
42 (b.s ?? 0) - (a.s ?? 0) ||
43 (a.o ?? 0) - (b.o ?? 0) ||
44 a.i - b.i ||
45 0
46 );
47}
48
49export function isQuality(spec: Specificity): boolean {
50 return spec.q > 0;
51}