Artifact 产品

Surgio 会根据 Artifact 的值来生成配置文件。你可以一次性配置多个 Artifact,一次性生成所有需要的配置文件。

{
  name: 'SurgeV3.conf',
  template: 'surge_v3',
  provider: 'demo',
}

属性

name

  • 类型: string
  • 默认值: undefined
  • 必须

配置文件名

template

  • 类型: string
  • 默认值: undefined
  • 必须

模板名。会在 ./template 目录内寻找同名文件(.tpl 后缀可省略)。

provider

  • 类型: string
  • 默认值: undefined
  • 必须

模板名。会在 ./provider 目录内寻找同名文件(.js 后缀可省略)。

combineProviders

  • 类型: string[]
  • 默认值: undefined

合并其它 Provider。

注意

由于我们可以在 Provider 中定义属于自己的 customFiltersnodeFilter,它们在合并时需要你注意以下几点:

  • 不论是主 Provider(即 provider 定义的 Provider),还是合并进来的 Provider,它们的 nodeFilter 只对自身的节点有效;
  • 对于 customFilters 来说,只有主 Provider 中定义的才会生效;

例如:

最终生成的节点配置会包含 my-provider, rixcloud, dlercloud 三个 Provider 的节点。如果 my-provider 中有自定义过滤器 customFilters,那这些过滤器对 rixclouddlercloud 节点同样有效。

{
  provider: 'my-provider',
  combineProviders: ['rixcloud', 'dlercloud'],
}

customParams

  • 类型: object
  • 默认值: {}

自定义的模板变量。可以在模板中获取,方便定制化模板。

例如:

{
  customParams: {
    beta: true,
    foo: 'bar',
  },
}

此后即可在模板中使用

`{{ customParams.foo }}`

来输出 foo 的内容。

你也可以定义布尔值以实现模板中的逻辑判断,比如:

<!-- .tpl 文件 -->
{% if customParams.beta %}

{% endif %}

提示

  1. 逻辑语句能够让你仅通过一个模板就能实现多种不同的配置。Nunjucks 的条件语法请参考其文档;
  2. 你可以定义全局的自定义模板变量了

destDir

  • 类型: string
  • 默认值: undefined

该 Artifact 的生成目录。对于本地管理规则仓库的朋友可能会非常有用,你不再需要人肉复制粘贴了。

方法

proxyGroupModifier

proxyGroupModifier(nodeList, filters)

  • 类型: Function
  • 入参: (NodeConfig[], { hkFilter, usFilter, netflixFilter, youtubePremiumFilter })
  • 返回值: object[]

为了解决 Clash 的 Proxy Group 组装引入了这个构造函数。在使用 clashProxyConfig 模板变量 之前必须要自己实现这个方法。

方法返回的数组中可以包含以下几种对象:

1. 完整的代理选择列表

{
  name: '🚀 Proxy',
  type: 'select',
}

2. 经过过滤的代理选择列表

{
  name: '🎬 Netflix',
  filter: filters.netflixFilter,
  type: 'select',
  // proxies: ['Auto'],
}

提示

  • 内置的 filters 会被 Provider 中定义的 filter 覆盖
  • 假设你有一个名为 myFilter 的自定义过滤器,则可以通过 filters.myFilter 调用
  • 如果包含 proxies 节点,则过滤出的节点名会合并到末尾

3. 经过过滤的代理自动测速列表

{
  name: 'US',
  filter: filters.usFilter,
  type: 'url-test', // 支持 'url-test', 'fallback', 'load-balance'
  // proxies: ['Auto'],
}

提示

  • 使用原理同上

4. 自定义的代理选择列表

{
  name: '🍎 Apple',
  proxies: ['DIRECT', '🚀 Proxy', 'US', 'HK'],
  type: 'select',
}

注意

proxies 中的代理名称必须已被定义

5. 自定义的代理自动测速列表

{
  name: '🍎 Apple',
  proxies: ['🚀 Proxy', 'US', 'HK'],
  type: 'url-test', // 支持 'url-test', 'fallback', 'load-balance'
}