Navigation Menu

Toggle navigation Sign in

Search or jump to...

Search code, repositories, users, issues, pull requests...

Search Clear Search syntax tips

Provide feedback

We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback

Saved searches

Use saved searches to filter your results more quickly

Name Query To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} janwilmake / **uit ** Public

Library for performant, modular, low-memory file processing at scale, in the Cloud uuithub.com

License

MIT license 34 stars 1 fork Branches Tags Activity Star Notifications You must be signed in to change notification settings

Additional navigation options

janwilmake/uit

main BranchesTags Go to file Code

Folders and files

Name| Name| Last commit message| Last commit date
---|---|---|---

Latest commit

History

65 Commits
uithub.ingestzip| uithub.ingestzip
uithub.merge| uithub.merge
uithub.otp| uithub.otp
uithub.outputjson| uithub.outputjson
uithub.outputmd| uithub.outputmd
uithub.outputzip| uithub.outputzip
uithub.search| uithub.search
uithub.ziptree| uithub.ziptree
uithub| uithub
.genignore| .genignore
.gitignore| .gitignore
ADR.md| ADR.md
ATTRIBUTION.md| ATTRIBUTION.md
BACKLOG.md| BACKLOG.md
BLOG.md| BLOG.md
CHANGELOG.md| CHANGELOG.md
CONTRIBUTING.md| CONTRIBUTING.md
FAQ.json| FAQ.json
GETTING-STARTED.md| GETTING-STARTED.md
GROWTH.md| GROWTH.md
LICENSE.md| LICENSE.md
README.md| README.md
TODO.md| TODO.md
convention.drawio.svg| convention.drawio.svg
convention.md| convention.md
default-faq.json| default-faq.json
github-url-coverage.md| github-url-coverage.md
process-formdata.drawio.png| process-formdata.drawio.png
xymake.json| xymake.json
View all files

Repository files navigation

UIT - Universal Information Terminal

UIT 是一个用于在云端进行高性能、模块化、低内存海量文件处理的库。 它通过提供一个四步流程来实现:从任何所需的模态收集文件层次结构,应用过滤器和转换,并以任何所需的模态输出它。

重要提示 这是一个早期的预发布版本。有关当前挑战,请参阅 TODO。在 https://uuithub.com 尝试演示。 UIT 是在 uithub 平台的多次迭代后出现的,该平台最初是一个简单的基于 node 的 zipfile 解析器。在构建越来越多的特性和插件时,我发现自己受到了内存的极大限制,因为我没有进行足够的流式传输,并且过早地返回到 JSON(因为使用 Streams API 很棘手!)。因此,随着特性和复杂性的增长,产生了创建更模块化、可扩展的架构的需求,同时牢记良好的 serverless 实践。 FormData 具有悠久的历史 [RFC 1867 (1995)] [RFC 2388 (1998)] [RFC 7578 (2015)],并且深深地嵌入到 web 中。 它提供了一种通过单个请求服务多个文件(二进制和文本)的绝佳方式。 尽管 FormData 还不支持直接从 Request 和其他 Web Standards 中进行流式读取,但 UIT 利用了可以使用 Streams API 使用 multipart-formdata-stream-js 读取中间结果的事实。 UIT 通过提供一种优雅的方式将多个 UIT “模块” 组合在一起以获得最终结果,从而巧妙地模块化了文件层次结构上的过滤器和转换。每个 UIT “模块” 都可以应用路径过滤器、内容过滤器和内容转换,以更改文件层次结构中的文件,所有这些都以流式方式进行,甚至可以在眨眼之间将多个文件层次结构合并在一起。

UIT Modules

到目前为止,UIT 提供了以下可以组合以创建强大的文件处理管道的模块:

每个模块都旨在执行 UIT 四步流程(提取、过滤/转换、合并、输出)中的特定步骤,同时保持性能和低内存使用率。 需要注意的是,这些模块中的每一个都可以独立地作为 cloudflare worker 托管,但是规范并不要求必须托管在 Cloudflare 上,您也可以在其他运行时托管 UIT 模块,只要它符合 UIT Protocol 即可。 另请注意,上面的图表展示了许多尚未存在但可能有利存在的模块。通过开源 UIT,我希望能够让开发人员添加他们需要的模块。

UIT Protocol

UIT Protocol 是表征任何 UIT 模块的约定。 如上图所示,任何 UIT 模块都必须是以下 4 种模块类型之一:

您需要了解才能创建 UIT 模块的唯一正式约定/协议是 UIT 模块使用哪些 FormData 标头。 这些 FormData 标头可以分为标准标头和非标准(自定义)标头:

UIT FormData Headers

Standard FormData Headers

Header | Description | Required
---|---|---
Content-Disposition | 包含 name (应等于文件名)和 filename (原始路径名) | Yes
Content-Type | 指定数据的 MIME 类型 | No
Content-Length | 指示数据的未压缩大小 | No
Content-Transfer-Encoding | 指定数据的编码方式:- binary(二进制文件必需)- 8bit(建议用于基于文本/utf8 的文件)- quoted-printable- base64- 7bit(默认) | No

Non-Standard (Custom) Headers

Header | Description | Format
---|---|---
x-url | 指定定位二进制文件的 URL。在某些情况下,可能需要省略二进制数据,而仅保留 URL 来定位文件。 | URL 字符串
x-file-hash | 存储文件的哈希值 | 哈希字符串
x-error | 指示管道中的处理错误。在模块中发生错误时,应保留原始传入的文件内容。如果遇到,则不应对其进行过滤或处理,以便我们可以看到每个单独文件的错误,它们发生的位置以及使用了哪些文件输入。 | {handler-id};{status};{message}

Contributing to UIT & Plugin System

UIT 旨在成为一种约定,用于在云中流式传输、过滤和转换二进制和文本文件层次结构,并维护可包含到任何 UIT 数据转换流中的第一方和第三方库的精选列表。 第一步,我的目标是创建一个插件系统,该系统允许从 uithub UI 轻松地进行文件过滤和转换。对于预期的插件,请查看 plugins.jsonthe specThe multipart parser 旨在处理所有 FormData 标头,包括任何非标准标头,并且可以成为创建 FormData 过滤器/转换器的有用库。它从原始标头行中提取它们,并使它们在 Part 对象中可用。该库还将原始 headerLines 作为已解析数据结构的一部分进行维护。 如果您希望将新模块添加到此列表或有任何未满足的要求,请打开讨论、问题、pull request 或 reach out 。要创建自己的插件,请按照 GETTING-STARTED.mdCONTRIBUTING.md 进行操作。 UIT 也在寻找赞助商。

Links

Community & Related work