# to-svg-file

## Interface

```typescript
interface parser {
  name: 'to-svg-file';
  options: {
    filenameTemplate: string;
  };
  output: {
    type: 'directory';
    directoryPath: string;
  };
}
```

## Options

<table><thead><tr><th width="216">Parameter</th><th width="100">Required</th><th width="100">Type</th><th width="483">Default</th><th width="507">Description</th></tr></thead><tbody><tr><td><code>filenameTemplate</code></td><td><code>false</code></td><td><code>string</code></td><td><code>"{{parents}}/{{name}}[-{{mode}}]{{extension}}"</code></td><td>The mustache template used to generate the file path to write to the file system.<br>Available variables:<br><code>parents</code>: group and collection names of the token's parents<br><code>name</code>: the name of the asset token<br><code>mode</code>: the name of the current mode<br><code>extension</code>: the file extension extracted from the token</td></tr></tbody></table>

## Basic usage - Single mode

Our vector has a default mode and is in a group named "icons".

The parser will generate the following output: `{directoryPath}/{groups}/{vectorName}.svg`

{% tabs %}
{% tab title="Input" %}
{% code lineNumbers="true" %}

```json
{
  "icons": {
    "menu": {
      "$type": "vector",
      "$value": {
        "default": {
          "variationLabel": null,
          "format": "svg",
          "url": "<url-of-your-svg-file>"
        }
      }
    }
  }
}
```

{% endcode %}
{% endtab %}

{% tab title="Config" %}
{% code title=".specifyrc.json" lineNumbers="true" %}

```json
{
  "version": "2",
  "repository": "@organization/repository",
  // Only use the personalAccessToken when working with the CLI
  "personalAccessToken": "<your-personal-access-token>",
  "rules": [
    {
      "name": "Generate SVG files",
      "parsers": [
        {
          "name": "to-svg-file",
          "output": {
            "type": "directory",
            "directoryPath": "output/assets"
          }
        }
      ]
    }
  ]
}
```

{% endcode %}
{% endtab %}

{% tab title="Output" %}
{% code title="output/assets/icons/menu.svg" lineNumbers="true" %}

```svg
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
    <path d="M9.25 9.25V3.5H4C3.72386 3.5 3.5 3.72386 3.5 4V9.25H9.25ZM9.25 10.75H3.5V16C3.5 16.2761 3.72386 16.5 4 16.5H9.25V10.75ZM10.75 16.5H16C16.2761 16.5 16.5 16.2761 16.5 16V10.75H10.75V16.5ZM4 18C2.89543 18 2 17.1046 2 16V4C2 2.89543 2.89543 2 4 2H10H16C17.1046 2 18 2.89543 18 4V10V16C18 17.1046 17.1046 18 16 18H4ZM16.5 9.25V4C16.5 3.72386 16.2761 3.5 16 3.5H10.75V9.25H16.5Z" />
</svg>
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Advanced usage - Multiple modes

Our vector has a 2 modes: `light` and `dark` and is in a group named "icons".

The parser will generate one file per mode:

* &#x20;`{directoryPath}/{groups}/{vectorName}-{mode1}.svg`
* &#x20;`{directoryPath}/{groups}/{vectorName}-{mode2}.svg`

{% tabs %}
{% tab title="Input" %}
{% code lineNumbers="true" %}

```json
{
  "asset": {
    "$collection": {
      "$modes": [
        "light",
        "dark"
      ]
    },
    "icons": {
      "menu": {
        "$type": "vector",
        "$value": {
          "light": {
            "variationLabel": null,
            "format": "svg",
            "url": "<url-of-your-svg-file>"
          },
          "dark": {
            "variationLabel": null,
            "format": "svg",
            "url": "<url-of-your-svg-file>"
          }
        }
      }
    }
  }
}
```

{% endcode %}
{% endtab %}

{% tab title="Config" %}
{% code title=".specifyrc.json" lineNumbers="true" %}

```json
{
  "version": "2",
  "repository": "@organization/repository",
  // Only use the personalAccessToken when working with the CLI
  "personalAccessToken": "<your-personal-access-token>",
  "rules": [
    {
      "name": "Generate SVG files",
      "parsers": [
        {
          "name": "to-svg-file",
          "output": {
            "type": "directory",
            "directoryPath": "output/assets"
          }
        }
      ]
    }
  ]
}
```

{% endcode %}
{% endtab %}

{% tab title="Output" %}
{% code title="output/assets/icons/menu-light.svg" lineNumbers="true" %}

```svg
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M9.25 9.25V3.5H4C3.72386 3.5 3.5 3.72386 3.5 4V9.25H9.25ZM9.25 10.75H3.5V16C3.5 16.2761 3.72386 16.5 4 16.5H9.25V10.75ZM10.75 16.5H16C16.2761 16.5 16.5 16.2761 16.5 16V10.75H10.75V16.5ZM4 18C2.89543 18 2 17.1046 2 16V4C2 2.89543 2.89543 2 4 2H10H16C17.1046 2 18 2.89543 18 4V10V16C18 17.1046 17.1046 18 16 18H4ZM16.5 9.25V4C16.5 3.72386 16.2761 3.5 16 3.5H10.75V9.25H16.5Z" fill="#788BA5" />
</svg>
```

{% endcode %}

{% code title="output/assets/icons/menu-dark.svg" lineNumbers="true" %}

```svg
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M9.25 9.25V3.5H4C3.72386 3.5 3.5 3.72386 3.5 4V9.25H9.25ZM9.25 10.75H3.5V16C3.5 16.2761 3.72386 16.5 4 16.5H9.25V10.75ZM10.75 16.5H16C16.2761 16.5 16.5 16.2761 16.5 16V10.75H10.75V16.5ZM4 18C2.89543 18 2 17.1046 2 16V4C2 2.89543 2.89543 2 4 2H10H16C17.1046 2 18 2.89543 18 4V10V16C18 17.1046 17.1046 18 16 18H4ZM16.5 9.25V4C16.5 3.72386 16.2761 3.5 16 3.5H10.75V9.25H16.5Z" fill="#555AAA" />
</svg>
```

{% endcode %}
{% endtab %}
{% endtabs %}
