source: node_modules/@swagger-api/apidom-core/cjs/identity/index.cjs

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 16 months ago

Initial commit

  • Property mode set to 100644
File size: 2.0 KB
Line 
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4exports.__esModule = true;
5exports.defaultIdentityManager = exports.IdentityManager = void 0;
6var _minim = require("minim");
7var _stampit = _interopRequireDefault(require("stampit"));
8var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
9var _ElementIdentityError = _interopRequireDefault(require("./errors/ElementIdentityError.cjs"));
10var _index = require("../predicates/index.cjs");
11// @TODO(oliwia.rogala@smartbear.com): transforming this stamp to class will break backward compatibility
12const IdentityManager = exports.IdentityManager = (0, _stampit.default)({
13 props: {
14 uuid: null,
15 length: null,
16 identityMap: null
17 },
18 init({
19 length = 6
20 } = {}) {
21 this.length = 6;
22 this.uuid = new _shortUniqueId.default({
23 length
24 });
25 this.identityMap = new WeakMap();
26 },
27 methods: {
28 identify(element) {
29 if (!(0, _index.isElement)(element)) {
30 throw new _ElementIdentityError.default('Cannot not identify the element. `element` is neither structurally compatible nor a subclass of an Element class.', {
31 value: element
32 });
33 }
34
35 // use already assigned identity
36 if (element.meta.hasKey('id') && (0, _index.isStringElement)(element.meta.id) && !element.meta.id.equals('')) {
37 return element.id;
38 }
39
40 // assign identity in immutable way
41 if (this.identityMap.has(element)) {
42 return this.identityMap.get(element);
43 }
44
45 // return element identity
46 const id = new _minim.StringElement(this.generateId());
47 this.identityMap.set(element, id);
48 return id;
49 },
50 forget(element) {
51 if (this.identityMap.has(element)) {
52 this.identityMap.delete(element);
53 return true;
54 }
55 return false;
56 },
57 generateId() {
58 return this.uuid.randomUUID();
59 }
60 }
61});
62const defaultIdentityManager = exports.defaultIdentityManager = IdentityManager({
63 length: 6
64});
Note: See TracBrowser for help on using the repository browser.