想要取代配置语言的JavaScript子集

2020-08-25 01:20:34

Dnjs是JavaScript的一个纯子集,它想要替换(跨许多宿主语言):

它功能强大,但又很熟悉,减少的语法使其易于实现(Python中的参考实现花了几天时间编写),并且易于推理。目前的状态是非常阿尔法的-参见末尾的TODO。

╔══╗║╔═╗║║║╔═╗║json║dnjs║javascript║║║╚═╝║║║╚═╝║╚══。══╝。

从";./global.dn.js";//要部署的服务的名称导入{Environment}。const serviceNames=[";signup";,";account";]const makeService=(Environment,serviceName)=>;({";name";:serviceName,";ip";:Environment==Environment。Prod?";189.34.0.4";:";127.0.0.1";})导出默认值(环境)=>;serviceNames。Map((v,i)=>;makeService(环境,v))。

让我们使用用Python编写的参考实现来运行这些(下面还介绍了Python API):

DNJS规定了用于制作HTML的函数,这些函数很容易成为Mithrol的子集(这使得编写强大的、可重用的跨语言HTML组件成为可能)。

从";Mithril";import{page}从";导入{page}。/basePage.dn.js";const commentList=(Comments)=>;m(";ul";,Comments。MAP((COMMENT,I)=>;m(";li&34;,`Comment${i}表示:${COMMENT。Text}`)导出默认值(Comments)=>;页面(commentList(Comments))。

<;html>;head<;<;script src=";omeScript.js";>;<;/script>;<;/head>;<;body>;ul<;<;li>;注释0表示:hiya!<;/li>;<;li>;注释1。/body>;<;/html>;

请注意,在没有--html标志的情况下,我们仍然执行以下JSON,向html的转换是一个后处理阶段:

{";tag";:";html";,";attrs";:{";className";:";";},";子";:[{";tag";:";head";,";attrs";:{...。

请记住,dnjs是JavaScript的一个限制,其目标不是实现所有它,就像JSON一样。

从";./b.dn.js";导入{c},从";./b.dn.js";导入b。简单地忽略非本地导入(以便允许将m作为任何内容导入)。

三元表达式,仅形式为a=b?C:d.应该实现相等,但是JavaScript实现了。

Map,filter,map over dict,dict from条目,格式为a.map((v,i)=>;b),a.filter((v,i)=>;b),Object.Entries(A).map(([k,v],i)=>;b),Object.FromEntries(A)。

Hyperscript,与MISCRY-m(";sometag#some-id.some-class.other-class";,{";href";:";foo.js";,";class";:[";另一个类";]},子代)略有兼容,它的评估结果类似于{";标签";:";sometag";,";attrs";:{";Id";:";Some-id";,className:";Some-class其他-class";,";href";:";foo.js";,";Children";:Children}。

`foo${a}`,dedent(`foo${a}`)形式的多行模板。DENTENT应该与此NPM包的工作方式相同。