includer.js 1011 B

12345678910111213141516171819202122232425262728293031
  1. const path = require('path');
  2. const fs = require('fs');
  3. //пример в коде:
  4. // @@include('./test/testFile.inc');
  5. function includeRecursive(self, parentFile, source, depth) {
  6. depth = (depth ? depth : 0);
  7. if (depth > 50)
  8. throw new Error('includer: stack too big');
  9. const lines = source.split('\n');
  10. let result = [];
  11. for (const line of lines) {
  12. const trimmed = line.trim();
  13. const m = trimmed.match(/^@@[\s]*?include[\s]*?\(['"](.*)['"]\)/);
  14. if (m) {
  15. const includedFile = path.resolve(path.dirname(parentFile), m[1]);
  16. self.addDependency(includedFile);
  17. const fileContent = fs.readFileSync(includedFile, 'utf8');
  18. result = result.concat(includeRecursive(self, includedFile, fileContent, depth + 1));
  19. } else {
  20. result.push(line);
  21. }
  22. }
  23. return result;
  24. }
  25. exports.default = function includer(source) {
  26. return includeRecursive(this, this.resourcePath, source).join('\n');
  27. }