# als-remove-js-comments

`als-remove-js-comments` is a simple and efficient utility for removing comments from JavaScript code. It supports both single-line (`//`) and multi-line (`/* */`) comments, while properly handling string literals to avoid removing comments inside strings.

Works in NodeJs and browser. 
Supports jsx comments too `{/**/}`.

## Installation

You can install the library via npm:

```bash
npm install als-remove-js-comments
```

## Usage

```js
const removeComments = require('als-remove-js-comments');

const code = `
   const a = 5; // This is a comment
   const str = "This is a string with // inside";
   /* This is a multi-line
      comment */
   const b = 10;
`;

const result = removeComments(code);
console.log(result);
// Output:
// const a = 5;
// const str = "This is a string with // inside";
// const b = 10;
```

In browser:

```html
<script src="/node_modules/als-remove-js-comments/remove-comments.js"></script>
<script>
removeComments('some text // with comments')
</script>
```

## API

### `removeComments(code: string): string`

Removes all single-line and multi-line comments from the given JavaScript code.

#### Parameters:
- `code` (`string`): The input JavaScript code.

#### Returns:
- `string`: The JavaScript code without comments.

## Examples

### Example 1: Removing Single-Line Comments

```js
const input = `const a = 5; // This is a comment\nconst b = 10; // Another comment`;
const output = removeComments(input);
console.log(output);
// Output: "const a = 5; \nconst b = 10; "
```

### Example 2: Removing Multi-Line Comments

```js
const input = `const a = 5; /* This is a\nmulti-line comment */\nconst b = 10;`;
const output = removeComments(input);
console.log(output);
// Output: "const a = 5; \nconst b = 10;"
```

### Example 3: Handling String Literals

```js
const input = `const str = "This is a string with // inside";`;
const output = removeComments(input);
console.log(output);
// Output: "const str = \"This is a string with // inside\";"
```

### Example 4: Handling Comments on Separate Lines

```js
const input = `// This is a single-line comment\nconst a = 5;`;
const output = removeComments(input);
console.log(output);
// Output: "\nconst a = 5;"
```

### Example 5: Handling Escaped Quotes

```js
const input = `const str = "This string contains an escaped quote: \\" and a // comment";`;
const output = removeComments(input);
console.log(output);
// Output: "const str = \"This string contains an escaped quote: \\" and a // comment\";"
```

## Tests

The library includes a set of tests to ensure correct behavior with various edge cases. You can run the tests using:

```bash
node test.js
```

## License

This project is licensed under the MIT License. See the `LICENSE` file for details.
