@quicore/resource-id
Version:
Deterministic and compact ID generation for API resources using pluggable hashing.
80 lines (74 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ResourceIDGenerator = void 0;
var _IdGenerator = require("./IdGenerator");
/**
* Generates deterministic, scoped IDs for FHIR-like resources using integration context.
* Example format: `${integrationId}::${resourceType}::${resourceId}`
*/
class ResourceIDGenerator extends _IdGenerator.IDGenerator {
constructor() {
super();
}
/**
* Sets the integration ID.
* @param {string} integrationId - Integration ID for scoping.
* @returns {this}
*/
setIntegrationId(integrationId) {
if (!integrationId) {
throw new Error(`Integration ID is required and cannot be omitted.`);
}
this.setComponent('integrationId', integrationId);
return this;
}
/**
* Sets the resource ID.
* @param {string} resourceId - Unique identifier of the resource.
* @returns {this}
*/
setResourceId(resourceId) {
if (!resourceId) {
throw new Error(`Resource ID is required and cannot be omitted.`);
}
this.setComponent('resourceId', resourceId);
return this;
}
/**
* Sets the resource type.
* @param {string} resourceType - Type of the FHIR resource (e.g., "Patient").
* @returns {this}
*/
setResourceType(resourceType) {
if (!resourceType) {
throw new Error(`Resource Type is required and cannot be omitted.`);
}
this.setComponent('resourceType', resourceType);
return this;
}
/**
* Combines components in a canonical string format for hashing.
* @returns {string} Canonical string.
*/
createCanonicalString() {
return `${this.components.integrationId}::${this.components.resourceType}::${this.components.resourceId}`;
}
/**
* Ensures all required components are defined.
* @throws {Error} If any component is missing.
*/
validateComponents() {
if (!this.components.resourceId) {
throw new Error('Resource ID is required');
}
if (!this.components.resourceType) {
throw new Error('Resource Type is required');
}
if (!this.components.integrationId) {
throw new Error('Integration ID is required');
}
}
}
exports.ResourceIDGenerator = ResourceIDGenerator;