UNPKG

constructs

Version:

A programming model for software-defined state

72 lines 5.21 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.ADDR_SEP = void 0; exports.addressOf = addressOf; const crypto = __importStar(require("crypto")); /** * Constructs with this id are completely hidden from the address calculation. */ const HIDDEN_ID = 'Default'; /** * Separator used to delimit path components while calculating an address. * * Ids are sanitized before they become path components (see `sanitizeId()` in * `construct.ts`), so that a single component never contains this character. * Otherwise one component could hash like several: the single component * `a<sep>b` would be fed to the hash exactly like the two components `a` and * `b`. */ exports.ADDR_SEP = '\n'; /** * Calculates the construct addr based on path components. * * Components named `Default` (case sensitive) are excluded from addr * calculation to allow tree refactorings. */ function addressOf(components) { const hash = crypto.createHash('sha1'); for (const c of components) { // skip components called "Default" to enable refactorings if (c === HIDDEN_ID) { continue; } hash.update(c); hash.update(exports.ADDR_SEP); } // prefix with "c8" so to ensure it starts with non-digit. return 'c8' + hash.digest('hex'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1hZGRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvbm9kZS1hZGRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSw4QkFZQztBQXBDRCwrQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUI7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7O0dBS0c7QUFDSCxTQUFnQixTQUFTLENBQUMsVUFBb0I7SUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzNCLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUFDLFNBQVM7UUFBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFRLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsMERBQTBEO0lBQzFELE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgd2l0aCB0aGlzIGlkIGFyZSBjb21wbGV0ZWx5IGhpZGRlbiBmcm9tIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLlxuICovXG5jb25zdCBISURERU5fSUQgPSAnRGVmYXVsdCc7XG5cbi8qKlxuICogU2VwYXJhdG9yIHVzZWQgdG8gZGVsaW1pdCBwYXRoIGNvbXBvbmVudHMgd2hpbGUgY2FsY3VsYXRpbmcgYW4gYWRkcmVzcy5cbiAqXG4gKiBJZHMgYXJlIHNhbml0aXplZCBiZWZvcmUgdGhleSBiZWNvbWUgcGF0aCBjb21wb25lbnRzIChzZWUgYHNhbml0aXplSWQoKWAgaW5cbiAqIGBjb25zdHJ1Y3QudHNgKSwgc28gdGhhdCBhIHNpbmdsZSBjb21wb25lbnQgbmV2ZXIgY29udGFpbnMgdGhpcyBjaGFyYWN0ZXIuXG4gKiBPdGhlcndpc2Ugb25lIGNvbXBvbmVudCBjb3VsZCBoYXNoIGxpa2Ugc2V2ZXJhbDogdGhlIHNpbmdsZSBjb21wb25lbnRcbiAqIGBhPHNlcD5iYCB3b3VsZCBiZSBmZWQgdG8gdGhlIGhhc2ggZXhhY3RseSBsaWtlIHRoZSB0d28gY29tcG9uZW50cyBgYWAgYW5kXG4gKiBgYmAuXG4gKi9cbmV4cG9ydCBjb25zdCBBRERSX1NFUCA9ICdcXG4nO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbnN0cnVjdCBhZGRyIGJhc2VkIG9uIHBhdGggY29tcG9uZW50cy5cbiAqXG4gKiBDb21wb25lbnRzIG5hbWVkIGBEZWZhdWx0YCAoY2FzZSBzZW5zaXRpdmUpIGFyZSBleGNsdWRlZCBmcm9tIGFkZHJcbiAqIGNhbGN1bGF0aW9uIHRvIGFsbG93IHRyZWUgcmVmYWN0b3JpbmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkcmVzc09mKGNvbXBvbmVudHM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpO1xuICBmb3IgKGNvbnN0IGMgb2YgY29tcG9uZW50cykge1xuICAgIC8vIHNraXAgY29tcG9uZW50cyBjYWxsZWQgXCJEZWZhdWx0XCIgdG8gZW5hYmxlIHJlZmFjdG9yaW5nc1xuICAgIGlmIChjID09PSBISURERU5fSUQpIHsgY29udGludWU7IH1cblxuICAgIGhhc2gudXBkYXRlKGMpO1xuICAgIGhhc2gudXBkYXRlKEFERFJfU0VQKTtcbiAgfVxuXG4gIC8vIHByZWZpeCB3aXRoIFwiYzhcIiBzbyB0byBlbnN1cmUgaXQgc3RhcnRzIHdpdGggbm9uLWRpZ2l0LlxuICByZXR1cm4gJ2M4JyArIGhhc2guZGlnZXN0KCdoZXgnKTtcbn1cbiJdfQ==