Mercurial > hg > nginx-site
changeset 1846:bfac366fa1e4
Added article about nginScript.
author | Yaroslav Zhuravlev <yar@nginx.com> |
---|---|
date | Thu, 01 Dec 2016 20:09:24 +0300 |
parents | c0f9510ea9c6 |
children | 7eb5e1cff842 |
files | xml/en/GNUmakefile xml/en/docs/http/ngx_http_js_module.xml xml/en/docs/index.xml xml/en/docs/njs_about.xml xml/en/docs/stream/ngx_stream_js_module.xml xml/ru/GNUmakefile xml/ru/docs/http/ngx_http_js_module.xml xml/ru/docs/index.xml xml/ru/docs/njs_about.xml xml/ru/docs/stream/ngx_stream_js_module.xml |
diffstat | 10 files changed, 614 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/xml/en/GNUmakefile +++ b/xml/en/GNUmakefile @@ -24,6 +24,7 @@ DOCS = \ contributing_changes \ beginners_guide \ configure \ + njs_about \ FAQ = \ welcome_nginx_facebook \
--- a/xml/en/docs/http/ngx_http_js_module.xml +++ b/xml/en/docs/http/ngx_http_js_module.xml @@ -9,14 +9,14 @@ <module name="Module ngx_http_js_module" link="/en/docs/http/ngx_http_js_module.html" lang="en" - rev="2"> + rev="3"> <section id="summary"> <para> The <literal>ngx_http_js_module</literal> module is used to implement location and variable handlers -in nginScript — +in <link doc="../njs_about.xml">nginScript</link> — a subset of the JavaScript language. </para>
--- a/xml/en/docs/index.xml +++ b/xml/en/docs/index.xml @@ -8,7 +8,7 @@ <article name="nginx documentation" link="/en/docs/" lang="en" - rev="35" + rev="36" toc="no"> @@ -94,6 +94,14 @@ <list type="bullet"> <listitem> +<link doc="njs_about.xml"/> +</listitem> + +</list> + +<list type="bullet"> + +<listitem> <link url="http://www.aosabook.org/en/nginx.html">Chapter “nginx” in “The Architecture of Open Source Applications”</link> </listitem>
new file mode 100644 --- /dev/null +++ b/xml/en/docs/njs_about.xml @@ -0,0 +1,293 @@ +<?xml version="1.0"?> + +<!-- + Copyright (C) Nginx, Inc. + --> + +<!DOCTYPE article SYSTEM "../../../dtd/article.dtd"> + +<article name="About nginScript" + link="/en/docs/njs_about.html" + lang="en" + rev="1"> + +<section id="summary"> + +<para> +nginScript is a subset of the JavaScript language that allows +implementing location and variable handlers in +<link doc="http/ngx_http_js_module.xml">http</link> and +<link doc="stream/ngx_stream_js_module.xml">stream</link>. +nignScript is created in compliance with +<link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link> +with some +<link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link> +extensions. +The compliance is still evolving. +</para> + +</section> + + +<section id="supported" name="What is currently supported"> + +<para> +<list type="bullet"> + +<listitem> +boolean values, numbers, strings, objects, arrays, +functions, and regular expressions +</listitem> + +<listitem> +ES5.1 operators +</listitem> + +<listitem> +ES5.1 statements: <literal>var</literal>, <literal>if</literal>, +<literal>else</literal>, <literal>switch</literal>, <literal>for</literal>, +<literal>for in</literal>, <literal>while</literal>, +<literal>do while</literal>, <literal>break</literal>, +<literal>continue</literal>, <literal>return</literal>, <literal>try</literal>, +<literal>catch</literal>, <literal>throw</literal>, <literal>finally</literal> +</listitem> + +<listitem> +ES6 <literal>Number</literal> and +<literal>Math</literal> properties and methods +</listitem> + +<listitem> +<literal>String</literal> methods: +<list type="bullet"> + +<listitem> +ES5.1: +<literal>fromCharCode</literal>, <literal>concat</literal>, +<literal>slice</literal>, <literal>substring</literal>, +<literal>substr</literal>, <literal>charAt</literal>, +<literal>charCodeAt</literal>, <literal>indexOf</literal>, +<literal>lastIndexOf</literal>, <literal>toLowerCase</literal>, +<literal>toUpperCase</literal>, <literal>trim</literal>, +<literal>search</literal>, <literal>match</literal>, <literal>split</literal>, +<literal>replace</literal> +</listitem> + +<listitem> +ES6: +<literal>fromCodePoint</literal>, <literal>codePointAt</literal>, +<literal>includes</literal>, <literal>startsWith</literal>, +<literal>endsWith</literal>, <literal>repeat</literal> +</listitem> + +<listitem> +non-standard: +<literal>fromUTF8</literal>, <literal>toUTF8</literal>, +<literal>fromBytes</literal>, <literal>toBytes</literal> +</listitem> +</list> + +</listitem> + +<listitem> +<literal>Object</literal>: +rudimentary <literal>Object.create()</literal> support without properties list +</listitem> + +<listitem> +<literal>Array</literal> methods: +<list type="bullet"> +<listitem> +ES5.1: +<literal>isArray</literal>, <literal>slice</literal>, <literal>splice</literal>, +<literal>push</literal>, <literal>pop</literal>,<literal>unshift,</literal> +<literal>shift</literal>, <literal>reverse</literal>, <literal>sort</literal>, +<literal>join</literal>, <literal>concat</literal>, <literal>indexOf</literal>, +<literal>lastIndexOf</literal>, <literal>forEach</literal>, +<literal>some</literal>, <literal>every</literal>, <literal>filter</literal>, +<literal>map</literal>, <literal>reducde</literal>, +<literal>reduceRight</literal> +</listitem> + +<listitem> +ES6: <literal>includes</literal> +</listitem> +</list> + +</listitem> + +<listitem> +ES5.1 <literal>Function</literal> methods: +<literal>call</literal>, <literal>apply</literal>, <literal>bind</literal> +</listitem> + +<listitem> +ES5.1 <literal>RegExp</literal> methods: +<literal>test</literal>, <literal>exec</literal> +</listitem> + +<listitem> +ES5.1 <literal>Date</literal> methods +</listitem> + +<listitem> +ES5.1 global functions: +<literal>isFinite</literal>, <literal>isNaN</literal>, +<literal>parseFloat</literal>, <literal>parseInt</literal>, +<literal>decodeURI</literal>, <literal>decodeURIComponent</literal>, +<literal>encodeURI</literal>, <literal>encodeURIComponent</literal> +</listitem> + +</list> +</para> + +</section> + + +<section id="not_supported" name="What still is not supported"> + +<para> +<list type="bullet"> + +<listitem> +broken scopes support +</listitem> + +<listitem> +ES6 <literal>let</literal> and <literal>const</literal> declarations +</listitem> + +<listitem> +cycle <literal>for</literal> with <literal>var</literal> in declaration +(<literal>for (var...</literal>) +</listitem> + +<listitem> +nested functions +</listitem> + +<listitem> +closures +</listitem> + +<listitem> +labels +</listitem> + +<listitem> +<literal>arguments</literal> array +</listitem> + +<listitem> +<literal>eval</literal> function +</listitem> + +<listitem> +<literal>JSON</literal> object +</listitem> + +<listitem> +<literal>Error</literal> object +</listitem> + +<listitem> +<literal>setTimeout</literal>, <literal>setInterval</literal>, +<literal>setImmediate</literal> functions +</listitem> + +<listitem> +functions hoisting +</listitem> + +<listitem> +non-integer fractions (<literal>.235</literal>), +exponential (<literal>3.35e10</literal>), +binary (<literal>0b0101</literal>), +octal (<literal>0o77</literal>), +hexadecimal (<literal>0x1123</literal>) literals +</listitem> + +</list> +</para> + +</section> + + +<section id="install" name="Download and install"> + +<para> +nginScript is available in two modules: +<list type="bullet"> + +<listitem> +<link doc="http/ngx_http_js_module.xml">ngx_http_js_module</link> +</listitem> + +<listitem> +<link doc="stream/ngx_stream_js_module.xml">ngx_stream_js_module</link> +</listitem> + +</list> +Both modules are not built by default, +they should be either compiled from the sources +or installed as a Linux package. +</para> + + +<section id="install_package" name="Installing as a Linux package"> +<para> +For Linux, nginScript modules +<link doc="../linux_packages.xml" id="dynmodules">packages</link> can be used: +<list type="bullet"> + +<listitem> +<literal>nginx-module-njs</literal> — nginScript +<link doc="ngx_core_module.xml" id="load_module">dynamic</link> modules +</listitem> + +<listitem> +<literal>nginx-module-njs-dbg</literal> — debug symbols for the +<literal>nginx-module-njs</literal> package +</listitem> + +</list> +</para> + +</section> + + +<section id="install_sources" name="Building from the sources"> + +<para> +The <link url="http://hg.nginx.org/njs">repository</link> +with nginScript sources can be cloned with the following command: +(requires <link url="https://www.mercurial-scm.org">Mercurial</link> client): +<example> +hg clone http://hg.nginx.org/njs +</example> +Then the modules should be compiled using the +<literal>--add_module</literal> configuration parameter: +<example> +./configure --add-module=<value>path-to-njs</value>/nginx +</example> +The modules can also be built as +<link doc="ngx_core_module.xml" id="load_module">dynamic</link>: +<example> +./configure --add-dynamic_module=<value>path-to-njs</value>/nginx +</example> +</para> + +</section> + +</section> + + +<section id="issues" name="Known Issues"> + +<para> +Both modules are experimental, caveat emptor applies. +</para> + +</section> + +</article>
--- a/xml/en/docs/stream/ngx_stream_js_module.xml +++ b/xml/en/docs/stream/ngx_stream_js_module.xml @@ -9,13 +9,13 @@ <module name="Module ngx_stream_js_module" link="/en/docs/stream/ngx_stream_js_module.html" lang="en" - rev="2"> + rev="3"> <section id="summary"> <para> The <literal>ngx_stream_js_module</literal> module is used to implement -handlers in nginScript — +handlers in <link doc="../njs_about.xml">nginScript</link> — a subset of the JavaScript language. </para>
--- a/xml/ru/GNUmakefile +++ b/xml/ru/GNUmakefile @@ -19,6 +19,7 @@ DOCS = \ contributing_changes \ beginners_guide \ configure \ + njs_about \ FAQ = \ sys_errlist \
--- a/xml/ru/docs/http/ngx_http_js_module.xml +++ b/xml/ru/docs/http/ngx_http_js_module.xml @@ -9,14 +9,14 @@ <module name="Модуль ngx_http_js_module" link="/ru/docs/http/ngx_http_js_module.html" lang="ru" - rev="2"> + rev="3"> <section id="summary"> <para> Модуль <literal>ngx_http_js_module</literal> позволяет задавать обработчики location и переменных -на nginScript — +на <link doc="../njs_about.xml">nginScript</link> — подмножестве языка JavaScript. </para>
--- a/xml/ru/docs/index.xml +++ b/xml/ru/docs/index.xml @@ -8,7 +8,7 @@ <article name="nginx: документация" link="/ru/docs/" lang="ru" - rev="35" + rev="36" toc="no"> @@ -95,6 +95,14 @@ <list type="bullet"> <listitem> +<link doc="njs_about.xml"/> +</listitem> + +</list> + +<list type="bullet"> + +<listitem> <link url="http://www.aosabook.org/en/nginx.html">Глава “nginx” из книги “The Architecture of Open Source Applications”</link> [en] </listitem>
new file mode 100644 --- /dev/null +++ b/xml/ru/docs/njs_about.xml @@ -0,0 +1,293 @@ +<?xml version="1.0"?> + +<!-- + Copyright (C) Nginx, Inc. + --> + +<!DOCTYPE article SYSTEM "../../../dtd/article.dtd"> + +<article name="Информация о nginScript" + link="/ru/docs/njs_about.html" + lang="ru" + rev="1"> + +<section id="summary"> + +<para> +nginScript - это подмножество языка JavaScript, который позволяет +задавать обработчики location и переменных в +<link doc="http/ngx_http_js_module.xml">http</link> и +<link doc="stream/ngx_stream_js_module.xml">stream</link>. +nignScript совместим с +<link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link> +c некоторыми расширениями +<link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link>. +Совместимость находится в стадии развития. +</para> + +</section> + + +<section id="supported" name="Готовая функциональность"> + +<para> +<list type="bullet"> + +<listitem> +логические значения, числа, строки, объекты, массивы, +функции и регулярные выражения +</listitem> + +<listitem> +ES5.1 операторы +</listitem> + +<listitem> +ES5.1 инструкции: <literal>var</literal>, <literal>if</literal>, +<literal>else</literal>, <literal>switch</literal>, <literal>for</literal>, +<literal>for in</literal>, <literal>while</literal>, +<literal>do while</literal>, <literal>break</literal>, +<literal>continue</literal>, <literal>return</literal>, <literal>try</literal>, +<literal>catch</literal>, <literal>throw</literal>, <literal>finally</literal> +</listitem> + +<listitem> +ES6 методы и свойства <literal>Number</literal> и +<literal>Math</literal> +</listitem> + +<listitem> +Методы <literal>String</literal>: +<list type="bullet"> + +<listitem> +ES5.1: +<literal>fromCharCode</literal>, <literal>concat</literal>, +<literal>slice</literal>, <literal>substring</literal>, +<literal>substr</literal>, <literal>charAt</literal>, +<literal>charCodeAt</literal>, <literal>indexOf</literal>, +<literal>lastIndexOf</literal>, <literal>toLowerCase</literal>, +<literal>toUpperCase</literal>, <literal>trim</literal>, +<literal>search</literal>, <literal>match</literal>, <literal>split</literal>, +<literal>replace</literal> +</listitem> + +<listitem> +ES6: +<literal>fromCodePoint</literal>, <literal>codePointAt</literal>, +<literal>includes</literal>, <literal>startsWith</literal>, +<literal>endsWith</literal>, <literal>repeat</literal> +</listitem> + +<listitem> +нестандартные: +<literal>fromUTF8</literal>, <literal>toUTF8</literal>, +<literal>fromBytes</literal>, <literal>toBytes</literal> +</listitem> +</list> + +</listitem> + +<listitem> +<literal>Object</literal>: +рудиментарная поддержка <literal>Object.create()</literal> без списка свойств +</listitem> + +<listitem> +Методы <literal>Array</literal>: +<list type="bullet"> +<listitem> +ES5.1: +<literal>isArray</literal>, <literal>slice</literal>, <literal>splice</literal>, +<literal>push</literal>, <literal>pop</literal>,<literal>unshift,</literal> +<literal>shift</literal>, <literal>reverse</literal>, <literal>sort</literal>, +<literal>join</literal>, <literal>concat</literal>, <literal>indexOf</literal>, +<literal>lastIndexOf</literal>, <literal>forEach</literal>, +<literal>some</literal>, <literal>every</literal>, <literal>filter</literal>, +<literal>map</literal>, <literal>reducde</literal>, +<literal>reduceRight</literal> +</listitem> + +<listitem> +ES6: <literal>includes</literal> +</listitem> +</list> + +</listitem> + +<listitem> +ES5.1 методы <literal>Function</literal>: +<literal>call</literal>, <literal>apply</literal>, <literal>bind</literal> +</listitem> + +<listitem> +ES5.1 методы <literal>RegExp</literal>: +<literal>test</literal>, <literal>exec</literal> +</listitem> + +<listitem> +ES5.1 методы <literal>Date</literal> +</listitem> + +<listitem> +ES5.1 глобальные функции: +<literal>isFinite</literal>, <literal>isNaN</literal>, +<literal>parseFloat</literal>, <literal>parseInt</literal>, +<literal>decodeURI</literal>, <literal>decodeURIComponent</literal>, +<literal>encodeURI</literal>, <literal>encodeURIComponent</literal> +</listitem> + +</list> +</para> + +</section> + + +<section id="not_supported" name="Функциональность в разработке"> + +<para> +<list type="bullet"> + +<listitem> +поддержка broken scopes +</listitem> + +<listitem> +ES6 объявления <literal>let</literal> и <literal>const</literal> +</listitem> + +<listitem> +цикл <literal>for</literal> с <literal>var</literal> в объявлении +(<literal>for (var...</literal>) +</listitem> + +<listitem> +вложенные функции +</listitem> + +<listitem> +замыкания +</listitem> + +<listitem> +labels +</listitem> + +<listitem> +массив <literal>arguments</literal> +</listitem> + +<listitem> +функция <literal>eval</literal> +</listitem> + +<listitem> +объект <literal>JSON</literal> +</listitem> + +<listitem> +объект <literal>Error</literal> +</listitem> + +<listitem> +функции <literal>setTimeout</literal>, <literal>setInterval</literal>, +<literal>setImmediate</literal> +</listitem> + +<listitem> +поднятие функций +</listitem> + +<listitem> +дроби без целой части (<literal>.235</literal>), +экспоненциальные записи (<literal>3.35e10</literal>), +двоичные (<literal>0b0101</literal>), +восьмеричные (<literal>0o77</literal>), +шестнадцатеричные (<literal>0x1123</literal>) литералы +</listitem> + +</list> +</para> + +</section> + + +<section id="install" name="Загрузка и установка"> + +<para> +nginScript доступен в двух модулях: +<list type="bullet"> + +<listitem> +<link doc="http/ngx_http_js_module.xml">ngx_http_js_module</link> +</listitem> + +<listitem> +<link doc="stream/ngx_stream_js_module.xml">ngx_stream_js_module</link> +</listitem> + +</list> +По умолчанию модули не собираются +их необходимо собрать из исходного кода +или установить из отдельного пакета Linux. +</para> + + +<section id="install_package" name="Установка пакета Linux"> +<para> +Для установки модулей nginScript на Linux могут быть использованы +<link doc="../linux_packages.xml" id="dynmodules">пакеты</link>: +<list type="bullet"> + +<listitem> +<literal>nginx-module-njs</literal> — +<link doc="ngx_core_module.xml" id="load_module">динамические</link> модули +nginScript +</listitem> + +<listitem> +<literal>nginx-module-njs-dbg</literal> — debug-символы для +пакета <literal>nginx-module-njs</literal> +</listitem> + +</list> +</para> + +</section> + + +<section id="install_sources" name="Установка из исходных файлов"> + +<para> +<link url="http://hg.nginx.org/njs">Репозиторий</link> +с исходным кодом nginScript можно клонировать следующей командой: +(необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>): +<example> +hg clone http://hg.nginx.org/njs +</example> +Затем модули необходимо собрать с помощью +конфигурационного параметра <literal>--add_module</literal>: +<example> +./configure --add-module=<value>path-to-njs</value>/nginx +</example> +Модули также можно собрать как +<link doc="ngx_core_module.xml" id="load_module">динамические</link>: +<example> +./configure --add-dynamic_module=<value>path-to-njs</value>/nginx +</example> +</para> + +</section> + +</section> + + +<section id="issues" name="Известные проблемы"> + +<para> +Модуль экспериментальный, поэтому возможно всё. +</para> + +</section> + +</article>
--- a/xml/ru/docs/stream/ngx_stream_js_module.xml +++ b/xml/ru/docs/stream/ngx_stream_js_module.xml @@ -9,13 +9,13 @@ <module name="Модуль ngx_stream_js_module" link="/ru/docs/stream/ngx_stream_js_module.html" lang="ru" - rev="2"> + rev="3"> <section id="summary"> <para> Модуль <literal>ngx_stream_js_module</literal> позволяет задавать -обработчики на nginScript — +обработчики на <link doc="../njs_about.xml">nginScript</link> — подмножестве языка JavaScript. </para>