Attic is a cozy space with lofty ambitions. attic.social
at main 51 lines 1.8 kB view raw
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}