UNPKG

@stackbit/annotations

Version:
89 lines 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pickDataAttrs = exports.toFieldPath = exports.toObjectId = exports.getFieldPath = exports.getObjectId = exports.StackbitFieldPathAttrName = exports.StackbitObjectIdAttrName = void 0; exports.StackbitObjectIdAttrName = 'data-sb-object-id'; exports.StackbitFieldPathAttrName = 'data-sb-field-path'; function getObjectId(props) { return props?.[exports.StackbitObjectIdAttrName]; } exports.getObjectId = getObjectId; function getFieldPath(props) { return props?.[exports.StackbitFieldPathAttrName]; } exports.getFieldPath = getFieldPath; /** * Takes a string and returns an object with that string wrapped into the * `data-sb-object-id` attribute. * * @example * toObjectId('xyz') * => { 'data-sb-object-id': 'xyz' } * * @param objectId */ function toObjectId(objectId) { if (process.env.NODE_ENV === 'production') { return {}; } if (!objectId) { return {}; } return { [exports.StackbitObjectIdAttrName]: objectId }; } exports.toObjectId = toObjectId; /** * Takes field-path and returns an object with all field-paths concatenated into * the `data-sb-field-path` attribute. Each field-path can be a string or a * FieldPathDescriptor. * * @example * toFieldPath('.button', { objectId: 'xyz', fieldPath: 'link', xpath: '@href' }) * => { 'data-sb-field-path': '.button xyz:link#@href' } * * toFieldPath({ oid: 'abc', fp: 'image', xpath: 'img[1]/@src' }) * => { 'data-sb-field-path': 'abc:image#img[1]/@src' } * * @param fieldPaths */ function toFieldPath(...fieldPaths) { if (process.env.NODE_ENV === 'production') { return {}; } const fieldPath = fieldPaths .map((fieldPath) => { if (!fieldPath) { return null; } if (typeof fieldPath === 'string') { return fieldPath; } const fp = 'fieldPath' in fieldPath ? fieldPath.fieldPath : fieldPath.fp; const oid = 'objectId' in fieldPath ? fieldPath.objectId : 'oid' in fieldPath ? fieldPath.oid : ''; const xpath = 'xpath' in fieldPath ? fieldPath.xpath : ''; return (oid ? `${oid}:` : '') + fp + (xpath ? `#${xpath}` : ''); }) .filter(Boolean) .join(' ') .trim(); return fieldPath ? { [exports.StackbitFieldPathAttrName]: fieldPath } : {}; } exports.toFieldPath = toFieldPath; /** * Takes an object and returns a new object with only the properties that start * with `data-` * * @param props */ function pickDataAttrs(props) { if (!props) { return {}; } return Object.entries(props).reduce((dataAttrs, [key, value]) => { if (key.startsWith('data-')) { dataAttrs[key] = value; } return dataAttrs; }, {}); } exports.pickDataAttrs = pickDataAttrs; //# sourceMappingURL=index.js.map