process-line.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { TransformStream } from 'node:stream/web';
  2. export function processLine(line: string): string | null {
  3. if (!line) {
  4. return null;
  5. }
  6. const trimmed: string = line.trim();
  7. if (trimmed.length === 0) {
  8. return null;
  9. }
  10. const line_0: string = trimmed[0];
  11. if (
  12. line_0 === ' '
  13. || line_0 === '\r'
  14. || line_0 === '\n'
  15. || line_0 === '!'
  16. || (line_0 === '/' && trimmed[1] === '/')
  17. ) {
  18. return null;
  19. }
  20. if (line_0 === '#') {
  21. if (trimmed[1] !== '#') {
  22. // # Comment
  23. return null;
  24. }
  25. if (trimmed[2] === '#' && trimmed[3] === '#') {
  26. // ################## EOF ##################
  27. return null;
  28. }
  29. /**
  30. * AdGuard Filter can be:
  31. *
  32. * ##.class
  33. * ##tag.class
  34. * ###id
  35. */
  36. }
  37. return trimmed;
  38. }
  39. export class ProcessLineStream extends TransformStream<string, string> {
  40. // private __buf = '';
  41. constructor() {
  42. super({
  43. transform(l, controller) {
  44. const line = processLine(l);
  45. if (line) {
  46. controller.enqueue(line);
  47. }
  48. }
  49. });
  50. }
  51. }
  52. // export class ProcessLineNodeStream extends Transform {
  53. // _transform(chunk: string, encoding: BufferEncoding, callback: TransformCallback) {
  54. // // Convert chunk to string and then to uppercase
  55. // const upperCased = chunk.toUpperCase();
  56. // // Push transformed data to readable side
  57. // this.push(upperCased);
  58. // // Call callback when done
  59. // callback();
  60. // }
  61. // }