| 1 | "use strict";
|
|---|
| 2 |
|
|---|
| 3 | Object.defineProperty(exports, "__esModule", {
|
|---|
| 4 | value: true
|
|---|
| 5 | });
|
|---|
| 6 | exports.InternSet = exports.InternMap = void 0;
|
|---|
| 7 | class InternMap extends Map {
|
|---|
| 8 | constructor(entries, key = keyof) {
|
|---|
| 9 | super();
|
|---|
| 10 | Object.defineProperties(this, {
|
|---|
| 11 | _intern: {
|
|---|
| 12 | value: new Map()
|
|---|
| 13 | },
|
|---|
| 14 | _key: {
|
|---|
| 15 | value: key
|
|---|
| 16 | }
|
|---|
| 17 | });
|
|---|
| 18 | if (entries != null) for (const [key, value] of entries) this.set(key, value);
|
|---|
| 19 | }
|
|---|
| 20 | get(key) {
|
|---|
| 21 | return super.get(intern_get(this, key));
|
|---|
| 22 | }
|
|---|
| 23 | has(key) {
|
|---|
| 24 | return super.has(intern_get(this, key));
|
|---|
| 25 | }
|
|---|
| 26 | set(key, value) {
|
|---|
| 27 | return super.set(intern_set(this, key), value);
|
|---|
| 28 | }
|
|---|
| 29 | delete(key) {
|
|---|
| 30 | return super.delete(intern_delete(this, key));
|
|---|
| 31 | }
|
|---|
| 32 | }
|
|---|
| 33 | exports.InternMap = InternMap;
|
|---|
| 34 | class InternSet extends Set {
|
|---|
| 35 | constructor(values, key = keyof) {
|
|---|
| 36 | super();
|
|---|
| 37 | Object.defineProperties(this, {
|
|---|
| 38 | _intern: {
|
|---|
| 39 | value: new Map()
|
|---|
| 40 | },
|
|---|
| 41 | _key: {
|
|---|
| 42 | value: key
|
|---|
| 43 | }
|
|---|
| 44 | });
|
|---|
| 45 | if (values != null) for (const value of values) this.add(value);
|
|---|
| 46 | }
|
|---|
| 47 | has(value) {
|
|---|
| 48 | return super.has(intern_get(this, value));
|
|---|
| 49 | }
|
|---|
| 50 | add(value) {
|
|---|
| 51 | return super.add(intern_set(this, value));
|
|---|
| 52 | }
|
|---|
| 53 | delete(value) {
|
|---|
| 54 | return super.delete(intern_delete(this, value));
|
|---|
| 55 | }
|
|---|
| 56 | }
|
|---|
| 57 | exports.InternSet = InternSet;
|
|---|
| 58 | function intern_get({
|
|---|
| 59 | _intern,
|
|---|
| 60 | _key
|
|---|
| 61 | }, value) {
|
|---|
| 62 | const key = _key(value);
|
|---|
| 63 | return _intern.has(key) ? _intern.get(key) : value;
|
|---|
| 64 | }
|
|---|
| 65 | function intern_set({
|
|---|
| 66 | _intern,
|
|---|
| 67 | _key
|
|---|
| 68 | }, value) {
|
|---|
| 69 | const key = _key(value);
|
|---|
| 70 | if (_intern.has(key)) return _intern.get(key);
|
|---|
| 71 | _intern.set(key, value);
|
|---|
| 72 | return value;
|
|---|
| 73 | }
|
|---|
| 74 | function intern_delete({
|
|---|
| 75 | _intern,
|
|---|
| 76 | _key
|
|---|
| 77 | }, value) {
|
|---|
| 78 | const key = _key(value);
|
|---|
| 79 | if (_intern.has(key)) {
|
|---|
| 80 | value = _intern.get(key);
|
|---|
| 81 | _intern.delete(key);
|
|---|
| 82 | }
|
|---|
| 83 | return value;
|
|---|
| 84 | }
|
|---|
| 85 | function keyof(value) {
|
|---|
| 86 | return value !== null && typeof value === "object" ? value.valueOf() : value;
|
|---|
| 87 | } |
|---|