getGeneratedSourceInfo.js 990 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const CHAR_CODE_NEW_LINE = "\n".charCodeAt(0);
  7. /**
  8. * @typedef {object} GeneratedSourceInfo
  9. * @property {number=} generatedLine generated line
  10. * @property {number=} generatedColumn generated column
  11. * @property {string=} source source
  12. */
  13. /**
  14. * @param {string | undefined} source source
  15. * @returns {GeneratedSourceInfo} source info
  16. */
  17. const getGeneratedSourceInfo = (source) => {
  18. if (source === undefined) {
  19. return {};
  20. }
  21. const lastLineStart = source.lastIndexOf("\n");
  22. if (lastLineStart === -1) {
  23. return {
  24. generatedLine: 1,
  25. generatedColumn: source.length,
  26. source,
  27. };
  28. }
  29. let generatedLine = 2;
  30. for (let i = 0; i < lastLineStart; i++) {
  31. if (source.charCodeAt(i) === CHAR_CODE_NEW_LINE) generatedLine++;
  32. }
  33. return {
  34. generatedLine,
  35. generatedColumn: source.length - lastLineStart - 1,
  36. source,
  37. };
  38. };
  39. module.exports = getGeneratedSourceInfo;