npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nextcode

v2021.8.1

Published

## 设计思路

Downloads

4

Readme

NextCode

设计思路

NextCode 引擎采用 AST 的思路+SOP 的思想+JSON 的结构进行设计

  • AST:抽象语法树,编译原理中会对对代码进行词法分析、语法分析,形成抽象语法树,引擎直接进行抽象语法树定义,编写业务逻辑
  • SOP:面向服务编程,把所有可执行体:js 函数、http、rpc 包装成一种服务,并且统一为 JSON 入参、出参,这样达到最大程度的数据整合和集成
  • POP:面向插件编程,把功能包装成一个个独立的可视化插件,实现可视化的插件编程
  • JSON:目前最通用的一种数据结构,数据和流程都使用 JSON 来描述,同时也方便图形化操作节点和属性

支持模型

  • 连接模型:使用 next 属性关联,将一系列节点串联起来执行,使用 pipeline 方式执行
  • 嵌套模型:嵌套模型支持子流程的执行,类似于编程语言的大括号{},大括号可以嵌套,if、while、for 等都是可以嵌套的
  • 引用模型:支持节点引用执行,能够实现循环、递归的逻辑
  • 异步模型:执行到一个异步节点时暂停,等待一个事件唤醒再次执行,实现审批流效果

部署说明

使用 webpack 打包,npm publish 发布

使用

node 环境使用

//加载NextCode
var NextCode = require("nextcode/NextCode");

//执行NextCode
var flow = {"package":"nextcode", "plugin":"eval", "service":"add"};
var input = {"x":2,"y":3}

//执行NextCode
var output = new NextCode().execute(flow, input);

//output => {"x":5,"y":2}

chrome 环境使用

<!-- 加载NextCode -->
<script src="https://unpkg.com/nextcode/dist/NextCode.js"></script>

<script>
var flow = {"package":"nextcode", "plugin":"eval", "service":"add"};
var input = {"x":2,"y":3}

//执行NextCode
var output = new NextCode().execute(flow, input);

//output => {"x":5,"y":2}
</scritp>

上下文和插件

插件

由于 node 环境调用 http 的方式和 chrome 环境的方式不一样,所以需要不同环境的插件实现

设置插件实现

//比如注入http的适配器
NextCode.setPluginAdapter({
    "implement": {
        http: {
            httpPost: httpPost,//执行post的函数
            httpGet: httpGet,//执行get的函数
        }
    }
});

这样就可以执行 http.get 和 http.post 节点,同理 node 环境还可以实现 MongoDB 和 MySQL 等数据库插件适配器

节点类型

所有的功能都通过节点来实现,所有的逻辑通过节点与节点之间连线来实现,节点按照从上往下,从左往右的顺序执行。

flow(流程类型)(稳定)

  • start(开始) :开始节点,只允许一个开始启动,只有连出边,没有连入边
  • stop(结束) :结束节点,只有连入边,没有连出边
  • empty(空) :空节点,没有任何逻辑,透传参数
  • sequence(顺序) :流程节点数组按照数组顺序执行,具有相同的入参
  • pipe(管道) :流程节点数组按照数组顺序执行,上一个节点出参是下一个节点的入参
  • switch(分支):根据分支字段,选择节点执行
  • foreach(遍历):遍历入参数组,依次处理
  • loop(次数循环):循环 N 次执行
  • while(条件循环):条件循环
  • break(退出):在循环体中退出

eval(运算类型)(暂定)

  • init(初始化):计算数据初始化
  • assign(赋值运行):变量赋值
  • eval(计算):计算表达式
  • add(加法):x + y
  • sub(减法):x - y
  • mul(乘法):x * y
  • div(除法):x / y
  • mod(取模):x % y
  • pow(平方):x ^ 2

engine(引擎类型)(暂定)

  • info(信息):引擎内部信息
  • mix(混入):混入节点
  • return(返回):返回数据,退出整个流程
  • cache(缓存):相同入参,从缓存中获取
  • delete(删除字段):删除入参中的字段
  • log(日志):输出入参和出参,已经内部状态信息

stack(栈)(暂定)

  • push(入栈):
  • pop(出栈):
  • peak(栈顶元素):
  • reverse(反转):栈内元素反转
  • join(拼接): 数组栈元素拼接在一起
  • int2char: 栈内元素转换(待定)
  • replace: 栈内元素替换
  • mix: 混入

db(数据库)(稳定)

  • query: 查询
  • insert: 插入
  • update: 更新
  • delete: 删除

git(稳定)

  • read: 更新 git,然后读取文件
  • write: 写文件,提交 git
  • delete: 删除文件,提交 git
  • list: 拉取 git,获取指定目录的内容

http(稳定)

  • post: 发出 post 请求

'implement'

  • redis: 执行 redis 命令

节点属性

节点属性分公共属性和节点特有属性,公共属性是所有节点都适用的属性

公共属性

  • type:节点类型(字符串、必填)
  • id:节点 id,引用时使用 id(字符串、必填)
  • "service":节点名称,体现节点功能(字符串、必填)
  • text:节点文本,在流程图节点中展示(字符串、必填)
  • next:下一个执行节点,支持:节点 id、节点、节点数组

特有属性

节点特有的属性,下面依次说明

flow.start(起始节点)

只有一个起始节点

  • subflow:子流程,支持:节点 id、节点、节点数组

flow.stop(终止节点)

允许多个终止节点,不能有连出的边

flow.empty(空节点)

  • subflow:子流程,支持:节点 id、节点、节点数组

flow.sequence(顺序)

把 subflow 中的子节点按照顺序执行,所有子节点有相同入参

  • subflow:子流程,支持:节点 id、节点、节点数组

flow.pipe(管道)

把 subflow 中的子节点按照串行执行,上一个节点的出参是下一个节点的入参

  • subflow:子流程,支持:节点 id、节点、节点数组

flow.switch(分支)

  • subflow:子流程,支持:节点 id、节点、节点数组
  • field:分支的字段,最终会转化为字符串类型值来判断,比如是 boolean 类型,会转化为"true"来判断(支持表达式)(字符串类型,、必填)
  • case:分支节点定义,比如:{"pass":0,"back":1,"default":1},值为 pass 执行第 0 个子流程,back 时,执行第 1 个子流程,其他默认情况执行 1 流程(对象类型、必填)

flow.foreach(遍历)

  • field:字符串类型,指明要遍历的数组,field 对应入参字段必须是数组
  • subflow:子流程,支持:节点 id、节点、节点数组

flow.loop(次数循环)

  • times:整数类型(支持表达式),要循环的次数(默认为 1)
  • field:结果方法 field 字段中,默认为 array
  • subflow:子流程,支持:节点 id、节点、节点数组

flow.while(条件循环)

  • field:循环值,相当于 while(input[field]) {do what}
  • subflow:子流程,支持:节点 id、节点、节点数组

flow.break(退出)

循环体中【sequence、pipe、foreach、while、loop】退出,比如【step1、step2、break、step3】【stepA、stepB】,step3 不执行,其他都执行

  • breakId:跳出到指定的节点

db.query(查询)

查询数据库表数据,入参

  • input
    • table: 表名
    • where: 查询条件
  • output
    • rows: 数据行

db.insert(插入)

  • input
    • table: 表名
    • data: json 数据
  • output
    • 结果透传

db.update(更新)

  • input
    • table: 表名
    • data: json 数据
  • output
    • 结果透传

db.delete(删除)

  • input
    • table: 表名
    • where: json 数据
  • output
    • 结果透传

git.read(读取)

  • input
    • path: json 文件路径
  • output
    • 文件内容

git.write(写入)

  • input
    • path: json 文件路径
    • json: json 数据
  • output
    • message: 成分与否消息

git.delete(删除)

  • input
    • path: json 文件路径
  • output
    • message: 删除结果消息

git.list(列出)

  • input
    • path: json 文件路径
  • output
    • name: 当前路径名称
    • files: 文件名称字符串数组
    • dirs: 目录字符串数组