| /** |
| * Copyright (c) HashiCorp, Inc. |
| * SPDX-License-Identifier: MPL-2.0 |
| */ |
| |
| import { v4 as uuidv4 } from 'uuid'; |
| |
| // manage a set of unique ids |
| export default class { |
| constructor() { |
| this.ids = new Set(); |
| } |
| /** |
| * Returns a unique identifier. |
| * |
| * @method fetch |
| * @param {Object} data Records attributes hash |
| * @return {String} Unique identifier |
| * @public |
| */ |
| fetch() { |
| let uuid = uuidv4(); |
| // odds are incredibly low that we'll run into a duplicate but just to be safe... |
| while (this.ids.has(uuid)) { |
| uuid = uuidv4(); |
| } |
| this.ids.add(uuid); |
| return uuid; |
| } |
| /** |
| * Register an identifier. |
| * Must throw if identifier is already used. |
| * |
| * @method set |
| * @param {String|Number} id |
| * @public |
| */ |
| set(id) { |
| if (this.ids.has(id)) { |
| throw new Error(`ID ${id} is in use.`); |
| } |
| this.ids.add(id); |
| } |
| /** |
| * Reset identity manager. |
| * |
| * @method reset |
| * @public |
| */ |
| reset() { |
| this.ids.clear(); |
| } |
| } |