diff --git a/src/FieldsArray.ts b/src/FieldsArray.ts index f0aa40e..4e95eb9 100644 --- a/src/FieldsArray.ts +++ b/src/FieldsArray.ts @@ -1,5 +1,4 @@ import PKPass from "./PKPass"; -import { fieldKeysPoolSymbol } from "./PKPass"; import * as Schemas from "./schemas"; import * as Utils from "./utils"; import formatMessage, * as Messages from "./messages"; @@ -10,16 +9,20 @@ import formatMessage, * as Messages from "./messages"; */ const passInstanceSymbol = Symbol("passInstance"); +const sharedKeysPoolSymbol = Symbol("keysPool"); export default class FieldsArray extends Array { private [passInstanceSymbol]: InstanceType; + private [sharedKeysPoolSymbol]: Set; constructor( passInstance: InstanceType, + keysPool: Set, ...args: Schemas.Field[] ) { super(...args); this[passInstanceSymbol] = passInstance; + this[sharedKeysPoolSymbol] = keysPool; } /** @@ -43,9 +46,7 @@ export default class FieldsArray extends Array { return acc; } - const pool = this[passInstanceSymbol][fieldKeysPoolSymbol]; - - if (pool.has(current.key)) { + if (this[sharedKeysPoolSymbol].has(current.key)) { console.warn( formatMessage( Messages.FIELDS.REPEATED_KEY, @@ -55,7 +56,7 @@ export default class FieldsArray extends Array { return acc; } - pool.add(current.key); + this[sharedKeysPoolSymbol].add(current.key); return [...acc, current]; }, [], @@ -73,7 +74,7 @@ export default class FieldsArray extends Array { Utils.assertUnfrozen(this[passInstanceSymbol]); const element: Schemas.Field = super.pop(); - this[passInstanceSymbol][fieldKeysPoolSymbol].delete(element.key); + this[sharedKeysPoolSymbol].delete(element.key); return element; } @@ -91,7 +92,7 @@ export default class FieldsArray extends Array { const removeList = this.slice(start, deleteCount + start); removeList.forEach((item) => - this[passInstanceSymbol][fieldKeysPoolSymbol].delete(item.key), + this[sharedKeysPoolSymbol].delete(item.key), ); return super.splice(start, deleteCount, ...items); diff --git a/src/PKPass.ts b/src/PKPass.ts index 7740235..5e5b707 100644 --- a/src/PKPass.ts +++ b/src/PKPass.ts @@ -11,7 +11,6 @@ import formatMessage, * as Messages from "./messages"; /** Exporting for tests specs */ export const propsSymbol = Symbol("props"); export const localizationSymbol = Symbol("pass.l10n"); -export const fieldKeysPoolSymbol = Symbol("fieldKeysPoolSymbol"); export const importMetadataSymbol = Symbol("import.pass.metadata"); export const createManifestSymbol = Symbol("pass.manifest"); export const closePassSymbol = Symbol("pass.close"); @@ -20,7 +19,6 @@ export const certificatesSymbol = Symbol("pass.certificates"); export default class PKPass extends Bundle { private [certificatesSymbol]: Schemas.CertificatesSchema; - private [fieldKeysPoolSymbol] = new Set(); private [propsSymbol]: Schemas.PassProps = {}; private [localizationSymbol]: { [lang: string]: { @@ -310,13 +308,15 @@ export default class PKPass extends Bundle { this[propsSymbol][this.type] = undefined; } + const sharedKeysPool = new Set(); + this[passTypeSymbol] = type; this[propsSymbol][this[passTypeSymbol]] = { - headerFields /******/: new FieldsArray(this), - primaryFields /*****/: new FieldsArray(this), - secondaryFields /***/: new FieldsArray(this), - auxiliaryFields /***/: new FieldsArray(this), - backFields /********/: new FieldsArray(this), + headerFields /******/: new FieldsArray(this, sharedKeysPool), + primaryFields /*****/: new FieldsArray(this, sharedKeysPool), + secondaryFields /***/: new FieldsArray(this, sharedKeysPool), + auxiliaryFields /***/: new FieldsArray(this, sharedKeysPool), + backFields /********/: new FieldsArray(this, sharedKeysPool), transitType: undefined, }; }