@pubtech-ai/core 2.0.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/GVL.d.ts +1 -1
- package/lib/cjs/GVL.js +1 -1
- package/lib/cjs/TCModel.d.ts +2 -2
- package/lib/cjs/encoder/field/PurposeRestrictionVectorEncoder.js +1 -1
- package/lib/cjs/encoder/field/index.js +1 -1
- package/lib/cjs/encoder/index.js +1 -1
- package/lib/cjs/encoder/sequence/index.js +1 -1
- package/lib/cjs/errors/index.js +1 -1
- package/lib/cjs/index.js +1 -1
- package/lib/cjs/model/KeyMap.d.ts +1 -1
- package/lib/cjs/model/PurposeRestrictionVector.d.ts +1 -2
- package/lib/cjs/model/PurposeRestrictionVector.js +1 -1
- package/lib/cjs/model/Vector.d.ts +2 -2
- package/lib/cjs/model/Vector.js +1 -1
- package/lib/cjs/model/gvl/Feature.d.ts +1 -1
- package/lib/cjs/model/gvl/IDSetMap.d.ts +1 -1
- package/lib/cjs/model/gvl/Purpose.d.ts +1 -1
- package/lib/cjs/model/gvl/Vendor.d.ts +1 -1
- package/lib/cjs/model/gvl/index.js +1 -1
- package/lib/cjs/model/index.js +1 -1
- package/lib/mjs/GVL.d.ts +1 -1
- package/lib/mjs/GVL.js +3 -3
- package/lib/mjs/TCModel.d.ts +2 -2
- package/lib/mjs/encoder/field/PurposeRestrictionVectorEncoder.js +12 -11
- package/lib/mjs/model/KeyMap.d.ts +1 -1
- package/lib/mjs/model/PurposeRestrictionVector.d.ts +1 -2
- package/lib/mjs/model/PurposeRestrictionVector.js +38 -35
- package/lib/mjs/model/Vector.d.ts +2 -2
- package/lib/mjs/model/gvl/Feature.d.ts +1 -1
- package/lib/mjs/model/gvl/Feature.js +1 -0
- package/lib/mjs/model/gvl/IDSetMap.d.ts +1 -1
- package/lib/mjs/model/gvl/Purpose.d.ts +1 -1
- package/lib/mjs/model/gvl/Vendor.d.ts +1 -1
- package/package.json +5 -5
package/lib/cjs/GVL.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Cloneable } from './Cloneable.js';
|
|
|
2
2
|
import { GVLError } from './errors/index.js';
|
|
3
3
|
import { ConsentLanguages, IntMap } from './model/index.js';
|
|
4
4
|
import { Feature, Purpose, Stack, Vendor, VendorList, DataCategory } from './model/gvl/index.js';
|
|
5
|
-
export
|
|
5
|
+
export type VersionOrVendorList = string | number | VendorList;
|
|
6
6
|
/**
|
|
7
7
|
* class with utilities for managing the global vendor list. Will use JSON to
|
|
8
8
|
* fetch the vendor list from specified url and will serialize it into this
|
package/lib/cjs/GVL.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __extends=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),__awaiter=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(s,o){function i(e){try{u(n.next(e))}catch(e){o(e)}}function a(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},__generator=this&&this.__generator||function(e,t){var r,n,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(
|
|
1
|
+
"use strict";var __extends=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),__awaiter=this&&this.__awaiter||function(e,t,r,n){return new(r||(r=Promise))((function(s,o){function i(e){try{u(n.next(e))}catch(e){o(e)}}function a(e){try{u(n.throw(e))}catch(e){o(e)}}function u(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,a)}u((n=n.apply(e,t||[])).next())}))},__generator=this&&this.__generator||function(e,t){var r,n,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,a[0]&&(i=0)),i;)try{if(r=1,n&&(s=2&a[0]?n.return:a[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,a[1])).done)return s;switch(n=0,s&&(a=[2&a[0],s.value]),a[0]){case 0:case 1:s=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,n=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(s=i.trys,(s=s.length>0&&s[s.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!s||a[1]>s[0]&&a[1]<s[3])){i.label=a[1];break}if(6===a[0]&&i.label<s[1]){i.label=s[1],s=a;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(a);break}s[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],n=0}finally{r=s=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.GVL=void 0;var Cloneable_js_1=require("./Cloneable.js"),index_js_1=require("./errors/index.js"),Json_js_1=require("./Json.js"),index_js_2=require("./model/index.js"),GVL=function(e){function t(r){var n=e.call(this)||this;n.isReady_=!1,n.isLatest=!1;var s=t.baseUrl;if(n.lang_=t.DEFAULT_LANGUAGE,n.cacheLang_=t.DEFAULT_LANGUAGE,n.isVendorList(r))n.populate(r),n.readyPromise=Promise.resolve();else{if(!s)throw new index_js_1.GVLError("must specify GVL.baseUrl before loading GVL json");if(r>0){var o=r;t.CACHE.has(o)?(n.populate(t.CACHE.get(o)),n.readyPromise=Promise.resolve()):(s+=t.versionedFilename.replace("[VERSION]",String(o)),n.readyPromise=n.fetchJson(s))}else t.CACHE.has(t.LATEST_CACHE_KEY)?(n.populate(t.CACHE.get(t.LATEST_CACHE_KEY)),n.readyPromise=Promise.resolve()):(n.isLatest=!0,n.readyPromise=n.fetchJson(s+t.latestFilename))}return n}return __extends(t,e),Object.defineProperty(t,"baseUrl",{get:function(){return this.baseUrl_},set:function(e){if(/^https?:\/\/vendorlist\.consensu\.org\//.test(e))throw new index_js_1.GVLError("Invalid baseUrl! You may not pull directly from vendorlist.consensu.org and must provide your own cache");e.length>0&&"/"!==e[e.length-1]&&(e+="/"),this.baseUrl_=e},enumerable:!1,configurable:!0}),t.emptyLanguageCache=function(e){var r=!1;return null==e&&t.LANGUAGE_CACHE.size>0?(t.LANGUAGE_CACHE=new Map,r=!0):"string"==typeof e&&this.consentLanguages.has(e.toUpperCase())&&(t.LANGUAGE_CACHE.delete(e.toUpperCase()),r=!0),r},t.emptyCache=function(e){var r=!1;return Number.isInteger(e)&&e>=0?(t.CACHE.delete(e),r=!0):void 0===e&&(t.CACHE=new Map,r=!0),r},t.prototype.cacheLanguage=function(){t.LANGUAGE_CACHE.has(this.cacheLang_)||t.LANGUAGE_CACHE.set(this.cacheLang_,{purposes:this.purposes,specialPurposes:this.specialPurposes,features:this.features,specialFeatures:this.specialFeatures,stacks:this.stacks,dataCategories:this.dataCategories})},t.prototype.fetchJson=function(e){return __awaiter(this,void 0,void 0,(function(){var t,r;return __generator(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),t=this.populate,[4,Json_js_1.Json.fetch(e)];case 1:return t.apply(this,[n.sent()]),[3,3];case 2:throw r=n.sent(),new index_js_1.GVLError(r.message);case 3:return[2]}}))}))},t.prototype.getJson=function(){return{gvlSpecificationVersion:this.gvlSpecificationVersion,vendorListVersion:this.vendorListVersion,tcfPolicyVersion:this.tcfPolicyVersion,lastUpdated:this.lastUpdated,purposes:this.purposes,specialPurposes:this.specialPurposes,features:this.features,specialFeatures:this.specialFeatures,stacks:this.stacks,dataCategories:this.dataCategories,vendors:this.fullVendorList}},t.prototype.changeLanguage=function(e){return __awaiter(this,void 0,void 0,(function(){var r,n,s,o,i,a;return __generator(this,(function(u){switch(u.label){case 0:r=e;try{r=t.consentLanguages.parseLanguage(e)}catch(e){throw new index_js_1.GVLError("Error during parsing the language: "+e.message)}if(n=e.toUpperCase(),r.toLowerCase()===t.DEFAULT_LANGUAGE.toLowerCase()&&!t.LANGUAGE_CACHE.has(n))return[2];if(r===this.lang_)return[3,5];if(this.lang_=r,!t.LANGUAGE_CACHE.has(n))return[3,1];for(o in s=t.LANGUAGE_CACHE.get(n))s.hasOwnProperty(o)&&(this[o]=s[o]);return[3,5];case 1:i=t.baseUrl+t.languageFilename.replace("[LANG]",this.lang_.toLowerCase()),u.label=2;case 2:return u.trys.push([2,4,,5]),[4,this.fetchJson(i)];case 3:return u.sent(),this.cacheLang_=n,this.cacheLanguage(),[3,5];case 4:throw a=u.sent(),new index_js_1.GVLError("unable to load language: "+a.message);case 5:return[2]}}))}))},Object.defineProperty(t.prototype,"language",{get:function(){return this.lang_},enumerable:!1,configurable:!0}),t.prototype.isVendorList=function(e){return void 0!==e&&void 0!==e.vendors},t.prototype.populate=function(e){this.purposes=e.purposes,this.specialPurposes=e.specialPurposes,this.features=e.features,this.specialFeatures=e.specialFeatures,this.stacks=e.stacks,this.dataCategories=e.dataCategories,this.isVendorList(e)&&(this.gvlSpecificationVersion=e.gvlSpecificationVersion,this.tcfPolicyVersion=e.tcfPolicyVersion,this.vendorListVersion=e.vendorListVersion,this.lastUpdated=e.lastUpdated,"string"==typeof this.lastUpdated&&(this.lastUpdated=new Date(this.lastUpdated)),this.vendors_=e.vendors,this.fullVendorList=e.vendors,this.mapVendors(),this.isReady_=!0,this.isLatest&&t.CACHE.set(t.LATEST_CACHE_KEY,this.getJson()),t.CACHE.has(this.vendorListVersion)||t.CACHE.set(this.vendorListVersion,this.getJson())),this.cacheLanguage()},t.prototype.mapVendors=function(e){var t=this;this.byPurposeVendorMap={},this.bySpecialPurposeVendorMap={},this.byFeatureVendorMap={},this.bySpecialFeatureVendorMap={},Object.keys(this.purposes).forEach((function(e){t.byPurposeVendorMap[e]={legInt:new Set,consent:new Set,flexible:new Set}})),Object.keys(this.specialPurposes).forEach((function(e){t.bySpecialPurposeVendorMap[e]=new Set})),Object.keys(this.features).forEach((function(e){t.byFeatureVendorMap[e]=new Set})),Object.keys(this.specialFeatures).forEach((function(e){t.bySpecialFeatureVendorMap[e]=new Set})),Array.isArray(e)||(e=Object.keys(this.fullVendorList).map((function(e){return+e}))),this.vendorIds=new Set(e),this.vendors_=e.reduce((function(e,r){var n=t.vendors_[String(r)];return n&&void 0===n.deletedDate&&(n.purposes.forEach((function(e){t.byPurposeVendorMap[String(e)].consent.add(r)})),n.specialPurposes.forEach((function(e){t.bySpecialPurposeVendorMap[String(e)].add(r)})),n.legIntPurposes.forEach((function(e){t.byPurposeVendorMap[String(e)].legInt.add(r)})),n.flexiblePurposes&&n.flexiblePurposes.forEach((function(e){t.byPurposeVendorMap[String(e)].flexible.add(r)})),n.features.forEach((function(e){t.byFeatureVendorMap[String(e)].add(r)})),n.specialFeatures.forEach((function(e){t.bySpecialFeatureVendorMap[String(e)].add(r)})),e[r]=n),e}),{})},t.prototype.getFilteredVendors=function(e,t,r,n){var s=this,o=e.charAt(0).toUpperCase()+e.slice(1),i={};return("purpose"===e&&r?this["by"+o+"VendorMap"][String(t)][r]:this["by"+(n?"Special":"")+o+"VendorMap"][String(t)]).forEach((function(e){i[String(e)]=s.vendors[String(e)]})),i},t.prototype.getVendorsWithConsentPurpose=function(e){return this.getFilteredVendors("purpose",e,"consent")},t.prototype.getVendorsWithLegIntPurpose=function(e){return this.getFilteredVendors("purpose",e,"legInt")},t.prototype.getVendorsWithFlexiblePurpose=function(e){return this.getFilteredVendors("purpose",e,"flexible")},t.prototype.getVendorsWithSpecialPurpose=function(e){return this.getFilteredVendors("purpose",e,void 0,!0)},t.prototype.getVendorsWithFeature=function(e){return this.getFilteredVendors("feature",e)},t.prototype.getVendorsWithSpecialFeature=function(e){return this.getFilteredVendors("feature",e,void 0,!0)},Object.defineProperty(t.prototype,"vendors",{get:function(){return this.vendors_},enumerable:!1,configurable:!0}),t.prototype.narrowVendorsTo=function(e){this.mapVendors(e)},Object.defineProperty(t.prototype,"isReady",{get:function(){return this.isReady_},enumerable:!1,configurable:!0}),t.prototype.clone=function(){var e=new t(JSON.parse(JSON.stringify(this.getJson())));return this.lang_!==t.DEFAULT_LANGUAGE&&e.changeLanguage(this.lang_),e},t.isInstanceOf=function(e){return"object"==typeof e&&"function"==typeof e.narrowVendorsTo},t.LANGUAGE_CACHE=new Map,t.CACHE=new Map,t.LATEST_CACHE_KEY=0,t.DEFAULT_LANGUAGE="EN",t.consentLanguages=new index_js_2.ConsentLanguages,t.latestFilename="vendor-list.json",t.versionedFilename="archives/vendor-list-v[VERSION].json",t.languageFilename="purposes-[LANG].json",t}(Cloneable_js_1.Cloneable);exports.GVL=GVL;
|
package/lib/cjs/TCModel.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { Cloneable } from './Cloneable.js';
|
|
|
2
2
|
import { GVL } from './GVL.js';
|
|
3
3
|
import { ConsentLanguages, IntMap, PurposeRestrictionVector, Vector } from './model/index.js';
|
|
4
4
|
import { Purpose } from './model/gvl/index.js';
|
|
5
|
-
|
|
6
|
-
export
|
|
5
|
+
type StringOrNumber = number | string;
|
|
6
|
+
export type TCModelPropType = number | Date | string | boolean | Vector | PurposeRestrictionVector;
|
|
7
7
|
export declare class TCModel extends Cloneable<TCModel> {
|
|
8
8
|
/**
|
|
9
9
|
* Set of available consent languages published by the IAB
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PurposeRestrictionVectorEncoder=void 0;var BitLength_js_1=require("../BitLength.js"),BooleanEncoder_js_1=require("./BooleanEncoder.js"),index_js_1=require("../../errors/index.js"),IntEncoder_js_1=require("./IntEncoder.js"),index_js_2=require("../../model/index.js"),PurposeRestrictionVectorEncoder=function(){function e(){}return e.encode=function(e){var n=IntEncoder_js_1.IntEncoder.encode(e.numRestrictions,BitLength_js_1.BitLength.numRestrictions);if(!e.isEmpty()){var t=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PurposeRestrictionVectorEncoder=void 0;var BitLength_js_1=require("../BitLength.js"),BooleanEncoder_js_1=require("./BooleanEncoder.js"),index_js_1=require("../../errors/index.js"),IntEncoder_js_1=require("./IntEncoder.js"),index_js_2=require("../../model/index.js"),PurposeRestrictionVectorEncoder=function(){function e(){}return e.encode=function(e){var n=IntEncoder_js_1.IntEncoder.encode(e.numRestrictions,BitLength_js_1.BitLength.numRestrictions);if(!e.isEmpty()){var t=function(n,t){for(var r=n+1;r<=t;r++)if(e.gvl.vendorIds.has(r))return r;return n};e.getRestrictions().forEach((function(r){n+=IntEncoder_js_1.IntEncoder.encode(r.purposeId,BitLength_js_1.BitLength.purposeId),n+=IntEncoder_js_1.IntEncoder.encode(r.restrictionType,BitLength_js_1.BitLength.restrictionType);for(var o=e.getVendors(r),i=o.length,s=0,d=0,_="",c=0;c<i;c++){var B=o[c];if(0===d&&(s++,d=B),c===i-1||o[c+1]>t(B,o[i-1])){var g=!(B===d);_+=BooleanEncoder_js_1.BooleanEncoder.encode(g),_+=IntEncoder_js_1.IntEncoder.encode(d,BitLength_js_1.BitLength.vendorId),g&&(_+=IntEncoder_js_1.IntEncoder.encode(B,BitLength_js_1.BitLength.vendorId)),d=0}}n+=IntEncoder_js_1.IntEncoder.encode(s,BitLength_js_1.BitLength.numEntries),n+=_}))}return n},e.decode=function(e){var n=0,t=new index_js_2.PurposeRestrictionVector,r=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.numRestrictions),BitLength_js_1.BitLength.numRestrictions);n+=BitLength_js_1.BitLength.numRestrictions;for(var o=0;o<r;o++){var i=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.purposeId),BitLength_js_1.BitLength.purposeId);n+=BitLength_js_1.BitLength.purposeId;var s=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.restrictionType),BitLength_js_1.BitLength.restrictionType);n+=BitLength_js_1.BitLength.restrictionType;var d=new index_js_2.PurposeRestriction(i,s),_=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.numEntries),BitLength_js_1.BitLength.numEntries);n+=BitLength_js_1.BitLength.numEntries;for(var c=0;c<_;c++){var B=BooleanEncoder_js_1.BooleanEncoder.decode(e.substr(n,BitLength_js_1.BitLength.anyBoolean));n+=BitLength_js_1.BitLength.anyBoolean;var g=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.vendorId),BitLength_js_1.BitLength.vendorId);if(n+=BitLength_js_1.BitLength.vendorId,B){var h=IntEncoder_js_1.IntEncoder.decode(e.substr(n,BitLength_js_1.BitLength.vendorId),BitLength_js_1.BitLength.vendorId);if(n+=BitLength_js_1.BitLength.vendorId,h<g)throw new index_js_1.DecodingError("Invalid RangeEntry: endVendorId ".concat(h," is less than ").concat(g));for(var L=g;L<=h;L++)t.add(L,d)}else t.add(g,d)}}return t.bitLength=n,t},e}();exports.PurposeRestrictionVectorEncoder=PurposeRestrictionVectorEncoder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var i=Object.getOwnPropertyDescriptor(r,t);i&&!("get"in i?!r.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,i)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./BooleanEncoder.js"),exports),__exportStar(require("./DateEncoder.js"),exports),__exportStar(require("./FieldEncoderMap.js"),exports),__exportStar(require("./FixedVectorEncoder.js"),exports),__exportStar(require("./IntEncoder.js"),exports),__exportStar(require("./LangEncoder.js"),exports),__exportStar(require("./PurposeRestrictionVectorEncoder.js"),exports),__exportStar(require("./VectorEncodingType.js"),exports),__exportStar(require("./VendorVectorEncoder.js"),exports);
|
package/lib/cjs/encoder/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,i,o)}:function(e,r,t,i){void 0===i&&(i=t),e[i]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./Base64Url.js"),exports),__exportStar(require("./BitLength.js"),exports),__exportStar(require("./EncodingOptions.js"),exports),__exportStar(require("./SegmentEncoder.js"),exports),__exportStar(require("./SemanticPreEncoder.js"),exports),__exportStar(require("./field/index.js"),exports),__exportStar(require("./sequence/index.js"),exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./FieldSequence.js"),exports),__exportStar(require("./SegmentSequence.js"),exports),__exportStar(require("./SequenceVersionMap.js"),exports);
|
package/lib/cjs/errors/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(r,e,t,o){void 0===o&&(o=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(r,e,t,o){void 0===o&&(o=t);var i=Object.getOwnPropertyDescriptor(e,t);i&&!("get"in i?!e.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,o,i)}:function(r,e,t,o){void 0===o&&(o=t),r[o]=e[t]}),__exportStar=this&&this.__exportStar||function(r,e){for(var t in r)"default"===t||Object.prototype.hasOwnProperty.call(e,t)||__createBinding(e,r,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./DecodingError.js"),exports),__exportStar(require("./EncodingError.js"),exports),__exportStar(require("./GVLError.js"),exports),__exportStar(require("./TCModelError.js"),exports);
|
package/lib/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var i=Object.getOwnPropertyDescriptor(r,t);i&&!("get"in i?!r.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,i)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./encoder/index.js"),exports),__exportStar(require("./errors/index.js"),exports),__exportStar(require("./model/index.js"),exports),__exportStar(require("./Cloneable.js"),exports),__exportStar(require("./GVL.js"),exports),__exportStar(require("./Json.js"),exports),__exportStar(require("./TCModel.js"),exports),__exportStar(require("./TCString.js"),exports);
|
|
@@ -28,10 +28,9 @@ export declare class PurposeRestrictionVector extends Cloneable<PurposeRestricti
|
|
|
28
28
|
* restrictPurposeToLegalBasis - adds all Vendors under a given Purpose Restriction
|
|
29
29
|
*
|
|
30
30
|
* @param {PurposeRestriction} purposeRestriction
|
|
31
|
-
* @param {number[]|null|undefined} vendorsIds
|
|
32
31
|
* @return {void}
|
|
33
32
|
*/
|
|
34
|
-
restrictPurposeToLegalBasis(purposeRestriction: PurposeRestriction
|
|
33
|
+
restrictPurposeToLegalBasis(purposeRestriction: PurposeRestriction): void;
|
|
35
34
|
/**
|
|
36
35
|
* getVendors - returns array of vendor ids optionally narrowed by a given
|
|
37
36
|
* Purpose Restriction. If no purpose restriction is passed then all vendor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __extends=this&&this.__extends||function(){var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(e,r)};return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function o(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(o.prototype=r.prototype,new o)}}(),
|
|
1
|
+
"use strict";var __extends=this&&this.__extends||function(){var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(e,r)};return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function o(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(o.prototype=r.prototype,new o)}}(),__read=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var o,s,i=r.call(t),n=[];try{for(;(void 0===e||e-- >0)&&!(o=i.next()).done;)n.push(o.value)}catch(t){s={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(s)throw s.error}}return n},__spreadArray=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var o,s=0,i=e.length;s<i;s++)!o&&s in e||(o||(o=Array.prototype.slice.call(e,0,s)),o[s]=e[s]);return t.concat(o||Array.prototype.slice.call(e))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PurposeRestrictionVector=void 0;var PurposeRestriction_js_1=require("./PurposeRestriction.js"),RestrictionType_js_1=require("./RestrictionType.js"),Cloneable_js_1=require("../Cloneable.js"),PurposeRestrictionVector=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.bitLength=0,e.map=new Map,e}return __extends(e,t),e.prototype.has=function(t){return this.map.has(t)},e.prototype.isOkToHave=function(t,e,r){var o,s=!0;if(null===(o=this.gvl)||void 0===o?void 0:o.vendors){var i=this.gvl.vendors[r];if(i)if(t===RestrictionType_js_1.RestrictionType.NOT_ALLOWED)s=i.legIntPurposes.includes(e)||i.purposes.includes(e);else if(i.flexiblePurposes.length)switch(t){case RestrictionType_js_1.RestrictionType.REQUIRE_CONSENT:s=i.flexiblePurposes.includes(e)&&i.legIntPurposes.includes(e);break;case RestrictionType_js_1.RestrictionType.REQUIRE_LI:s=i.flexiblePurposes.includes(e)&&i.purposes.includes(e)}else s=!1;else s=!1}return s},e.prototype.add=function(t,e){if(this.isOkToHave(e.restrictionType,e.purposeId,t)){var r=e.hash;this.has(r)||(this.map.set(r,new Set),this.bitLength=0),this.map.get(r).add(t)}},e.prototype.restrictPurposeToLegalBasis=function(t){var e=Array.from(this.gvl.vendorIds),r=t.hash,o=e[e.length-1],s=__spreadArray([],__read(Array(o).keys()),!1).map((function(t){return t+1}));if(this.has(r))for(var i=1;i<=o;i++)this.map.get(r).add(i);else this.map.set(r,new Set(s)),this.bitLength=0},e.prototype.getVendors=function(t){var e=[];if(t){var r=t.hash;this.has(r)&&(e=Array.from(this.map.get(r)))}else{var o=new Set;this.map.forEach((function(t){t.forEach((function(t){o.add(t)}))})),e=Array.from(o)}return e.sort((function(t,e){return t-e}))},e.prototype.getRestrictionType=function(t,e){var r;return this.getRestrictions(t).forEach((function(t){t.purposeId===e&&(void 0===r||r>t.restrictionType)&&(r=t.restrictionType)})),r},e.prototype.vendorHasRestriction=function(t,e){for(var r=!1,o=this.getRestrictions(t),s=0;s<o.length&&!r;s++)r=e.isSameAs(o[s]);return r},e.prototype.getMaxVendorId=function(){var t=0;return this.map.forEach((function(e){t=Math.max(Array.from(e)[e.size-1],t)})),t},e.prototype.getRestrictions=function(t){var e=[];return this.map.forEach((function(r,o){t?r.has(t)&&e.push(PurposeRestriction_js_1.PurposeRestriction.unHash(o)):e.push(PurposeRestriction_js_1.PurposeRestriction.unHash(o))})),e},e.prototype.getPurposes=function(){var t=new Set;return this.map.forEach((function(e,r){t.add(PurposeRestriction_js_1.PurposeRestriction.unHash(r).purposeId)})),Array.from(t)},e.prototype.remove=function(t,e){var r=e.hash,o=this.map.get(r);o&&(o.delete(t),0==o.size&&(this.map.delete(r),this.bitLength=0))},Object.defineProperty(e.prototype,"gvl",{get:function(){return this.gvl_},set:function(t){var e=this;this.gvl_||(this.gvl_=t,this.map.forEach((function(t,r){var o=PurposeRestriction_js_1.PurposeRestriction.unHash(r);Array.from(t).forEach((function(r){e.isOkToHave(o.restrictionType,o.purposeId,r)||t.delete(r)}))})))},enumerable:!1,configurable:!0}),e.prototype.isEmpty=function(){return 0===this.map.size},Object.defineProperty(e.prototype,"numRestrictions",{get:function(){return this.map.size},enumerable:!1,configurable:!0}),e}(Cloneable_js_1.Cloneable);exports.PurposeRestrictionVector=PurposeRestrictionVector;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Cloneable } from '../Cloneable.js';
|
|
2
2
|
import { IntMap } from './IntMap.js';
|
|
3
|
-
|
|
4
|
-
export
|
|
3
|
+
type SingleIDOrCollection = number | number[] | IntMap<unknown> | Set<number | string>;
|
|
4
|
+
export type IdBoolTuple = [number, boolean];
|
|
5
5
|
/**
|
|
6
6
|
* Vector class is like a Set except it keeps track of a max id
|
|
7
7
|
*/
|
package/lib/cjs/model/Vector.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __extends=this&&this.__extends||function(){var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(e,r)};return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),__generator=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(
|
|
1
|
+
"use strict";var __extends=this&&this.__extends||function(){var t=function(e,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(e,r)};return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=e}t(e,r),e.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),__generator=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Vector=void 0;var Cloneable_js_1=require("../Cloneable.js"),index_js_1=require("../errors/index.js"),Vector=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.bitLength=0,e.maxId_=0,e.set_=new Set,e}return __extends(e,t),e.prototype[Symbol.iterator]=function(){var t;return __generator(this,(function(e){switch(e.label){case 0:t=1,e.label=1;case 1:return t<=this.maxId?[4,[t,this.has(t)]]:[3,4];case 2:e.sent(),e.label=3;case 3:return t++,[3,1];case 4:return[2]}}))},e.prototype.values=function(){return this.set_.values()},Object.defineProperty(e.prototype,"maxId",{get:function(){return this.maxId_},enumerable:!1,configurable:!0}),e.prototype.has=function(t){return this.set_.has(t)},e.prototype.unset=function(t){var e=this;Array.isArray(t)?t.forEach((function(t){return e.unset(t)})):"object"==typeof t?this.unset(Object.keys(t).map((function(t){return Number(t)}))):(this.set_.delete(Number(t)),this.bitLength=0,t===this.maxId&&(this.maxId_=0,this.set_.forEach((function(t){e.maxId_=Math.max(e.maxId,t)}))))},e.prototype.isIntMap=function(t){var e=this,r="object"==typeof t;return r=r&&Object.keys(t).every((function(r){var n=Number.isInteger(parseInt(r,10));return n=(n=n&&e.isValidNumber(t[r].id))&&void 0!==t[r].name}))},e.prototype.isValidNumber=function(t){return parseInt(t,10)>0},e.prototype.isSet=function(t){var e=!1;return t instanceof Set&&(e=Array.from(t).every(this.isValidNumber)),e},e.prototype.set=function(t){var e=this;if(Array.isArray(t))t.forEach((function(t){return e.set(t)}));else if(this.isSet(t))this.set(Array.from(t));else if(this.isIntMap(t))this.set(Object.keys(t).map((function(t){return Number(t)})));else{if(!this.isValidNumber(t))throw new index_js_1.TCModelError("set()",t,"must be positive integer array, positive integer, Set<number>, or IntMap");this.set_.add(t),this.maxId_=Math.max(this.maxId,t),this.bitLength=0}},e.prototype.empty=function(){this.set_=new Set},e.prototype.forEach=function(t){for(var e=1;e<=this.maxId;e++)t(this.has(e),e)},Object.defineProperty(e.prototype,"size",{get:function(){return this.set_.size},enumerable:!1,configurable:!0}),e.prototype.setAll=function(t){this.set(t)},e}(Cloneable_js_1.Cloneable);exports.Vector=Vector;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IntMap } from '../IntMap.js';
|
|
2
|
-
export
|
|
2
|
+
export type IDSetMap = IntMap<Set<number>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var a=Object.getOwnPropertyDescriptor(r,t);a&&!("get"in a?!r.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,a)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./ByPurposeVendorMap.js"),exports),__exportStar(require("./Declarations.js"),exports),__exportStar(require("./Feature.js"),exports),__exportStar(require("./GVLMapItem.js"),exports),__exportStar(require("./IDSetMap.js"),exports),__exportStar(require("./Purpose.js"),exports),__exportStar(require("./Stack.js"),exports),__exportStar(require("./Vendor.js"),exports),__exportStar(require("./VendorList.js"),exports),__exportStar(require("./DataCategory.js"),exports);
|
package/lib/cjs/model/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t)
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var s=Object.getOwnPropertyDescriptor(r,t);s&&!("get"in s?!r.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,s)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./ConsentLanguages.js"),exports),__exportStar(require("./Fields.js"),exports),__exportStar(require("./IntMap.js"),exports),__exportStar(require("./KeyMap.js"),exports),__exportStar(require("./PurposeRestriction.js"),exports),__exportStar(require("./PurposeRestrictionVector.js"),exports),__exportStar(require("./DeviceDisclosureStorageAccessType.js"),exports),__exportStar(require("./DeviceDisclosure.js"),exports),__exportStar(require("./RestrictionType.js"),exports),__exportStar(require("./Segment.js"),exports),__exportStar(require("./SegmentIDs.js"),exports),__exportStar(require("./Vector.js"),exports),__exportStar(require("./gvl/index.js"),exports);
|
package/lib/mjs/GVL.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Cloneable } from './Cloneable.js';
|
|
|
2
2
|
import { GVLError } from './errors/index.js';
|
|
3
3
|
import { ConsentLanguages, IntMap } from './model/index.js';
|
|
4
4
|
import { Feature, Purpose, Stack, Vendor, VendorList, DataCategory } from './model/gvl/index.js';
|
|
5
|
-
export
|
|
5
|
+
export type VersionOrVendorList = string | number | VendorList;
|
|
6
6
|
/**
|
|
7
7
|
* class with utilities for managing the global vendor list. Will use JSON to
|
|
8
8
|
* fetch the vendor list from specified url and will serialize it into this
|
package/lib/mjs/GVL.js
CHANGED
|
@@ -305,7 +305,7 @@ export class GVL extends Cloneable {
|
|
|
305
305
|
* functionality and methods of this class.
|
|
306
306
|
*/
|
|
307
307
|
getJson() {
|
|
308
|
-
return
|
|
308
|
+
return {
|
|
309
309
|
gvlSpecificationVersion: this.gvlSpecificationVersion,
|
|
310
310
|
vendorListVersion: this.vendorListVersion,
|
|
311
311
|
tcfPolicyVersion: this.tcfPolicyVersion,
|
|
@@ -317,7 +317,7 @@ export class GVL extends Cloneable {
|
|
|
317
317
|
stacks: this.stacks,
|
|
318
318
|
dataCategories: this.dataCategories,
|
|
319
319
|
vendors: this.fullVendorList,
|
|
320
|
-
}
|
|
320
|
+
};
|
|
321
321
|
}
|
|
322
322
|
/**
|
|
323
323
|
* changeLanguage - retrieves the purpose language translation and sets the
|
|
@@ -577,7 +577,7 @@ export class GVL extends Cloneable {
|
|
|
577
577
|
* @return {GVL}
|
|
578
578
|
*/
|
|
579
579
|
clone() {
|
|
580
|
-
const result = new GVL(this.getJson());
|
|
580
|
+
const result = new GVL(JSON.parse(JSON.stringify(this.getJson())));
|
|
581
581
|
/*
|
|
582
582
|
* If the current language of the GVL is not the default language, we set the language of
|
|
583
583
|
* the clone to the current language since a new GVL is always created with the default
|
package/lib/mjs/TCModel.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { Cloneable } from './Cloneable.js';
|
|
|
2
2
|
import { GVL } from './GVL.js';
|
|
3
3
|
import { ConsentLanguages, IntMap, PurposeRestrictionVector, Vector } from './model/index.js';
|
|
4
4
|
import { Purpose } from './model/gvl/index.js';
|
|
5
|
-
|
|
6
|
-
export
|
|
5
|
+
type StringOrNumber = number | string;
|
|
6
|
+
export type TCModelPropType = number | Date | string | boolean | Vector | PurposeRestrictionVector;
|
|
7
7
|
export declare class TCModel extends Cloneable<TCModel> {
|
|
8
8
|
/**
|
|
9
9
|
* Set of available consent languages published by the IAB
|
|
@@ -9,12 +9,13 @@ export class PurposeRestrictionVectorEncoder {
|
|
|
9
9
|
let bitString = IntEncoder.encode(prVector.numRestrictions, BitLength.numRestrictions);
|
|
10
10
|
// if the vector is empty we'll just return a string with just the numRestricitons being 0
|
|
11
11
|
if (!prVector.isEmpty()) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
const nextGvlVendor = (vendorId, lastVendorId) => {
|
|
13
|
+
for (let nextId = vendorId + 1; nextId <= lastVendorId; nextId++) {
|
|
14
|
+
if (prVector.gvl.vendorIds.has(nextId)) {
|
|
15
|
+
return nextId;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return vendorId;
|
|
18
19
|
};
|
|
19
20
|
// create each restriction group
|
|
20
21
|
prVector.getRestrictions().forEach((purpRestriction) => {
|
|
@@ -40,7 +41,7 @@ export class PurposeRestrictionVectorEncoder {
|
|
|
40
41
|
/**
|
|
41
42
|
* either end of the loop or there are GVL vendor IDs before the next one
|
|
42
43
|
*/
|
|
43
|
-
if (i === len - 1 ||
|
|
44
|
+
if (i === len - 1 || vendors[i + 1] > nextGvlVendor(vendorId, vendors[len - 1])) {
|
|
44
45
|
/**
|
|
45
46
|
* it's a range entry if we've got something other than the start
|
|
46
47
|
* ID
|
|
@@ -93,12 +94,12 @@ export class PurposeRestrictionVectorEncoder {
|
|
|
93
94
|
if (endVendorId < startOrOnlyVendorId) {
|
|
94
95
|
throw new DecodingError(`Invalid RangeEntry: endVendorId ${endVendorId} is less than ${startOrOnlyVendorId}`);
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
for (let k = startOrOnlyVendorId; k <= endVendorId; k++) {
|
|
98
|
+
vector.add(k, purposeRestriction);
|
|
99
|
+
}
|
|
99
100
|
}
|
|
100
101
|
else {
|
|
101
|
-
vector.
|
|
102
|
+
vector.add(startOrOnlyVendorId, purposeRestriction);
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
}
|
|
@@ -28,10 +28,9 @@ export declare class PurposeRestrictionVector extends Cloneable<PurposeRestricti
|
|
|
28
28
|
* restrictPurposeToLegalBasis - adds all Vendors under a given Purpose Restriction
|
|
29
29
|
*
|
|
30
30
|
* @param {PurposeRestriction} purposeRestriction
|
|
31
|
-
* @param {number[]|null|undefined} vendorsIds
|
|
32
31
|
* @return {void}
|
|
33
32
|
*/
|
|
34
|
-
restrictPurposeToLegalBasis(purposeRestriction: PurposeRestriction
|
|
33
|
+
restrictPurposeToLegalBasis(purposeRestriction: PurposeRestriction): void;
|
|
35
34
|
/**
|
|
36
35
|
* getVendors - returns array of vendor ids optionally narrowed by a given
|
|
37
36
|
* Purpose Restriction. If no purpose restriction is passed then all vendor
|
|
@@ -38,10 +38,10 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
38
38
|
else if (vendor.flexiblePurposes.length) {
|
|
39
39
|
switch (restrictionType) {
|
|
40
40
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
* If the vendor has the purposeId in flexiblePurposes and it is
|
|
42
|
+
* listed as a legitimate interest purpose we can set the
|
|
43
|
+
* override to require consent.
|
|
44
|
+
*/
|
|
45
45
|
case RestrictionType.REQUIRE_CONSENT:
|
|
46
46
|
result = (vendor.flexiblePurposes.includes(purposeId) && vendor.legIntPurposes.includes(purposeId));
|
|
47
47
|
break;
|
|
@@ -93,24 +93,28 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
93
93
|
* restrictPurposeToLegalBasis - adds all Vendors under a given Purpose Restriction
|
|
94
94
|
*
|
|
95
95
|
* @param {PurposeRestriction} purposeRestriction
|
|
96
|
-
* @param {number[]|null|undefined} vendorsIds
|
|
97
96
|
* @return {void}
|
|
98
97
|
*/
|
|
99
|
-
restrictPurposeToLegalBasis(purposeRestriction
|
|
98
|
+
restrictPurposeToLegalBasis(purposeRestriction) {
|
|
99
|
+
const vendors = Array.from(this.gvl.vendorIds);
|
|
100
100
|
const hash = purposeRestriction.hash;
|
|
101
|
+
const lastEntry = vendors[vendors.length - 1];
|
|
102
|
+
/**
|
|
103
|
+
* Create an ordered array of vendor IDs from `1` (the minimum value for Vendor ID) to `lastEntry`
|
|
104
|
+
*/
|
|
105
|
+
const values = [...Array(lastEntry).keys()].map((i) => i + 1);
|
|
101
106
|
if (!this.has(hash)) {
|
|
102
|
-
this.map.set(hash, new Set(
|
|
107
|
+
this.map.set(hash, new Set(values)); // use static method `build` to create a `BST` from the ordered array of IDs
|
|
103
108
|
this.bitLength = 0;
|
|
104
109
|
}
|
|
105
110
|
else {
|
|
106
|
-
|
|
107
|
-
for (const vendorId of vendorsIds) {
|
|
111
|
+
for (let i = 1; i <= lastEntry; i++) {
|
|
108
112
|
/**
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
* Previously I had a check here to remove a duplicate value, but because
|
|
114
|
+
* we're using a tree the value is guaranteed to be unique so there is no
|
|
115
|
+
* need to add an additional de-duplication here.
|
|
116
|
+
*/
|
|
117
|
+
this.map.get(hash).add(i);
|
|
114
118
|
}
|
|
115
119
|
}
|
|
116
120
|
}
|
|
@@ -134,8 +138,8 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
134
138
|
}
|
|
135
139
|
else {
|
|
136
140
|
const vendorSet = new Set();
|
|
137
|
-
this.map.forEach((
|
|
138
|
-
|
|
141
|
+
this.map.forEach((set) => {
|
|
142
|
+
set.forEach((vendorId) => {
|
|
139
143
|
vendorSet.add(vendorId);
|
|
140
144
|
});
|
|
141
145
|
});
|
|
@@ -178,30 +182,29 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
178
182
|
* @return {number} - maximum Vendor ID
|
|
179
183
|
*/
|
|
180
184
|
getMaxVendorId() {
|
|
181
|
-
let
|
|
182
|
-
this.map.forEach((
|
|
183
|
-
|
|
184
|
-
result = Math.max(vendorIds[vendorIds.length - 1], result);
|
|
185
|
+
let retr = 0;
|
|
186
|
+
this.map.forEach((set) => {
|
|
187
|
+
retr = Math.max(Array.from(set)[set.size - 1], retr);
|
|
185
188
|
});
|
|
186
|
-
return
|
|
189
|
+
return retr;
|
|
187
190
|
}
|
|
188
191
|
getRestrictions(vendorId) {
|
|
189
|
-
const
|
|
190
|
-
this.map.forEach((
|
|
192
|
+
const retr = [];
|
|
193
|
+
this.map.forEach((set, hash) => {
|
|
191
194
|
if (vendorId) {
|
|
192
|
-
if (
|
|
193
|
-
|
|
195
|
+
if (set.has(vendorId)) {
|
|
196
|
+
retr.push(PurposeRestriction.unHash(hash));
|
|
194
197
|
}
|
|
195
198
|
}
|
|
196
199
|
else {
|
|
197
|
-
|
|
200
|
+
retr.push(PurposeRestriction.unHash(hash));
|
|
198
201
|
}
|
|
199
202
|
});
|
|
200
|
-
return
|
|
203
|
+
return retr;
|
|
201
204
|
}
|
|
202
205
|
getPurposes() {
|
|
203
206
|
const purposeIds = new Set();
|
|
204
|
-
this.map.forEach((
|
|
207
|
+
this.map.forEach((set, hash) => {
|
|
205
208
|
purposeIds.add(PurposeRestriction.unHash(hash).purposeId);
|
|
206
209
|
});
|
|
207
210
|
return Array.from(purposeIds);
|
|
@@ -215,11 +218,11 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
215
218
|
*/
|
|
216
219
|
remove(vendorId, purposeRestriction) {
|
|
217
220
|
const hash = purposeRestriction.hash;
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
220
|
-
|
|
221
|
+
const set = this.map.get(hash);
|
|
222
|
+
if (set) {
|
|
223
|
+
set.delete(vendorId);
|
|
221
224
|
// if it's empty let's delete the key so it doesn't show up empty
|
|
222
|
-
if (
|
|
225
|
+
if (set.size == 0) {
|
|
223
226
|
this.map.delete(hash);
|
|
224
227
|
this.bitLength = 0;
|
|
225
228
|
}
|
|
@@ -238,12 +241,12 @@ export class PurposeRestrictionVector extends Cloneable {
|
|
|
238
241
|
* if we have restrictions set before the gvl is set then we'll have to
|
|
239
242
|
* go through and remove some if they're not valid
|
|
240
243
|
*/
|
|
241
|
-
this.map.forEach((
|
|
244
|
+
this.map.forEach((set, hash) => {
|
|
242
245
|
const purposeRestriction = PurposeRestriction.unHash(hash);
|
|
243
|
-
const vendors = Array.from(
|
|
246
|
+
const vendors = Array.from(set);
|
|
244
247
|
vendors.forEach((vendorId) => {
|
|
245
248
|
if (!this.isOkToHave(purposeRestriction.restrictionType, purposeRestriction.purposeId, vendorId)) {
|
|
246
|
-
|
|
249
|
+
set.delete(vendorId);
|
|
247
250
|
}
|
|
248
251
|
});
|
|
249
252
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Cloneable } from '../Cloneable.js';
|
|
2
2
|
import { IntMap } from './IntMap.js';
|
|
3
|
-
|
|
4
|
-
export
|
|
3
|
+
type SingleIDOrCollection = number | number[] | IntMap<unknown> | Set<number | string>;
|
|
4
|
+
export type IdBoolTuple = [number, boolean];
|
|
5
5
|
/**
|
|
6
6
|
* Vector class is like a Set except it keeps track of a max id
|
|
7
7
|
*/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { IntMap } from '../IntMap.js';
|
|
2
|
-
export
|
|
2
|
+
export type IDSetMap = IntMap<Set<number>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pubtech-ai/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Ensures consistent encoding and decoding of TC Signals for the iab. Transparency and Consent Framework (TCF).",
|
|
5
5
|
"author": "Mayank Mishra <mayank@iabtechlab.com>",
|
|
6
6
|
"homepage": "https://iabtcf.com/",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"test-cov": "rm -rf coverage; nyc --reporter=html mocha"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@pubtech-ai/testing": "2.
|
|
31
|
+
"@pubtech-ai/testing": "2.1.1",
|
|
32
32
|
"@istanbuljs/nyc-config-typescript": "^0.1.3",
|
|
33
33
|
"@types/sinon": "^10.0.11",
|
|
34
34
|
"@types/sinon-chai": "3.2.8",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"sinon-chai": "^3.7.0",
|
|
51
51
|
"source-map-support": "^0.5.12",
|
|
52
52
|
"terser": "^4.8.1",
|
|
53
|
-
"ts-node": "
|
|
54
|
-
"typedoc": "
|
|
55
|
-
"typescript": "4.
|
|
53
|
+
"ts-node": "10.9.1",
|
|
54
|
+
"typedoc": "0.24.8",
|
|
55
|
+
"typescript": "4.9.5"
|
|
56
56
|
},
|
|
57
57
|
"eslintIgnore": [
|
|
58
58
|
"lib"
|