propertyAccess.js 727 B

123456789101112131415161718192021222324252627282930
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const { SAFE_IDENTIFIER, RESERVED_IDENTIFIER } = require("./propertyName");
  7. /**
  8. * @param {ArrayLike<string>} properties properties
  9. * @param {number} start start index
  10. * @returns {string} chain of property accesses
  11. */
  12. const propertyAccess = (properties, start = 0) => {
  13. let str = "";
  14. for (let i = start; i < properties.length; i++) {
  15. const p = properties[i];
  16. if (`${Number(p)}` === p) {
  17. str += `[${p}]`;
  18. } else if (SAFE_IDENTIFIER.test(p) && !RESERVED_IDENTIFIER.has(p)) {
  19. str += `.${p}`;
  20. } else {
  21. str += `[${JSON.stringify(p)}]`;
  22. }
  23. }
  24. return str;
  25. };
  26. module.exports = propertyAccess;