UNPKG

@mbc-cqrs-serverless/core

Version:
93 lines 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ttlSk = exports.seqPk = exports.masterPk = void 0; exports.addSortKeyVersion = addSortKeyVersion; exports.getSortKeyVersion = getSortKeyVersion; exports.removeSortKeyVersion = removeSortKeyVersion; exports.generateId = generateId; exports.sortKeyBaseFromId = sortKeyBaseFromId; exports.parseTwoSegmentPkSkFromId = parseTwoSegmentPkSkFromId; exports.getTenantCode = getTenantCode; exports.isS3AttributeKey = isS3AttributeKey; exports.toS3AttributeKey = toS3AttributeKey; exports.parseS3AttributeKey = parseS3AttributeKey; const constants_1 = require("../constants"); const key_1 = require("../constants/key"); function addSortKeyVersion(sk, version) { return `${removeSortKeyVersion(sk)}${key_1.VER_SEPARATOR}${version}`; } function getSortKeyVersion(sk) { const lastDivIdx = sk.lastIndexOf(key_1.VER_SEPARATOR); if (lastDivIdx === -1) { return key_1.VERSION_LATEST; } return +sk.substring(lastDivIdx + 1); } function removeSortKeyVersion(sk) { const lastDivIdx = sk.lastIndexOf(key_1.VER_SEPARATOR); if (lastDivIdx === -1) { return sk; } return sk.substring(0, lastDivIdx); } function generateId(pk, sk) { return `${pk}${key_1.KEY_SEPARATOR}${removeSortKeyVersion(sk)}`; } /** * Inverse of {@link generateId}: extracts the base sort key from a composite id (`pk#skBase`). */ function sortKeyBaseFromId(pk, itemId) { const prefix = `${pk}${key_1.KEY_SEPARATOR}`; if (!itemId.startsWith(prefix)) { return undefined; } return itemId.slice(prefix.length); } /** * Parses a composite {@link generateId} when partition key is always * `{type}#{tenantCode}` (exactly two `#`-separated segments). The remainder of * `itemId` after that prefix is `skBase` (may contain `#`). */ function parseTwoSegmentPkSkFromId(itemId) { const parts = itemId.split(key_1.KEY_SEPARATOR); if (parts.length < 3) { return undefined; } const pk = `${parts[0]}${key_1.KEY_SEPARATOR}${parts[1]}`; const skBase = parts.slice(2).join(key_1.KEY_SEPARATOR); return { pk, skBase }; } function getTenantCode(pk) { const lastDivIdx = pk.lastIndexOf(key_1.KEY_SEPARATOR); if (lastDivIdx === -1) { return; } return pk.substring(lastDivIdx + 1); } const S3_PREFIX = 's3://'; const S3_PREFIX_LEN = S3_PREFIX.length; function isS3AttributeKey(attributes) { if (typeof attributes === 'string' && attributes.startsWith(S3_PREFIX)) { return true; } return false; } function toS3AttributeKey(bucket, key) { return `${S3_PREFIX}${bucket}/${key}`; } function parseS3AttributeKey(s3Uri) { const sepIdx = s3Uri.indexOf('/', S3_PREFIX_LEN); const bucket = s3Uri.substring(S3_PREFIX_LEN, sepIdx); const key = s3Uri.substring(1 + sepIdx); return { bucket, key, }; } const masterPk = (tenantCode) => `MASTER${key_1.KEY_SEPARATOR}${tenantCode || constants_1.DEFAULT_TENANT_CODE}`; exports.masterPk = masterPk; const seqPk = (tenantCode) => `SEQ${key_1.KEY_SEPARATOR}${tenantCode || constants_1.DEFAULT_TENANT_CODE}`; exports.seqPk = seqPk; const ttlSk = (tableName) => `TTL${key_1.KEY_SEPARATOR}${tableName}`; exports.ttlSk = ttlSk; //# sourceMappingURL=key.js.map