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>