open-index/open-npm huggingface dataset:
npm package: @sisukas/rivet
Description: Connect your form to Ratufa
Latest version: 1.0.19

# Rivet
Connect your form to Ratufa


## version history

### 1.0.16
* can handle multiple forms that are connected to Ratufa
Sample code to connect another form 
```html
<script>
window.addEventListener("load", function() {
    window.RatufaContainer.loadForm({
        clientFormID: "bottom_form",
        ratufaFormID: "vh2z91q5",
        nodeDomain: "localhost:4121"
    })
});
</script>
```
npm package: @sisukas/tus-js-client
Description: A pure JavaScript client for the tus resumable upload protocol
Latest version: 2.3.1

# tus-js-client
forked and customized from [Tus client](https://github.com/tus/tus-js-client.git)

<img alt="Tus logo" src="https://github.com/tus/tus.io/blob/master/assets/img/tus1.png?raw=true" width="30%" align="right" />

> **tus** is a protocol based on HTTP for *resumable file uploads*. Resumable
> means that an upload can be interrupted at any moment and can be resumed without
> re-uploading the previous data again. An interruption may happen willingly, if
> the user wants to pause, or by accident in case of an network issue or server
> outage.

tus-js-client is a pure **JavaScript** client for the [tus resumable upload protocol](http://tus.io) and can be used inside **browsers**, **Node.js**,
**React Native** and **Apache Cordova** applications.

**Protocol version:** 1.0.0

This branch contains tus-js-client v2. If you are looking for the previous major release, after which [breaking changes](https://tus.io/blog/2020/05/04/tus-js-client-200/) have been introduced, please look at the [v1.8.0 tag](https://github.com/tus/tus-js-client/tree/v1.8.0).

## Example

```js
input.addEventListener("change", function(e) {
    // Get the selected file from the input element
    var file = e.target.files[0]

    // Create a new tus upload
    var upload = new tus.Upload(file, {
        endpoint: "http://localhost:1080/files/",
        retryDelays: [0, 3000, 5000, 10000, 20000],
        metadata: {
            filename: file.name,
            filetype: file.type
        },
        onError: function(error) {
            console.log("Failed because: " + error)
        },
        onProgress: function(bytesUploaded, bytesTotal) {
            var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2)
            console.log(bytesUploaded, bytesTotal, percentage + "%")
        },
        onSuccess: function() {
            console.log("Download %s from %s", upload.file.name, upload.url)
        }
    })

    // Check if there are any previous uploads to continue.
    upload.findPreviousUploads().then(function (previousUploads) {
        // Found previous uploads so we select the first one. 
        if (previousUploads.length) {
            upload.resumeFromPreviousUpload(previousUploads[0])
        }

        // Start the upload
        upload.start()
    })
})
```

## Documentation

* [Installation & Requirements](/docs/installation.md)
* [Usage & Examples](/docs/usage.md)
* [API Reference](/docs/api.md)
* [Contribution Guidelines](/docs/contributing.md)
* [FAQ & Common issues](/docs/faq.md)

## Build status

[![Build Status](https://travis-ci.org/tus/tus-js-client.svg?branch=master)](https://travis-ci.org/tus/tus-js-client)

## License

This project is licensed under the MIT license, see `LICENSE`.
npm package: @sisyphus.js/cli
Description: Protoc cli for sisyphus project on js platform
Author: higan
Latest version: 2.3.0

# @sisyphus.js/cli

[![](https://img.shields.io/npm/v/@sisyphus.js/cli)](https://www.npmjs.com/package/@sisyphus.js/cli)

sisyphus.js 命令行界面，提供一个 `sisygen` 命令用于为 sisyphus.js 工程生成代码。

## Sisygen

`sisygen` 是为了工程化与自动化代码生产而定制的命令，`sisygen` 只有一个参数需要指定，使用 `-O` 或者 `--output` 指定 ts 文件的生成目录，其他大部分的配置都集中在 `package.json` 中，所以
sisygen 命令需要在某个包的根目录下执行。

## 配置 sisyphus.js 工程

### 配置 protobuf 编译源

`sisygen` 会自动将包目录下 proto 文件夹的 `.proto` 文件加入编译源，并生成代码。

这个文件夹的位置可以通过 `package.json` 的 `directories` 字段自定义。

```json
{
  "directories": {
    "proto": "otherDir",
    "lib": "lib"
  }
}
```

此外，sisygen 也可以指定外部包作为编译源，需要将外部包加入依赖，并将包名加入 `package.json` 的 `protobuf.packages` 字段中。

```json
{
  "directories": {
    "lib": "lib"
  },
  "protobuf": {
    "packages": [
      "@sisyphus.js/runtime"
    ]
  }
}
```

### 配置使用的编译插件

`sisygen` 会自动在所有的 devDependencies 中发现定义的编译器插件，并输出在日志中。

```
sisyphus info cli Protoc plugins found in @sisyphus.js/compiler: core, proto, aip
```

将要使用的插件名加入到 `package.json` 的 `protobuf.plugins` 字段中，`sisygen` 就会在编译过程中调用这些插件。

```json
{
  "directories": {
    "lib": "lib"
  },
  "protobuf": {
    "plugins": [
      "core",
      "proto",
      "aip"
    ]
  }
}
```

### 发现 Proto 编译依赖

proto 之间的依赖是非常常见的，多数的 TypeScript/JavaScript 实现都编译将所有 proto 文件整合在一起，并生成所有文件。

`sisygen` 采用 `sisyphus-dist.json` 文件来编排依赖与依赖中已经生成好的代码，这意味着可以将生成的代码推送到 npm 仓库中，并在后续复用这些代码。

`sisygen` 会发现所有 dependencies 中符合 sisyphus.js 工程结构的包，并将 proto 文件加入编译时依赖，另外如果包还包含默认导入（`package.json` 中拥有 main 字段），sisygen
会自动导入此包，这一般用于有拓展字段定义的包，可以将拓展定义导出到 index.js 中，并被 sisyphus.js 编译器使用。

```json
{
  "dependencies": {
    "@sisyphus.js/runtime": "^2.0.0"
  }
}
```

上面的配置导致 `sisygen` 会自动将 `@sisyphus.js/runtime` 中 proto 文件加入编译时依赖中。

### sisyphus-dist.json 模块映射

`sisygen` 会读取 proto 依赖包下面的 `sisyphus-dist.json` 文件，获取已经编译好的文件，并在生成代码时从该依赖包中导入。

当没有 `sisyphus-dist.json` 时，`sisygen` 认为所有生成的 ts 文件都在同一个根目录下，并通过 proto 文件的结构导入相应的依赖。

```typescript
// 当前文件 /google/showcase/v1beta1/echo.ts

// 目标导入依赖 /google/protobuf/duration.ts
import {Duration} from '../../protobuf/duration'
```

当有 `@sisyphus.js/runtime` 中拥有 `sisyphus-dist.json` 并包含 `google/protobuf/duration.ts`。

`sisygen` 会自动将 `/google/protobuf/duration` 映射为 `@sisyphus.js/runtime/lib/google/protobuf/duration`。

```typescript
// 当前文件 /google/showcase/v1beta1/echo.ts

// 目标导入依赖 /google/protobuf/duration.ts
import {Duration} from '@sisyphus.js/runtime/lib/google/protobuf/duration'
```

映射规则为`包名 + lib 文件夹 + 依赖模块`，例如上述例子中，就由 `@sisyphus.js/runtime`，`lib`，`google/protobuf/duration` 三部分构成。

其中 lib 文件夹的值由 `package.json` 的 `directories.lib` 值决定，默认值为 `lib`。

## package.json 属性

由 sisyphus.js 拓展的 `package.json` 增加了以下属性来配置 sisyphus.js 工程。

```json5
{
  "sisyphus": {
    // 注册 sisygen 的编译器插件
    "plugins": {
      "core": "lib/core/index.js",
      "proto": "lib/proto/index.js",
      "aip": "lib/aip/index.js"
    }
  },
  "protobuf": {
    // 将指定名字的插件加入编译过程
    "plugins": [
      "core",
      "aip"
    ],
    // 将指定的包加入编译源
    "packages": [
      "@sisyphus.js/google"
    ]
  }
}
```
npm package: @sisyphus.js/compiler
Description: Precompiled google common protos by sisyphus protobuf compiler
Author: higan
Latest version: 2.3.0

# @sisyphus.js/compiler

[![](https://img.shields.io/npm/v/@sisyphus.js/compiler)](https://www.npmjs.com/package/@sisyphus.js/compiler)

sisyphus.js 编辑器，包含了三个基础插件的实现，分别是用于生成核心模块的 `core` 插件，用于生成支持 protobuf 二进制格式代码的 `proto` 插件与用于支持 aip 标准的 `aip` 插件。

## 插件原理

插件采用消息与订阅者模型来实现编译插件，将状态（State）作为消息，发放给能够处理此状态的生成器（Generator）。

```typescript
export interface GeneratingState<TKind extends string, TParent, TDesc, TTarget> {
    readonly parent: TParent

    readonly kind: TKind

    readonly descriptor: TDesc

    readonly target: TTarget

    generatedElements: number

    continue: boolean
}
```

每个状态包含一个用于匹配订阅者的 `kind` 字段，`kind` 字段一致状态和生成器会匹配，并执行生成器的生成过程。

`parent` 字段则表示状态的父状态，`descriptor` 表示当前状态的上下文，一般是 `MessageDescriptor` 之类的各种 `Descriptor`。

`target` 字段表示这次状态生成的结果，一般为 `CodeBuilder`。

`generatedElements` 是用于判断此次生成是否是空结果，当子状态进行了有效的生成时，将此字段递增 1。

`continue` 则表示这次生成后还需不需要继续传递到下一个同 `kind` 的生成器。

```typescript
export type MessageGeneratingState = GeneratingState<'message', FileGeneratingState | MessageGeneratingState, MessageDescriptor, CodeBuilder>

export type FieldGeneratingState = GeneratingState<'field', MessageGeneratingState, FieldDescriptor, CodeBuilder>
```

使用 `generate` 函数用于注册一个生成器，只需要提供 kind 与生成过程就可以注册一个生成器。

```typescript
generate<FieldGeneratingState>('field', it => {
    // 生成器过程
})
```

## 子状态

调用 `advance` 方法既可将子状态广播给其他的生成器。

```typescript
for (let service of it.descriptor.services) {
    advance<ServiceGeneratingState>({
        kind: 'service', parent: it, descriptor: service, target: builder
    })
}
```

`advance` 方法会自动匹配 kind，将状态交付给对应的生成器，并在结束生成的时候，将子状态的 `generatedElements` 加到父状态中。

## 插件入口点

使用一个单 js 文件 import 所有的 生成器代码，就可以将这个 js 文件当作插件的入口点。

```typescript
import './enum'
import './extension'
import './field'
import './file'
import './message'
import './service'
import '../wellknown/core'
```

将入口点文件注册在 `package.json` 的 `sisyphus.plugins` 字段就可以被 `sisygen` 发现。

## 插件覆盖

使用 `state.continue` 字段可以控制是否将状态交由下一个生成器处理，将字段设置为 `false` 就可以就此中断此 state 的生成过程。

值得注意的的是生成器的优先顺序是倒序，即最后注册的生成器最先收到 state。

## CodeBuilder 与 ImportManager

CodeBuilder 是一个用于生成 ts 代码的工具类，用于托管 CodeBlock 状态，代码缩进，换行等等。

```typescript
builder.beginBlock(`export namespace ${it.descriptor.interfaceName()}`)
builder.normalize().appendLn(`export const name = '${it.descriptor.fullname()}'`)
builder.endBlock()
```

ImportManager 则可以管理 ts 代码的模块导入关系，并自动生成 import 语句，支持 import 冲突检测，自动别名等等。

```typescript
const importedName = builder.importManager.import('@sisyphus.js/runtime', 'long')
```
npm package: @sisyphus.js/google
Description: Precompiled google common protos by sisyphus protobuf compiler
Author: higan
Latest version: 2.3.0

# @sisyphus.js/google

[![](https://img.shields.io/npm/v/@sisyphus.js/google)](https://www.npmjs.com/package/@sisyphus.js/google)

预编译的由 google 定义的特殊 protos，仅包含 Json 接口，定义了 Http/gRPC 转码标准。
如果采用 `@sisyphus.js/transport-aip`，需要将此包加入 dependencies 中。
npm package: @sisyphus.js/google.aip
Description: Precompiled google common aip clients by sisyphus protobuf compiler
Author: higan
Latest version: 2.3.0

# @sisyphus.js/google.aip

[![](https://img.shields.io/npm/v/@sisyphus.js/google.aip)](https://www.npmjs.com/package/@sisyphus.js/google.aip)

预编译的由 google 定义的特殊 protos 的 AIP 标准客户端，目前只包含 long running operation 客户端。
npm package: @sisyphus.js/google.proto
Description: Precompiled google common protos with full protobuf by sisyphus protobuf compiler
Author: higan
Latest version: 2.3.0

# @sisyphus.js/google.proto

[![](https://img.shields.io/npm/v/@sisyphus.js/google.proto)](https://www.npmjs.com/package/@sisyphus.js/google.proto)

预编译的由 google 定义的特殊 protos，包含二进制序列化/反序列化支持。  
如果采用 `@sisyphus.js/transport-aip`，需要将此包加入 devDependencies 中，这样才能将拓展定义注册到编译过程中。
npm package: @sisyphus.js/protoc
Description: Install protoc for current platform.
Author: higan
Latest version: 2.3.0

# @sisyphus.js/protoc

[![](https://img.shields.io/npm/v/@sisyphus.js/protoc)](https://www.npmjs.com/package/@sisyphus.js/protoc)

为当前的运行环境自动下载 protoc release，并且提供了 npm script 快速访问 protoc 命令的方式。

## 当命令行使用

@sisyphus.js/protoc 提供了 protoc 命令，可以在 package.json 的 script 字段中直接使用。

```json
{
  "scripts": {
    "codeGen": "protoc -I /protoRoot..."
  }
}
```

## 当库使用

也可以从 @sisyphus.js/protoc 导入 protoc 函数用于调用 protoc 命令。

```typescript
import protoc from '@sisyphus.js/protoc'

await protoc(['-I', '/protoRoot'])
```

## 自定义 protoc 版本

protoc 会从当前运行目录下的 package.json 文件中读取设定的 protoc 版本，当未指定时默认采用 `latest`。

```json
{
  "protobuf": {
    "version": "21.2"
  }
}
```
npm package: @sisyphus.js/runtime.proto
Description: Protobuf full runtime for sisyphus project on js platform, support protobuf binary format.
Author: higan
Latest version: 2.3.0

# @sisyphus.js/runtime.proto

[![](https://img.shields.io/npm/v/@sisyphus.js/runtime.proto)](https://www.npmjs.com/package/@sisyphus.js/runtime.proto)

sisyphus.js Protobuf 运行时，用于仅支持 Protobuf 二进制格式，包含预编译的 well-known protos 的序列化/反序列化支持。

## 拓展同名 namespace

sisyphus.js 子插件都通过拓展消息实体同名的 namespace 提供更多的功能。

sisyphus.js 的 proto 编辑插件会为同名 namespace 添加一个 descriptor 字段与两个用于反序列与序列化的方法。

```typescript
// 拓展 core 编译的核心模块定义
declare module './any' {
    namespace Any {
        // 添加 descriptor 用于运行时反射与保存序列化信息
        let descriptor: MessageDescriptor<Any>

        // 添加 binaryify 方法用于序列化消息实体
        function binaryify(v: Any): Uint8Array

        // 添加 parse 方法用于反序列化消息实体
        function parse(buffer: Uint8Array): Any
    }
}

// 将 core 编译的核心模块重新导出，可以在自模块中访问完整的核心模块定义。
export * from './any'
```
npm package: @sisyphus.js/transport-aip
Description: gRPC transport based on AIP spec(gRPC to HTTP/Json Transcoding).
Author: higan
Latest version: 2.3.0

# @sisyphus.js/transport-aip

[![](https://img.shields.io/npm/v/@sisyphus.js/transport-aip)](https://www.npmjs.com/package/@sisyphus.js/transport-aip)

sisyphus.js AIP 转码运行时，用于支持 [HTTP 与 gRPC 转码](https://aip.bybutter.com/127) 标准，基于 Fetch API 的 HTTP 客户端实现。

## 拓展同名 namespace

sisyphus.js 子插件都通过拓展实体同名的 namespace 提供更多的功能。

sisyphus.js 的 aip 编辑插件会为服务同名 namespace 添加一个 descriptor 字段与一个方法用来构造客户端。

```typescript
// 拓展 core 编译的核心模块定义
declare module './operations' {
    namespace Operations {
        // 用于构建客户端的描述信息
        let aipDescriptor: ServiceDescriptor

        // 用与构建客户端的方法
        function aipClient(rpc: Rpc): Operations
    }
}

export * from './operations'
```

只需要将 transcoding 方法构造的 Rpc 实例传入 aipClient 方法，就可以构造客户端。

```typescript
import {EchoResponse} from './google/showcase/v1beta1/echo'
import {Echo} from './google/showcase/v1beta1/echo.aip'
import {transcoding} from '@sisyphus.js/transport-aip'

const client = Echo.aipClient(transcoding('http://localhost:8080'))
const output: EchoResponse = await client.echo({
    content: "Hello world!"
})
```

## TranscodingListener

通过 TranscodingListener 可以在 HTTP 请求构建后对请求结构进一步修改，或者在响应到达时处理错误等等。

```typescript
import {AttributeContext} from './attribute_context'

Echo.aipClient(transcoding('http://localhost:8080'), {
    onRequest: function (method, input, request) {
        return new Request(request, {
            mode: 'cors',
            headers: {
                ...request.headers,
                Authorization: "Bear MyToken",
            }
        })
    },
    onResponse: function (method, request, response) {
        if (!response.ok) {
        }
    }
})
```