diff options
Diffstat (limited to 'static/lib-utils.ts')
-rw-r--r-- | static/lib-utils.ts | 101 |
1 files changed, 55 insertions, 46 deletions
diff --git a/static/lib-utils.ts b/static/lib-utils.ts index 8e587b961..818585bcb 100644 --- a/static/lib-utils.ts +++ b/static/lib-utils.ts @@ -1,55 +1,64 @@ -import _ from 'underscore'; -const options = require('./options').options; +// Copyright (c) 2021, Compiler Explorer Authors +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. -export class LibUtils { - private copyAndFilterLibraries(allLibraries, filter) { - const filterLibAndVersion = _.map(filter, (lib) => { - const match = lib.match(/([\w-]*)\.([\w-]*)/i); - if (match) { - return { - id: match[1], - version: match[2], - }; - } else { - return { - id: lib, - version: false, - }; - } - }); - - const filterLibIds = new Set(); - _.each(filterLibAndVersion, (lib) => { - filterLibIds.add(lib.id); - }); +import { options } from './options'; +import {LanguageLibs, Library} from './options.interfaces'; - const copiedLibraries = {}; - _.each(allLibraries, (lib, libid) => { - if (!filterLibIds.has(libid)) return; +const LIB_MATCH_RE = /([\w-]*)\.([\w-]*)/i; - const libcopy = Object.assign({}, lib); - libcopy.versions = _.omit(lib.versions, (version, versionid) => { - for (const filter of filterLibAndVersion) { - if (filter.id === libid) { - if (!filter.version) return false; - if (filter.version === versionid) return false; - } - } +export function copyAndFilterLibraries(allLibraries: LanguageLibs, filter: string[]) { + const filterLibAndVersion = filter.map(lib => { + const match = lib.match(LIB_MATCH_RE); + return { + id: match ? match[1] : lib, + version: match ? match[2] : false + }; + }); - return true; - }); + const filterLibIds = new Set(filterLibAndVersion.map(lib => lib.id)); - copiedLibraries[libid] = libcopy; - }); - - return copiedLibraries; + const copiedLibraries: Record<string, Library> = {}; + for (let libid in allLibraries) { + if (!filterLibIds.has(libid)) continue; + const lib = {...allLibraries[libid]}; + for (let versionid in lib.versions) { + for (const filter of filterLibAndVersion) { + if (!(!filter.version || filter.version === versionid)) { + delete filterLibAndVersion[versionid]; + } + } + } + copiedLibraries[libid] = lib; } - public getSupportedLibraries(supportedLibrariesArr, langId) { - const allLibs = options.libs[langId]; - if (supportedLibrariesArr && supportedLibrariesArr.length > 0) { - return this.copyAndFilterLibraries(allLibs, supportedLibrariesArr); - } - return allLibs; + return copiedLibraries; +} + +export function getSupportedLibraries(supportedLibrariesArr: string[], langId: string) { + const allLibs = options.libs[langId]; + if (supportedLibrariesArr && supportedLibrariesArr.length > 0) { + return copyAndFilterLibraries(allLibs, supportedLibrariesArr); } + return allLibs; } |