@a-la/context 中文文档教程

发布于 5年前 浏览 23 项目主页 更新于 3年前

@a-la/context

npm version

@a-la/contextalamode 转译器。 它将提供一种方法来记录给定规则的转换结果以及发出的事件。

yarn add -E @a-la/context

Table Of Contents

API

该包可通过导入其默认功能获得:

import ÀLaContext from '@a-la/context'

然后将上下文传递给 Zoroaster 测试套件的 context 属性。

async <ins>stream</ins>(
  rules: Rule|Rule[],
  text: string,
  eventKeys?: string[],
): <i>ReturnType</i>

根据一条规则或一组规则创建一个 Replaceable 流,以传递的文本异步结束它并返回结果。

在下面的示例中,转换规则用于将 export 语句替换为 module.exports 语句,并发出 exports 事件。

/**
 * A rule to replace an `export function` statement with `module.exports`.
 */
export const exportFunctionRule = {
  re: / *export function ([$_\w][$_\w\d]*)/gm,
  replacement(_, fn) {
    // async
    this.emit('exports', fn)

    // sync
    this.exports = this.exports || []
    this.exports.push(fn)

    return `module.exports.${fn} = function ${fn}`
  },
}

现在,可以使用 @a-la/contextzoroaster 测试此规则/a> 测试框架。

import { equal, deepEqual } from '@zoroaster/assert'
import ÀLaContext from '@a-la/context'
import { exportFunctionRule as rule } from '../../src/rule'

/** @type {Object.<string, (c: ÀLaContext)>} */
const T = {
  context: ÀLaContext,
  async 'replaces the export function'({ stream }) {
    const fn = 'test'
    const data = `export function ${fn}() {}`

    const {
      result,
      events,
      replaceable,
    } = await stream(rule, data, ['exports'])
    const expected = `module.exports.${fn} = function ${fn}() {}`
    equal(result, expected)
    deepEqual(events, {
      exports: [fn],
    })
    deepEqual(replaceable.exports, [fn])
  },
}

export default T
example/test/spec
  ✓  replaces the export function

 Executed 1 test.

stream 函数的输出是一个如下所述的对象。

ReturnType:可替换实例、字符串结果和事件映射。

NameTypeDescription
events*Object<string, any[]>Emitted events recorded against passed events keys.
result*stringThe caught output of a Replaceable stream as a string.
replaceable*ReplaceableThe instance of a Replaceable stream.

<ins>setConfig</ins>(
  config: Object,
): <i>void</i>

此方法允许设置在 stream 方法中创建的 Replaceable 实例的 config 属性。 某些转换可能使用 config 来实现某些功能,例如,替换 @a 中的源字符串-la/import 转换。

<ins>setFile</ins>(
  file: string,
): <i>void</i>

在可替换流上设置 file 属性。 这是导入转换需要找到导入模块的 package.json 文件来检查它是否具有 alamode 属性,以便 esCheck 可以跳过。

<ins>setProps</ins>(
  props: !Object,
): <i>void</i>

将属性分配给转换流。 规则将能够通过它们的 this 上下文访问它们。

Art Deco© Art Deco™ for À La Mode 2020

@a-la/context

npm version

@a-la/context is a a test context for @a-la packages used in alamode transpiler. It will provide a means to record the result of transforms for given rules, as well as emitted events.

yarn add -E @a-la/context

Table Of Contents

API

The package is available by importing its default function:

import ÀLaContext from '@a-la/context'

The context is then passed to the context property of Zoroaster tests suites.

async <ins>stream</ins>(
  rules: Rule|Rule[],
  text: string,
  eventKeys?: string[],
): <i>ReturnType</i>

Creates a Replaceable stream according to a rule or set of rules, asynchronously ends it with passed text and returns the outcome.

In the example below, a transform rule is used to replace an export statement with a module.exports statement, and emit an exports event.

/**
 * A rule to replace an `export function` statement with `module.exports`.
 */
export const exportFunctionRule = {
  re: / *export function ([$_\w][$_\w\d]*)/gm,
  replacement(_, fn) {
    // async
    this.emit('exports', fn)

    // sync
    this.exports = this.exports || []
    this.exports.push(fn)

    return `module.exports.${fn} = function ${fn}`
  },
}

Now, this rule can be tested using the @a-la/context and zoroaster testing framework.

import { equal, deepEqual } from '@zoroaster/assert'
import ÀLaContext from '@a-la/context'
import { exportFunctionRule as rule } from '../../src/rule'

/** @type {Object.<string, (c: ÀLaContext)>} */
const T = {
  context: ÀLaContext,
  async 'replaces the export function'({ stream }) {
    const fn = 'test'
    const data = `export function ${fn}() {}`

    const {
      result,
      events,
      replaceable,
    } = await stream(rule, data, ['exports'])
    const expected = `module.exports.${fn} = function ${fn}() {}`
    equal(result, expected)
    deepEqual(events, {
      exports: [fn],
    })
    deepEqual(replaceable.exports, [fn])
  },
}

export default T
example/test/spec
  ✓  replaces the export function

????  Executed 1 test.

The output of the stream function is an object described below.

ReturnType: Replaceable instance, string result and events map.

NameTypeDescription
events*Object<string, any[]>Emitted events recorded against passed events keys.
result*stringThe caught output of a Replaceable stream as a string.
replaceable*ReplaceableThe instance of a Replaceable stream.

<ins>setConfig</ins>(
  config: Object,
): <i>void</i>

This method allows to set the config property of the Replaceable instance created inside of the stream method. Some transform may use config for certain functionality, e.g., replacing of the source string in the @a-la/import transform.

<ins>setFile</ins>(
  file: string,
): <i>void</i>

Sets the file property on the replaceable stream. This is required by the import transform to find the package.json file of the imported module to check whether it has the alamode property so that the esCheck can be skipped.

<ins>setProps</ins>(
  props: !Object,
): <i>void</i>

Assigns properties to the transform stream. The rules will be able to access them via their this context.

Art Deco© Art Deco™ for À La Mode 2020

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文