CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
CompressionTable.js169 linesDownload Raw Back to util
1"use strict";2Object.defineProperty(exports, "__esModule", { value: true });3exports.CompressionTable = void 0;4const JsonPackExtension_1 = require("../JsonPackExtension");5const isSafeInteger = Number.isSafeInteger;6class CompressionTable {7    constructor() {8        this.integers = new Set();9        this.nonIntegers = new Set();10        this.table = [];11        this.map = new Map();12    }13    static create(value) {14        const table = new CompressionTable();15        table.walk(value);16        table.finalize();17        return table;18    }19    addInteger(int) {20        this.integers.add(int);21    }22    addLiteral(value) {23        if (isSafeInteger(value)) {24            this.addInteger(value);25            return;26        }27        this.nonIntegers.add(value);28    }29    walk(value) {30        switch (typeof value) {31            case 'object': {32                if (!value)33                    return this.addLiteral(null);34                const constructor = value.constructor;35                switch (constructor) {36                    case Object: {37                        const obj = value;38                        for (const key in obj) {39                            this.addLiteral(key);40                            this.walk(obj[key]);41                        }42                        break;43                    }44                    case Array: {45                        const arr = value;46                        const len = arr.length;47                        for (let i = 0; i < len; i++)48                            this.walk(arr[i]);49                        break;50                    }51                    case Map: {52                        const map = value;53                        map.forEach((value, key) => {54                            this.walk(key);55                            this.walk(value);56                        });57                        break;58                    }59                    case Set: {60                        const set = value;61                        set.forEach((value) => {62                            this.walk(value);63                        });64                        break;65                    }66                    case JsonPackExtension_1.JsonPackExtension: {67                        const ext = value;68                        this.addInteger(ext.tag);69                        this.walk(ext.val);70                    }71                }72                return;73            }74            default:75                return this.addLiteral(value);76        }77    }78    finalize() {79        const integers = Array.from(this.integers);80        integers.sort((a, b) => a - b);81        const len = integers.length;82        const table = this.table;83        const map = this.map;84        if (len > 0) {85            const first = integers[0];86            table.push(first);87            map.set(first, 0);88            let last = first;89            for (let i = 1; i < len; i++) {90                const int = integers[i];91                table.push(int - last);92                map.set(int, i);93                last = int;94            }95        }96        const nonIntegers = Array.from(this.nonIntegers);97        nonIntegers.sort();98        const lenNonIntegers = nonIntegers.length;99        for (let i = 0; i < lenNonIntegers; i++) {100            const value = nonIntegers[i];101            table.push(value);102            map.set(value, len + i);103        }104        this.integers.clear();105        this.nonIntegers.clear();106    }107    getIndex(value) {108        const index = this.map.get(value);109        if (index === undefined)110            throw new Error(`Value [${value}] not found in compression table.`);111        return index;112    }113    getTable() {114        return this.table;115    }116    compress(value) {117        switch (typeof value) {118            case 'object': {119                if (!value)120                    return this.getIndex(null);121                const constructor = value.constructor;122                switch (constructor) {123                    case Object: {124                        const obj = value;125                        const newObj = {};126                        for (const key in obj)127                            newObj[this.getIndex(key)] = this.compress(obj[key]);128                        return newObj;129                    }130                    case Array: {131                        const arr = value;132                        const newArr = [];133                        const len = arr.length;134                        for (let i = 0; i < len; i++)135                            newArr.push(this.compress(arr[i]));136                        return newArr;137                    }138                    case Map: {139                        const map = value;140                        const newMap = new Map();141                        map.forEach((value, key) => {142                            newMap.set(this.compress(key), this.compress(value));143                        });144                        return newMap;145                    }146                    case Set: {147                        const set = value;148                        const newSet = new Set();149                        set.forEach((value) => {150                            newSet.add(this.compress(value));151                        });152                        break;153                    }154                    case JsonPackExtension_1.JsonPackExtension: {155                        const ext = value;156                        const newExt = new JsonPackExtension_1.JsonPackExtension(this.getIndex(ext.tag), this.compress(ext.val));157                        return newExt;158                    }159                }160                throw new Error('UNEXPECTED_OBJECT');161            }162            default: {163                return this.getIndex(value);164            }165        }166    }167}168exports.CompressionTable = CompressionTable;169//# sourceMappingURL=CompressionTable.js.map
basant307/AI_Governance_Project · CoolFace