_getAlignmentData() {
    const alignmentData = { '*': { '%s': 0 } };

    if (!('align' in this.shape && !isPlainObject(this.shape.align))) {
      return alignmentData;
    }

    const alignFile = isString(this.shape.align) ? path.resolve(this.shape.align) : null;
    let align = alignFile;
    let stat = align ? fs.lstatSync(align) : null;

    if (!stat) {
      return alignmentData;
    }

    if (stat.isSymbolicLink()) {
      align = fs.readlinkSync(align);
      stat = fs.statSync(align);
    }

    align = stat.isFile() ? fs.readFileSync(align, 'utf8') : null;
    align = align ? yaml.load(align) : {};

    for (const [key, value] of Object.entries(align)) {
      if (!isPlainObject(value) || !Object.keys(value).length) {
        continue;
      }

      alignmentData[key] = alignmentData[key] || {};
      for (const [tmpl, tmplValue] of Object.entries(value)) {
        const template = tmpl.length ? (tmpl.includes('%s') ? tmpl : `%s${tmpl}`) : '%s';
        const file = path.join(path.dirname(key), path.basename(key, '.svg'));
        alignmentData[file][template] = Math.max(0, Math.min(1, Number.parseFloat(tmplValue)));
      }
    }

    this.log.debug('Processed alignment data file "%s"', path.basename(alignFile));

    return alignmentData;
  }
Create alignment data

@returns {object} updated align data
@private