` также заменяет значение по умолчанию, а не дополняет его.
+- Объект контекста желательно создавать в отдельном файле, чтобы исключить возможные циклические зависимости между файлами.
+ В случае появления циклических импортов, вместо идентификатора контекста приедет null, и это совсем не то, чего мы хотим.
+
### Ремарки про kphp
- Чем однозначнее типы, которые вы используете - тем лучше, т.к. меньше шанс того, что kphp запутается при выводе типов в транспилированном коде.
diff --git a/external/check_kphp.sh b/external/check_kphp.sh
index 16d61fea..ddb47a59 100755
--- a/external/check_kphp.sh
+++ b/external/check_kphp.sh
@@ -10,7 +10,9 @@ if ! docker pull vkcom/kphp; then
exit 1
fi
-test -t 1 && USE_TTY="-t"
+test -t 1 && USE_TTY="-t"
-docker run ${USE_TTY} -i -v `pwd`/demo/public:/tmp/dev:rw vkcom/kphp /bin/sh -c 'kphp /tmp/dev/index.php -o /tmp/dev/compiled_demo --include-dir "/tmp/dev/build/" --verbosity 3'
+mkdir `pwd`/demo/public/kphp_out
+
+docker run ${USE_TTY} -i -v `pwd`/demo/public:/tmp/dev:rw -v`pwd`/demo/public/kphp_out:/kphp_out:rw vkcom/kphp /bin/sh -c 'kphp /tmp/dev/index.php -o /tmp/dev/compiled_demo --include-dir "/tmp/dev/build/" --verbosity 3'
exit $?
diff --git a/src/__tests__/5_components.spec.ts b/src/__tests__/5_components.spec.ts
index b7318a4f..624a9f04 100644
--- a/src/__tests__/5_components.spec.ts
+++ b/src/__tests__/5_components.spec.ts
@@ -26,6 +26,7 @@ const testSuiteConfig: Array<{file: string[]; failOnErrors: string[]}> = [
{ file: ['components', 'ImportResolve2.tsx'], failOnErrors: ['384ae', 'a57e4', '6554c'] },
{ file: ['components', 'ReexportResolve.tsx'], failOnErrors: ['384ae', 'a57e4', '6554c'] },
{ file: ['components', 'CyclicDepsEntry.ts'], failOnErrors: ['384ae', 'a57e4', '6554c'] },
+ { file: ['components', 'ReactContextProvider.tsx'], failOnErrors: ['384ae', 'a57e4', '6554c'] },
// Checks for reserved words in paths/namespaces
{ file: ['components/static', 'KeywordTestComponent.tsx'], failOnErrors: ['384ae', 'a57e4'] },
{ file: ['components/static', 'KeywordTestComponentImport.tsx'], failOnErrors: ['384ae', 'a57e4'] },
diff --git a/src/__tests__/specimens/arrayMethods/FilterModule.php b/src/__tests__/specimens/arrayMethods/FilterModule.php
index 3feb46f6..319abdc4 100644
--- a/src/__tests__/specimens/arrayMethods/FilterModule.php
+++ b/src/__tests__/specimens/arrayMethods/FilterModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class FilterModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/FindModule.php b/src/__tests__/specimens/arrayMethods/FindModule.php
index 8723a3bb..8d27eaad 100644
--- a/src/__tests__/specimens/arrayMethods/FindModule.php
+++ b/src/__tests__/specimens/arrayMethods/FindModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class FindModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/ForEachModule.php b/src/__tests__/specimens/arrayMethods/ForEachModule.php
index 1dca0b1f..daad0988 100644
--- a/src/__tests__/specimens/arrayMethods/ForEachModule.php
+++ b/src/__tests__/specimens/arrayMethods/ForEachModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ForEachModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/IncludesModule.php b/src/__tests__/specimens/arrayMethods/IncludesModule.php
index 3e1434e6..724c5833 100644
--- a/src/__tests__/specimens/arrayMethods/IncludesModule.php
+++ b/src/__tests__/specimens/arrayMethods/IncludesModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IncludesModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/IndexOfModule.php b/src/__tests__/specimens/arrayMethods/IndexOfModule.php
index f6f9ac99..d2360ddc 100644
--- a/src/__tests__/specimens/arrayMethods/IndexOfModule.php
+++ b/src/__tests__/specimens/arrayMethods/IndexOfModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IndexOfModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/IsArrayModule.php b/src/__tests__/specimens/arrayMethods/IsArrayModule.php
index 05eaae30..b1490a7f 100644
--- a/src/__tests__/specimens/arrayMethods/IsArrayModule.php
+++ b/src/__tests__/specimens/arrayMethods/IsArrayModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IsArrayModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/MapModule.php b/src/__tests__/specimens/arrayMethods/MapModule.php
index 4538ad57..1f31496a 100644
--- a/src/__tests__/specimens/arrayMethods/MapModule.php
+++ b/src/__tests__/specimens/arrayMethods/MapModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class MapModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/PushPopModule.php b/src/__tests__/specimens/arrayMethods/PushPopModule.php
index 2aa47c34..1fbd3737 100644
--- a/src/__tests__/specimens/arrayMethods/PushPopModule.php
+++ b/src/__tests__/specimens/arrayMethods/PushPopModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class PushPopModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/ReduceModule.php b/src/__tests__/specimens/arrayMethods/ReduceModule.php
index 6fe96fac..c4462200 100644
--- a/src/__tests__/specimens/arrayMethods/ReduceModule.php
+++ b/src/__tests__/specimens/arrayMethods/ReduceModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ReduceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/SliceModule.php b/src/__tests__/specimens/arrayMethods/SliceModule.php
index 61cf061e..ad970633 100644
--- a/src/__tests__/specimens/arrayMethods/SliceModule.php
+++ b/src/__tests__/specimens/arrayMethods/SliceModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SliceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/SomeModule.php b/src/__tests__/specimens/arrayMethods/SomeModule.php
index 3aa78f37..cdbcda41 100644
--- a/src/__tests__/specimens/arrayMethods/SomeModule.php
+++ b/src/__tests__/specimens/arrayMethods/SomeModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SomeModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/arrayMethods/SpliceModule.php b/src/__tests__/specimens/arrayMethods/SpliceModule.php
index ac0472b7..5b0a40b2 100644
--- a/src/__tests__/specimens/arrayMethods/SpliceModule.php
+++ b/src/__tests__/specimens/arrayMethods/SpliceModule.php
@@ -3,6 +3,8 @@
namespace specimens\arrayMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SpliceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/ArrowFunctionModule.php b/src/__tests__/specimens/byType/ArrowFunctionModule.php
index 96248daf..1278c9c9 100644
--- a/src/__tests__/specimens/byType/ArrowFunctionModule.php
+++ b/src/__tests__/specimens/byType/ArrowFunctionModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ArrowFunctionModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/BasicOperatorsModule.php b/src/__tests__/specimens/byType/BasicOperatorsModule.php
index 0dbc16c3..4221796c 100644
--- a/src/__tests__/specimens/byType/BasicOperatorsModule.php
+++ b/src/__tests__/specimens/byType/BasicOperatorsModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BasicOperatorsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/BinaryExpressionModule.php b/src/__tests__/specimens/byType/BinaryExpressionModule.php
index a26fb08a..bfac1c66 100644
--- a/src/__tests__/specimens/byType/BinaryExpressionModule.php
+++ b/src/__tests__/specimens/byType/BinaryExpressionModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BinaryExpressionModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/BlockModule.php b/src/__tests__/specimens/byType/BlockModule.php
index f31ac77c..cac138ed 100644
--- a/src/__tests__/specimens/byType/BlockModule.php
+++ b/src/__tests__/specimens/byType/BlockModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BlockModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/CallExpressionModule.php b/src/__tests__/specimens/byType/CallExpressionModule.php
index 0f3a50ec..372f62dd 100644
--- a/src/__tests__/specimens/byType/CallExpressionModule.php
+++ b/src/__tests__/specimens/byType/CallExpressionModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class CallExpressionModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/ElementAccessExpressionModule.php b/src/__tests__/specimens/byType/ElementAccessExpressionModule.php
index c3cfcb36..c74942b7 100644
--- a/src/__tests__/specimens/byType/ElementAccessExpressionModule.php
+++ b/src/__tests__/specimens/byType/ElementAccessExpressionModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ElementAccessExpressionModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/EnumImportModule.php b/src/__tests__/specimens/byType/EnumImportModule.php
index 1b1b8064..b33066d6 100644
--- a/src/__tests__/specimens/byType/EnumImportModule.php
+++ b/src/__tests__/specimens/byType/EnumImportModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class EnumImportModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/EnumModule.php b/src/__tests__/specimens/byType/EnumModule.php
index cae0e7a0..a4a3046a 100644
--- a/src/__tests__/specimens/byType/EnumModule.php
+++ b/src/__tests__/specimens/byType/EnumModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class EnumModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/ExportModule.php b/src/__tests__/specimens/byType/ExportModule.php
index c6a0ed0e..a0e0c28b 100644
--- a/src/__tests__/specimens/byType/ExportModule.php
+++ b/src/__tests__/specimens/byType/ExportModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ExportModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/FunctionDeclarationModule.php b/src/__tests__/specimens/byType/FunctionDeclarationModule.php
index 9b8406be..2ae20655 100644
--- a/src/__tests__/specimens/byType/FunctionDeclarationModule.php
+++ b/src/__tests__/specimens/byType/FunctionDeclarationModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class FunctionDeclarationModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/IdentifierModule.php b/src/__tests__/specimens/byType/IdentifierModule.php
index 554e827f..9d893509 100644
--- a/src/__tests__/specimens/byType/IdentifierModule.php
+++ b/src/__tests__/specimens/byType/IdentifierModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IdentifierModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/IfStatementModule.php b/src/__tests__/specimens/byType/IfStatementModule.php
index 3b72fc51..3c7f83b0 100644
--- a/src/__tests__/specimens/byType/IfStatementModule.php
+++ b/src/__tests__/specimens/byType/IfStatementModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IfStatementModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/ImportModule.php b/src/__tests__/specimens/byType/ImportModule.php
index ab94733a..7f9f18de 100644
--- a/src/__tests__/specimens/byType/ImportModule.php
+++ b/src/__tests__/specimens/byType/ImportModule.php
@@ -3,6 +3,8 @@
namespace specimens\byType;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ImportModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/byType/JsxModule.php b/src/__tests__/specimens/byType/JsxModule.php
index 14826db6..03fd107b 100644
--- a/src/__tests__/specimens/byType/JsxModule.php
+++ b/src/__tests__/specimens/byType/JsxModule.php
@@ -1,6 +1,7 @@
}) {
+ const innerctxValue = useContext(props.innerctx);
+ const outerctxValue = useContext(Ctx1);
+ return Inner: {innerctxValue}, outer: {outerctxValue}
;
+}
diff --git a/src/__tests__/specimens/components/ReactContextConsumer/ReactContextConsumer.php b/src/__tests__/specimens/components/ReactContextConsumer/ReactContextConsumer.php
new file mode 100644
index 00000000..ab379ada
--- /dev/null
+++ b/src/__tests__/specimens/components/ReactContextConsumer/ReactContextConsumer.php
@@ -0,0 +1,44 @@
+Ctx1
+ );
+ return \VK\Elephize\Builtins\IntrinsicElement::get("div")->render(
+ [],
+ [
+ "Inner: ",
+ \VK\Elephize\Builtins\IntrinsicElement::escape($innerctx_value),
+ ", outer: ",
+ \VK\Elephize\Builtins\IntrinsicElement::escape($outerctx_value),
+ ]
+ );
+ }
+}
diff --git a/src/__tests__/specimens/components/ReactContextProvider.tsx b/src/__tests__/specimens/components/ReactContextProvider.tsx
new file mode 100644
index 00000000..651f7989
--- /dev/null
+++ b/src/__tests__/specimens/components/ReactContextProvider.tsx
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { ReactContextConsumer } from './ReactContextConsumer';
+import { Ctx1 } from './ReactContextSource';
+
+// @elephizeTarget
+export function ReactContextProvider() {
+ const Ctx2 = React.createContext({ testInnerVal: 2 });
+ return (
+
+
+
+ );
+}
diff --git a/src/__tests__/specimens/components/ReactContextProvider/ReactContextProvider.php b/src/__tests__/specimens/components/ReactContextProvider/ReactContextProvider.php
new file mode 100644
index 00000000..35622836
--- /dev/null
+++ b/src/__tests__/specimens/components/ReactContextProvider/ReactContextProvider.php
@@ -0,0 +1,52 @@
+ 2,
+ ]);
+ return \VK\Elephize\Builtins\ReactContextSynthetic::spawn()
+ ->pushContext($Ctx2, [
+ "testInnerVal" => 3,
+ ])
+ ->render([
+ \VK\Elephize\Builtins\ReactContextSynthetic::spawn()
+ ->pushContext(\specimens\components\ReactContextSourceModule::getInstance()->Ctx1, [
+ "testVal" => 4,
+ ])
+ ->render([
+ \specimens\components\ReactContextConsumer\ReactContextConsumer::getInstance()->render(
+ ["someprop" => 123, "innerctx" => $Ctx2],
+ []
+ ),
+ ])
+ ->popContext(\specimens\components\ReactContextSourceModule::getInstance()->Ctx1),
+ ])
+ ->popContext($Ctx2);
+ }
+}
diff --git a/src/__tests__/specimens/components/ReactContextSource.tsx b/src/__tests__/specimens/components/ReactContextSource.tsx
new file mode 100644
index 00000000..32b2549e
--- /dev/null
+++ b/src/__tests__/specimens/components/ReactContextSource.tsx
@@ -0,0 +1,3 @@
+import * as React from 'react';
+
+export const Ctx1 = React.createContext({ testVal: 1 });
diff --git a/src/__tests__/specimens/components/ReactContextSourceModule.php b/src/__tests__/specimens/components/ReactContextSourceModule.php
new file mode 100644
index 00000000..f2cf7d8b
--- /dev/null
+++ b/src/__tests__/specimens/components/ReactContextSourceModule.php
@@ -0,0 +1,31 @@
+Ctx1 = new \VK\Elephize\Builtins\ReactContext([
+ "testVal" => 1,
+ ]);
+ }
+}
diff --git a/src/__tests__/specimens/components/ReactSupport/ReactSupport.php b/src/__tests__/specimens/components/ReactSupport/ReactSupport.php
index 31b026e3..9d34e356 100644
--- a/src/__tests__/specimens/components/ReactSupport/ReactSupport.php
+++ b/src/__tests__/specimens/components/ReactSupport/ReactSupport.php
@@ -3,6 +3,8 @@
namespace specimens\components\ReactSupport;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ReactSupport extends RenderableComponent {
/**
@@ -28,6 +30,7 @@ public function render(array $props, array $children) {
$anon_9911d2a = [0];
$count = (float) $anon_9911d2a[0];
\VK\Elephize\Builtins\Console::log($count);
+ $theme = \VK\Elephize\Builtins\ReactContext::getValue(new \VK\Elephize\Builtins\ReactContext("123"));
\VK\Elephize\Builtins\Console::log($theme);
$anon_2e8ff8c = [[1, 2, 3, 4]];
$state = (array) $anon_2e8ff8c[0];
@@ -35,6 +38,6 @@ public function render(array $props, array $children) {
$memoized_callback();
\VK\Elephize\Builtins\Console::log($memoized);
\VK\Elephize\Builtins\Console::log($ref);
- return \VK\Elephize\Builtins\IntrinsicElement::get("div")->render([], ['kek']);
+ return \VK\Elephize\Builtins\IntrinsicElement::get("div")->render([], ["kek"]);
}
}
diff --git a/src/__tests__/specimens/components/ReactSupport2/ReactSupport2.php b/src/__tests__/specimens/components/ReactSupport2/ReactSupport2.php
index 1423cd99..8951b9bc 100644
--- a/src/__tests__/specimens/components/ReactSupport2/ReactSupport2.php
+++ b/src/__tests__/specimens/components/ReactSupport2/ReactSupport2.php
@@ -3,6 +3,8 @@
namespace specimens\components\ReactSupport2;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ReactSupport2 extends RenderableComponent {
/**
@@ -28,6 +30,7 @@ public function render(array $props, array $children) {
$anon_18b93da = [1];
$cnt = (float) $anon_18b93da[0];
\VK\Elephize\Builtins\Console::log($cnt);
+ $theme = \VK\Elephize\Builtins\ReactContext::getValue(new \VK\Elephize\Builtins\ReactContext("123"));
\VK\Elephize\Builtins\Console::log($theme);
$anon_2e8ff8c = [[1, 2, 3, 4]];
$state = (array) $anon_2e8ff8c[0];
diff --git a/src/__tests__/specimens/components/ReexportResolve/Render.php b/src/__tests__/specimens/components/ReexportResolve/Render.php
index f61b7439..b5d2fab6 100644
--- a/src/__tests__/specimens/components/ReexportResolve/Render.php
+++ b/src/__tests__/specimens/components/ReexportResolve/Render.php
@@ -3,6 +3,8 @@
namespace specimens\components\ReexportResolve;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class Render extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/components/ReexportResolveModule.php b/src/__tests__/specimens/components/ReexportResolveModule.php
index 5205bc27..1c215db3 100644
--- a/src/__tests__/specimens/components/ReexportResolveModule.php
+++ b/src/__tests__/specimens/components/ReexportResolveModule.php
@@ -3,6 +3,8 @@
namespace specimens\components;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ReexportResolveModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/components/TwoComponents/FirstComponent.php b/src/__tests__/specimens/components/TwoComponents/FirstComponent.php
index 65325d43..376f97bf 100644
--- a/src/__tests__/specimens/components/TwoComponents/FirstComponent.php
+++ b/src/__tests__/specimens/components/TwoComponents/FirstComponent.php
@@ -3,6 +3,8 @@
namespace specimens\components\TwoComponents;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class FirstComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/components/TwoComponents/SecondComponent.php b/src/__tests__/specimens/components/TwoComponents/SecondComponent.php
index 4a438105..cb562334 100644
--- a/src/__tests__/specimens/components/TwoComponents/SecondComponent.php
+++ b/src/__tests__/specimens/components/TwoComponents/SecondComponent.php
@@ -3,6 +3,8 @@
namespace specimens\components\TwoComponents;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SecondComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/components/TwoComponentsModule.php b/src/__tests__/specimens/components/TwoComponentsModule.php
index fee7b37a..cc943d85 100644
--- a/src/__tests__/specimens/components/TwoComponentsModule.php
+++ b/src/__tests__/specimens/components/TwoComponentsModule.php
@@ -3,6 +3,8 @@
namespace specimens\components;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TwoComponentsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/components/TypedComponent/TypedComponent.php b/src/__tests__/specimens/components/TypedComponent/TypedComponent.php
index 194bef26..c189c831 100644
--- a/src/__tests__/specimens/components/TypedComponent/TypedComponent.php
+++ b/src/__tests__/specimens/components/TypedComponent/TypedComponent.php
@@ -3,6 +3,8 @@
namespace specimens\components\TypedComponent;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TypedComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/components/elephize_static/KeywordTestComponent/KeywordTestComponent.php b/src/__tests__/specimens/components/elephize_static/KeywordTestComponent/KeywordTestComponent.php
index a93e1397..8508ce41 100644
--- a/src/__tests__/specimens/components/elephize_static/KeywordTestComponent/KeywordTestComponent.php
+++ b/src/__tests__/specimens/components/elephize_static/KeywordTestComponent/KeywordTestComponent.php
@@ -3,6 +3,8 @@
namespace specimens\components\elephize_static\KeywordTestComponent;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class KeywordTestComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/components/elephize_static/KeywordTestComponentImportModule.php b/src/__tests__/specimens/components/elephize_static/KeywordTestComponentImportModule.php
index 3ce94ef8..2cdd8018 100644
--- a/src/__tests__/specimens/components/elephize_static/KeywordTestComponentImportModule.php
+++ b/src/__tests__/specimens/components/elephize_static/KeywordTestComponentImportModule.php
@@ -3,6 +3,8 @@
namespace specimens\components\elephize_static;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class KeywordTestComponentImportModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/components/elephize_static/KeywordTestModuleImportModule.php b/src/__tests__/specimens/components/elephize_static/KeywordTestModuleImportModule.php
index a033a312..65eeafab 100644
--- a/src/__tests__/specimens/components/elephize_static/KeywordTestModuleImportModule.php
+++ b/src/__tests__/specimens/components/elephize_static/KeywordTestModuleImportModule.php
@@ -3,6 +3,8 @@
namespace specimens\components\elephize_static;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class KeywordTestModuleImportModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/components/elephize_static/KeywordTestModuleModule.php b/src/__tests__/specimens/components/elephize_static/KeywordTestModuleModule.php
index 1cf155fe..b555de64 100644
--- a/src/__tests__/specimens/components/elephize_static/KeywordTestModuleModule.php
+++ b/src/__tests__/specimens/components/elephize_static/KeywordTestModuleModule.php
@@ -3,6 +3,8 @@
namespace specimens\components\elephize_static;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class KeywordTestModuleModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/fixes/CheckBox/CheckBox.php b/src/__tests__/specimens/fixes/CheckBox/CheckBox.php
index df28f71d..24795151 100644
--- a/src/__tests__/specimens/fixes/CheckBox/CheckBox.php
+++ b/src/__tests__/specimens/fixes/CheckBox/CheckBox.php
@@ -3,6 +3,8 @@
namespace specimens\fixes\CheckBox;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class CheckBox extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/fixes/EscapeHtmlChars/EscapeHtmlChars.php b/src/__tests__/specimens/fixes/EscapeHtmlChars/EscapeHtmlChars.php
index a5e91e5c..71dd83f0 100644
--- a/src/__tests__/specimens/fixes/EscapeHtmlChars/EscapeHtmlChars.php
+++ b/src/__tests__/specimens/fixes/EscapeHtmlChars/EscapeHtmlChars.php
@@ -3,6 +3,8 @@
namespace specimens\fixes\EscapeHtmlChars;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class EscapeHtmlChars extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/fixes/EscapeHtmlChars/NestedEscapeHtmlChars.php b/src/__tests__/specimens/fixes/EscapeHtmlChars/NestedEscapeHtmlChars.php
index 1f34d9d3..a300c36e 100644
--- a/src/__tests__/specimens/fixes/EscapeHtmlChars/NestedEscapeHtmlChars.php
+++ b/src/__tests__/specimens/fixes/EscapeHtmlChars/NestedEscapeHtmlChars.php
@@ -3,6 +3,8 @@
namespace specimens\fixes\EscapeHtmlChars;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class NestedEscapeHtmlChars extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/fixes/EscapeHtmlCharsModule.php b/src/__tests__/specimens/fixes/EscapeHtmlCharsModule.php
index f98babdb..53193d3a 100644
--- a/src/__tests__/specimens/fixes/EscapeHtmlCharsModule.php
+++ b/src/__tests__/specimens/fixes/EscapeHtmlCharsModule.php
@@ -3,6 +3,8 @@
namespace specimens\fixes;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class EscapeHtmlCharsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/fixes/ExcessiveEliminationModule.php b/src/__tests__/specimens/fixes/ExcessiveEliminationModule.php
index c8f6306f..f8c1107c 100644
--- a/src/__tests__/specimens/fixes/ExcessiveEliminationModule.php
+++ b/src/__tests__/specimens/fixes/ExcessiveEliminationModule.php
@@ -3,6 +3,8 @@
namespace specimens\fixes;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ExcessiveEliminationModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/fixes/ExcessiveEscaping/TextContainer.php b/src/__tests__/specimens/fixes/ExcessiveEscaping/TextContainer.php
index 6c6cef3e..4ea69a93 100644
--- a/src/__tests__/specimens/fixes/ExcessiveEscaping/TextContainer.php
+++ b/src/__tests__/specimens/fixes/ExcessiveEscaping/TextContainer.php
@@ -3,6 +3,8 @@
namespace specimens\fixes\ExcessiveEscaping;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TextContainer extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/functionMethods/ClosuresModule.php b/src/__tests__/specimens/functionMethods/ClosuresModule.php
index caff5945..2e5679ac 100644
--- a/src/__tests__/specimens/functionMethods/ClosuresModule.php
+++ b/src/__tests__/specimens/functionMethods/ClosuresModule.php
@@ -3,6 +3,8 @@
namespace specimens\functionMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ClosuresModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/mathMethods/BasicModule.php b/src/__tests__/specimens/mathMethods/BasicModule.php
index 91a54481..ef1395a5 100644
--- a/src/__tests__/specimens/mathMethods/BasicModule.php
+++ b/src/__tests__/specimens/mathMethods/BasicModule.php
@@ -3,6 +3,8 @@
namespace specimens\mathMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BasicModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/mathMethods/ConstantsModule.php b/src/__tests__/specimens/mathMethods/ConstantsModule.php
index 4ebfe998..06fd0aa2 100644
--- a/src/__tests__/specimens/mathMethods/ConstantsModule.php
+++ b/src/__tests__/specimens/mathMethods/ConstantsModule.php
@@ -3,6 +3,8 @@
namespace specimens\mathMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ConstantsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/mathMethods/TrigonometryModule.php b/src/__tests__/specimens/mathMethods/TrigonometryModule.php
index a4cf0203..86c73427 100644
--- a/src/__tests__/specimens/mathMethods/TrigonometryModule.php
+++ b/src/__tests__/specimens/mathMethods/TrigonometryModule.php
@@ -3,6 +3,8 @@
namespace specimens\mathMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TrigonometryModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/AllowedOnClickModule.php b/src/__tests__/specimens/misc/AllowedOnClickModule.php
index d8ee4e4c..370b6e7d 100644
--- a/src/__tests__/specimens/misc/AllowedOnClickModule.php
+++ b/src/__tests__/specimens/misc/AllowedOnClickModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AllowedOnClickModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/AstHooksModule.php b/src/__tests__/specimens/misc/AstHooksModule.php
index c5bc01a2..d19dd51e 100644
--- a/src/__tests__/specimens/misc/AstHooksModule.php
+++ b/src/__tests__/specimens/misc/AstHooksModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AstHooksModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ComplexObjectFuncsModule.php b/src/__tests__/specimens/misc/ComplexObjectFuncsModule.php
index c53e17df..433a92df 100644
--- a/src/__tests__/specimens/misc/ComplexObjectFuncsModule.php
+++ b/src/__tests__/specimens/misc/ComplexObjectFuncsModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ComplexObjectFuncsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ComplexTypeInferenceModule.php b/src/__tests__/specimens/misc/ComplexTypeInferenceModule.php
index 5562902a..c6e13606 100644
--- a/src/__tests__/specimens/misc/ComplexTypeInferenceModule.php
+++ b/src/__tests__/specimens/misc/ComplexTypeInferenceModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ComplexTypeInferenceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ConstructorTypeCastModule.php b/src/__tests__/specimens/misc/ConstructorTypeCastModule.php
index 2f73dd53..57cc23ac 100644
--- a/src/__tests__/specimens/misc/ConstructorTypeCastModule.php
+++ b/src/__tests__/specimens/misc/ConstructorTypeCastModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ConstructorTypeCastModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/CustomIsomorphicsModule.php b/src/__tests__/specimens/misc/CustomIsomorphicsModule.php
index f76bdaf2..e66846aa 100644
--- a/src/__tests__/specimens/misc/CustomIsomorphicsModule.php
+++ b/src/__tests__/specimens/misc/CustomIsomorphicsModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class CustomIsomorphicsModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/DefaultOperatorModule.php b/src/__tests__/specimens/misc/DefaultOperatorModule.php
index 8dc43d3a..34ff8e1d 100644
--- a/src/__tests__/specimens/misc/DefaultOperatorModule.php
+++ b/src/__tests__/specimens/misc/DefaultOperatorModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class DefaultOperatorModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/DefaultValuesModule.php b/src/__tests__/specimens/misc/DefaultValuesModule.php
index f8024ec9..2105b3ac 100644
--- a/src/__tests__/specimens/misc/DefaultValuesModule.php
+++ b/src/__tests__/specimens/misc/DefaultValuesModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class DefaultValuesModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ElephizeIgnoreModule.php b/src/__tests__/specimens/misc/ElephizeIgnoreModule.php
index c4e85ce1..243002c6 100644
--- a/src/__tests__/specimens/misc/ElephizeIgnoreModule.php
+++ b/src/__tests__/specimens/misc/ElephizeIgnoreModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ElephizeIgnoreModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ExportedTypesModule.php b/src/__tests__/specimens/misc/ExportedTypesModule.php
index 109d3052..255d0ee9 100644
--- a/src/__tests__/specimens/misc/ExportedTypesModule.php
+++ b/src/__tests__/specimens/misc/ExportedTypesModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ExportedTypesModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/ToReplaceCjsWrapper.php b/src/__tests__/specimens/misc/ToReplaceCjsWrapper.php
index 0eac0633..9703c49b 100644
--- a/src/__tests__/specimens/misc/ToReplaceCjsWrapper.php
+++ b/src/__tests__/specimens/misc/ToReplaceCjsWrapper.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ToReplaceCjsWrapper extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/TypeInferenceModule.php b/src/__tests__/specimens/misc/TypeInferenceModule.php
index 431d3726..412bc8bb 100644
--- a/src/__tests__/specimens/misc/TypeInferenceModule.php
+++ b/src/__tests__/specimens/misc/TypeInferenceModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TypeInferenceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/TypecastModule.php b/src/__tests__/specimens/misc/TypecastModule.php
index 8b4e11cf..9914cc54 100644
--- a/src/__tests__/specimens/misc/TypecastModule.php
+++ b/src/__tests__/specimens/misc/TypecastModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TypecastModule extends CJSModule {
/**
@@ -46,7 +48,7 @@ private function __construct() {
\VK\Elephize\Builtins\Console::log(
(array) $this->tca,
(bool) $this->tcb,
- (boolean) $this->tcb,
+ (bool) $this->tcb,
(int) $this->tcc,
(string) $this->tcd,
(float) $this->tce
diff --git a/src/__tests__/specimens/misc/UnusedVarsEliminationModule.php b/src/__tests__/specimens/misc/UnusedVarsEliminationModule.php
index 1cdb966c..50cfaef0 100644
--- a/src/__tests__/specimens/misc/UnusedVarsEliminationModule.php
+++ b/src/__tests__/specimens/misc/UnusedVarsEliminationModule.php
@@ -3,6 +3,8 @@
namespace specimens\misc;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class UnusedVarsEliminationModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClick.php b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClick.php
index 22a6b46f..dac9c34e 100644
--- a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClick.php
+++ b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClick.php
@@ -3,6 +3,8 @@
namespace specimens\misc\allowedOnClick;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AllowedGlobalClick extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar.php b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar.php
index 2846eeda..079679c8 100644
--- a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar.php
+++ b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar.php
@@ -3,6 +3,8 @@
namespace specimens\misc\allowedOnClick;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AllowedGlobalClickVar extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar2.php b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar2.php
index 5af22fb0..e5565e8a 100644
--- a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar2.php
+++ b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar2.php
@@ -3,6 +3,8 @@
namespace specimens\misc\allowedOnClick;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AllowedGlobalClickVar2 extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar3.php b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar3.php
index bb910b2e..2f34772f 100644
--- a/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar3.php
+++ b/src/__tests__/specimens/misc/allowedOnClick/AllowedGlobalClickVar3.php
@@ -3,6 +3,8 @@
namespace specimens\misc\allowedOnClick;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class AllowedGlobalClickVar3 extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/customIsomorphics/IsoComponent.php b/src/__tests__/specimens/misc/customIsomorphics/IsoComponent.php
index 7f542af8..7b4e5793 100644
--- a/src/__tests__/specimens/misc/customIsomorphics/IsoComponent.php
+++ b/src/__tests__/specimens/misc/customIsomorphics/IsoComponent.php
@@ -3,6 +3,8 @@
namespace specimens\misc\customIsomorphics;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class IsoComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/elephizeIgnore/ComponentIgnore.php b/src/__tests__/specimens/misc/elephizeIgnore/ComponentIgnore.php
index 634316ef..5af10a4e 100644
--- a/src/__tests__/specimens/misc/elephizeIgnore/ComponentIgnore.php
+++ b/src/__tests__/specimens/misc/elephizeIgnore/ComponentIgnore.php
@@ -3,6 +3,8 @@
namespace specimens\misc\elephizeIgnore;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ComponentIgnore extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/importedTypes/ImportedTypesComponent.php b/src/__tests__/specimens/misc/importedTypes/ImportedTypesComponent.php
index da296691..6b22cf17 100644
--- a/src/__tests__/specimens/misc/importedTypes/ImportedTypesComponent.php
+++ b/src/__tests__/specimens/misc/importedTypes/ImportedTypesComponent.php
@@ -3,6 +3,8 @@
namespace specimens\misc\importedTypes;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ImportedTypesComponent extends RenderableComponent {
/**
diff --git a/src/__tests__/specimens/misc/toReplaceIndex/ToReplaceIndexCjsWrapper.php b/src/__tests__/specimens/misc/toReplaceIndex/ToReplaceIndexCjsWrapper.php
index 32c5d18b..39ba52a2 100644
--- a/src/__tests__/specimens/misc/toReplaceIndex/ToReplaceIndexCjsWrapper.php
+++ b/src/__tests__/specimens/misc/toReplaceIndex/ToReplaceIndexCjsWrapper.php
@@ -3,6 +3,8 @@
namespace specimens\misc\toReplaceIndex;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ToReplaceSecondCjsWrapper extends CJSModule {
/**
diff --git a/src/__tests__/specimens/objectMethods/HasOwnPropertyModule.php b/src/__tests__/specimens/objectMethods/HasOwnPropertyModule.php
index 97049ce5..d794e40e 100644
--- a/src/__tests__/specimens/objectMethods/HasOwnPropertyModule.php
+++ b/src/__tests__/specimens/objectMethods/HasOwnPropertyModule.php
@@ -3,6 +3,8 @@
namespace specimens\objectMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class HasOwnPropertyModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/objectMethods/KeysModule.php b/src/__tests__/specimens/objectMethods/KeysModule.php
index 3f797374..e746050e 100644
--- a/src/__tests__/specimens/objectMethods/KeysModule.php
+++ b/src/__tests__/specimens/objectMethods/KeysModule.php
@@ -3,6 +3,8 @@
namespace specimens\objectMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class KeysModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/JoinModule.php b/src/__tests__/specimens/stringMethods/JoinModule.php
index 514136d2..cbada88a 100644
--- a/src/__tests__/specimens/stringMethods/JoinModule.php
+++ b/src/__tests__/specimens/stringMethods/JoinModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class JoinModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/MatchModule.php b/src/__tests__/specimens/stringMethods/MatchModule.php
index 6c7fb019..d6437283 100644
--- a/src/__tests__/specimens/stringMethods/MatchModule.php
+++ b/src/__tests__/specimens/stringMethods/MatchModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class MatchModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/ParseModule.php b/src/__tests__/specimens/stringMethods/ParseModule.php
index 9121a224..7d19d057 100644
--- a/src/__tests__/specimens/stringMethods/ParseModule.php
+++ b/src/__tests__/specimens/stringMethods/ParseModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ParseModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/ReplaceModule.php b/src/__tests__/specimens/stringMethods/ReplaceModule.php
index 45e04996..fc5dc6be 100644
--- a/src/__tests__/specimens/stringMethods/ReplaceModule.php
+++ b/src/__tests__/specimens/stringMethods/ReplaceModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ReplaceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/SplitModule.php b/src/__tests__/specimens/stringMethods/SplitModule.php
index 69ee7c89..3d8bae1f 100644
--- a/src/__tests__/specimens/stringMethods/SplitModule.php
+++ b/src/__tests__/specimens/stringMethods/SplitModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SplitModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/StartsWithModule.php b/src/__tests__/specimens/stringMethods/StartsWithModule.php
index 5839e369..37c642fa 100644
--- a/src/__tests__/specimens/stringMethods/StartsWithModule.php
+++ b/src/__tests__/specimens/stringMethods/StartsWithModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class StartsWithModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/StrIncludesModule.php b/src/__tests__/specimens/stringMethods/StrIncludesModule.php
index 6b815fe2..e2225635 100644
--- a/src/__tests__/specimens/stringMethods/StrIncludesModule.php
+++ b/src/__tests__/specimens/stringMethods/StrIncludesModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class StrIncludesModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/StrIndexOfModule.php b/src/__tests__/specimens/stringMethods/StrIndexOfModule.php
index e8e1fafe..db48ab1d 100644
--- a/src/__tests__/specimens/stringMethods/StrIndexOfModule.php
+++ b/src/__tests__/specimens/stringMethods/StrIndexOfModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class StrIndexOfModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/StrSliceModule.php b/src/__tests__/specimens/stringMethods/StrSliceModule.php
index 6a5e8b2d..d556d2a3 100644
--- a/src/__tests__/specimens/stringMethods/StrSliceModule.php
+++ b/src/__tests__/specimens/stringMethods/StrSliceModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class StrSliceModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/SubstrModule.php b/src/__tests__/specimens/stringMethods/SubstrModule.php
index c8e26aba..55c6b4bc 100644
--- a/src/__tests__/specimens/stringMethods/SubstrModule.php
+++ b/src/__tests__/specimens/stringMethods/SubstrModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class SubstrModule extends CJSModule {
/**
diff --git a/src/__tests__/specimens/stringMethods/TrimModule.php b/src/__tests__/specimens/stringMethods/TrimModule.php
index 4633369d..15322c5e 100644
--- a/src/__tests__/specimens/stringMethods/TrimModule.php
+++ b/src/__tests__/specimens/stringMethods/TrimModule.php
@@ -3,6 +3,8 @@
namespace specimens\stringMethods;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class TrimModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.1.php b/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.1.php
index e7462baf..b5ce7e9d 100644
--- a/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.1.php
+++ b/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BrokenTsSyntaxModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.2.php b/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.2.php
index 74a04c0f..cb1fd4b9 100644
--- a/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.2.php
+++ b/src/__tests__/watchSpecimens/BrokenTsSyntaxModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BrokenTsSyntaxModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/BrokenTsTypingModule.1.php b/src/__tests__/watchSpecimens/BrokenTsTypingModule.1.php
index 2a582bb7..ace91b2d 100644
--- a/src/__tests__/watchSpecimens/BrokenTsTypingModule.1.php
+++ b/src/__tests__/watchSpecimens/BrokenTsTypingModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BrokenTsTypingModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/BrokenTsTypingModule.2.php b/src/__tests__/watchSpecimens/BrokenTsTypingModule.2.php
index a9e87c32..cf23a8cd 100644
--- a/src/__tests__/watchSpecimens/BrokenTsTypingModule.2.php
+++ b/src/__tests__/watchSpecimens/BrokenTsTypingModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class BrokenTsTypingModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ElephizeAnnotationTarget.1.php b/src/__tests__/watchSpecimens/ElephizeAnnotationTarget.1.php
index f3f148e2..a0325b36 100644
--- a/src/__tests__/watchSpecimens/ElephizeAnnotationTarget.1.php
+++ b/src/__tests__/watchSpecimens/ElephizeAnnotationTarget.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___\elephizeAnnotationTarget_entry;
use VK\Elephize\Builtins\RenderableComponent;
use VK\Elephize\Builtins\Stdlib;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ElephizeAnnotationTarget extends RenderableComponent {
/**
diff --git a/src/__tests__/watchSpecimens/ElephizeAnnotationTargetModule.2.php b/src/__tests__/watchSpecimens/ElephizeAnnotationTargetModule.2.php
index dc711a31..73213e1b 100644
--- a/src/__tests__/watchSpecimens/ElephizeAnnotationTargetModule.2.php
+++ b/src/__tests__/watchSpecimens/ElephizeAnnotationTargetModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ElephizeAnnotationTargetModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ImportNewFileModule.1.php b/src/__tests__/watchSpecimens/ImportNewFileModule.1.php
index c33d228d..eec12d3e 100644
--- a/src/__tests__/watchSpecimens/ImportNewFileModule.1.php
+++ b/src/__tests__/watchSpecimens/ImportNewFileModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ImportNewFileModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ImportNewFileToImportModule.1.php b/src/__tests__/watchSpecimens/ImportNewFileToImportModule.1.php
index 75126333..f20a63ee 100644
--- a/src/__tests__/watchSpecimens/ImportNewFileToImportModule.1.php
+++ b/src/__tests__/watchSpecimens/ImportNewFileToImportModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ImportNewFileToImportModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ModifyFileModule.1.php b/src/__tests__/watchSpecimens/ModifyFileModule.1.php
index 158955a6..8d3475cb 100644
--- a/src/__tests__/watchSpecimens/ModifyFileModule.1.php
+++ b/src/__tests__/watchSpecimens/ModifyFileModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ModifyFileModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ModifyFileModule.2.php b/src/__tests__/watchSpecimens/ModifyFileModule.2.php
index 31ef9b17..e4fd5048 100644
--- a/src/__tests__/watchSpecimens/ModifyFileModule.2.php
+++ b/src/__tests__/watchSpecimens/ModifyFileModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ModifyFileModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.1.php b/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.1.php
index f837f841..805670d2 100644
--- a/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.1.php
+++ b/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ModifyFileTypehintsModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.2.php b/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.2.php
index fb4f8695..0822eaf9 100644
--- a/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.2.php
+++ b/src/__tests__/watchSpecimens/ModifyFileTypehintsModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class ModifyFileTypehintsModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/RemoveImportModule.1.php b/src/__tests__/watchSpecimens/RemoveImportModule.1.php
index 6c120bdd..dc5ce664 100644
--- a/src/__tests__/watchSpecimens/RemoveImportModule.1.php
+++ b/src/__tests__/watchSpecimens/RemoveImportModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class RemoveImportModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/UndefVariableUsageModule.1.php b/src/__tests__/watchSpecimens/UndefVariableUsageModule.1.php
index 28162bde..6471c573 100644
--- a/src/__tests__/watchSpecimens/UndefVariableUsageModule.1.php
+++ b/src/__tests__/watchSpecimens/UndefVariableUsageModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class UndefVariableUsageModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/UndefVariableUsageModule.2.php b/src/__tests__/watchSpecimens/UndefVariableUsageModule.2.php
index 9e56b2a5..bbb56b64 100644
--- a/src/__tests__/watchSpecimens/UndefVariableUsageModule.2.php
+++ b/src/__tests__/watchSpecimens/UndefVariableUsageModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class UndefVariableUsageModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/UnusedVariableModule.1.php b/src/__tests__/watchSpecimens/UnusedVariableModule.1.php
index 90479ae9..c24f15c2 100644
--- a/src/__tests__/watchSpecimens/UnusedVariableModule.1.php
+++ b/src/__tests__/watchSpecimens/UnusedVariableModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class UnusedVariableModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/VariableUsageModule.1.php b/src/__tests__/watchSpecimens/VariableUsageModule.1.php
index b7395853..e8f53f0f 100644
--- a/src/__tests__/watchSpecimens/VariableUsageModule.1.php
+++ b/src/__tests__/watchSpecimens/VariableUsageModule.1.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class VariableUsageModule extends CJSModule {
/**
diff --git a/src/__tests__/watchSpecimens/VariableUsageModule.2.php b/src/__tests__/watchSpecimens/VariableUsageModule.2.php
index 822b1074..9ef4adac 100644
--- a/src/__tests__/watchSpecimens/VariableUsageModule.2.php
+++ b/src/__tests__/watchSpecimens/VariableUsageModule.2.php
@@ -3,6 +3,8 @@
namespace watchSpecimens___;
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
+use VK\Elephize\Builtins\ReactContext;
+use VK\Elephize\Builtins\ReactContextSynthetic;
class VariableUsageModule extends CJSModule {
/**
diff --git a/src/builtins/AbstractComponent.php b/src/builtins/AbstractComponent.php
new file mode 100644
index 00000000..68b0b9c0
--- /dev/null
+++ b/src/builtins/AbstractComponent.php
@@ -0,0 +1,34 @@
+flatten($rendered_components));
+ }
+
+ /**
+ * @param array $array
+ * @return string[]
+ */
+ protected function flatten($array) {
+ /** @var string[] $flat */
+ $flat = [];
+
+ foreach ($array as $item) {
+ if (is_array($item)) {
+ $flat = array_merge($flat, $this->flatten($item));
+ } else if ($item !== null) {
+ $flat[] = (string)$item;
+ }
+ }
+
+ return $flat;
+ }
+}
diff --git a/src/builtins/ReactContext.php b/src/builtins/ReactContext.php
new file mode 100644
index 00000000..75a384f0
--- /dev/null
+++ b/src/builtins/ReactContext.php
@@ -0,0 +1,60 @@
+_valuesStack []= $initialValue;
+ $this->_lastNotNullValue = $initialValue;
+ }
+
+ /**
+ * @param ?mixed $providerValue
+ * @return null
+ */
+ public function pushContext($providerValue = null) {
+ $this->_valuesStack []= $providerValue;
+ if ($providerValue !== null) {
+ $this->_lastNotNullValue = $providerValue;
+ }
+ return null;
+ }
+
+ /**
+ * @return null
+ */
+ public function popContext() {
+ $val = array_pop($this->_valuesStack);
+ if ($val !== null) {
+ $this->_lastNotNullValue = null;
+ for ($i = count($this->_valuesStack) - 1; $i >= 0; $i--) {
+ if ($this->_valuesStack[$i] !== null) {
+ $this->_lastNotNullValue = $this->_valuesStack[$i];
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param ReactContext $ctx
+ * @return mixed
+ */
+ public static function getValue(ReactContext &$ctx) {
+ return $ctx->_lastNotNullValue;
+ }
+}
+
diff --git a/src/builtins/ReactContextSynthetic.php b/src/builtins/ReactContextSynthetic.php
new file mode 100644
index 00000000..c1a40d1f
--- /dev/null
+++ b/src/builtins/ReactContextSynthetic.php
@@ -0,0 +1,63 @@
+pushContext($providerValue);
+ return $this;
+ }
+
+ /**
+ * @param array $children
+ * @return self
+ */
+ public function render(array $children)
+ {
+ $this->_renderedString = $this->frg($children);
+ return $this;
+ }
+
+ /**
+ * @param ReactContext $ctx
+ * @return ?string
+ */
+ public function popContext(ReactContext $ctx)
+ {
+ $ctx->popContext();
+ return $this->_renderedString;
+ }
+}
+
diff --git a/src/builtins/RenderableComponent.php b/src/builtins/RenderableComponent.php
index 84311b4b..551518f0 100644
--- a/src/builtins/RenderableComponent.php
+++ b/src/builtins/RenderableComponent.php
@@ -2,40 +2,11 @@
namespace __ROOTNS__\Builtins;
-abstract class RenderableComponent extends CJSModule {
+abstract class RenderableComponent extends AbstractComponent {
/**
* @param array $props
* @param array $children
* @return ?string
*/
abstract public function render(array $props, array $children);
-
- /**
- * React.Fragment support
- *
- * @param array $rendered_components
- * @return string
- */
- protected function frg(array $rendered_components) {
- return implode("\n", $this->flatten($rendered_components));
- }
-
- /**
- * @param array $array
- * @return string[]
- */
- protected function flatten($array) {
- /** @var string[] $flat */
- $flat = [];
-
- foreach ($array as $item) {
- if (is_array($item)) {
- $flat = array_merge($flat, $this->flatten($item));
- } else if ($item !== null) {
- $flat[] = (string)$item;
- }
- }
-
- return $flat;
- }
}
diff --git a/src/ts2php/components/cjsModules/commonjsExternalModule.ts b/src/ts2php/components/cjsModules/commonjsExternalModule.ts
index be68897c..60c807e0 100644
--- a/src/ts2php/components/cjsModules/commonjsExternalModule.ts
+++ b/src/ts2php/components/cjsModules/commonjsExternalModule.ts
@@ -58,6 +58,8 @@ export class CommonjsExternalModule extends CommonjsModule {
namespace ${fullyQualifiedNamespace};
use ${this._namespaces.builtins}\\Stdlib;
use ${this._namespaces.builtins}\\CJSModule;
+use ${this._namespaces.builtins}\\ReactContext;
+use ${this._namespaces.builtins}\\ReactContextSynthetic;
class ${this.className} extends CJSModule {
/**
diff --git a/src/ts2php/components/cjsModules/commonjsModule.ts b/src/ts2php/components/cjsModules/commonjsModule.ts
index c2cc22e1..aca1f9a5 100644
--- a/src/ts2php/components/cjsModules/commonjsModule.ts
+++ b/src/ts2php/components/cjsModules/commonjsModule.ts
@@ -163,6 +163,8 @@ export class CommonjsModule implements ICommonjsModule {
namespace ${fullyQualifiedNamespace};
use ${this._namespaces.builtins}\\Stdlib;
use ${this._namespaces.builtins}\\CJSModule;
+use ${this._namespaces.builtins}\\ReactContext;
+use ${this._namespaces.builtins}\\ReactContextSynthetic;
class ${this.className} extends CJSModule {
/**
diff --git a/src/ts2php/components/cjsModules/reactModule.ts b/src/ts2php/components/cjsModules/reactModule.ts
index 1d80cf33..f3878004 100644
--- a/src/ts2php/components/cjsModules/reactModule.ts
+++ b/src/ts2php/components/cjsModules/reactModule.ts
@@ -55,6 +55,8 @@ export class ReactModule extends CommonjsModule implements IReactModule {
namespace ${fullyQualifiedNamespace};
use ${this._namespaces.builtins}\\RenderableComponent;
use ${this._namespaces.builtins}\\Stdlib;
+use ${this._namespaces.builtins}\\ReactContext;
+use ${this._namespaces.builtins}\\ReactContextSynthetic;
class ${this.className} extends RenderableComponent {
/**
diff --git a/src/ts2php/components/react/reactHooks.ts b/src/ts2php/components/react/reactHooks.ts
index c219abac..781f716d 100644
--- a/src/ts2php/components/react/reactHooks.ts
+++ b/src/ts2php/components/react/reactHooks.ts
@@ -7,7 +7,6 @@ import { renderNode } from '../codegen/renderNodes';
const hooksNames = [
'useState',
'useEffect',
- 'useContext',
'useReducer',
'useCallback',
'useMemo',
@@ -15,6 +14,9 @@ const hooksNames = [
'useImperativeHandle',
'useLayoutEffect',
'useDebugValue',
+
+ 'useContext',
+ 'createContext', // process it here too because why not
];
// Initialize react module name in current scope
@@ -28,7 +30,7 @@ export function initReact(node: ts.ImportDeclaration, context: Context, nodeIdent: string) => string | null;
+type HookRenderer = (node: ts.CallExpression, context: Context) => string | null;
type HookRenderers = Dict;
const dropRender: HookRenderer = (node, context) => {
@@ -45,11 +47,6 @@ const hookRenderers: HookRenderers = {
return `[${val}]`;
},
- 'useContext': (node, context, nodeIdent) => {
- context.log.error('React contexts are not supported in isomorphic components', [], context.log.ctx(node));
- return dropRender(node, context, nodeIdent);
- },
-
'useReducer': (node, context) => {
const val = renderNode(node.arguments[1], context); // recognize only 2nd argument of call, it's initial state
if (!val) {
@@ -66,6 +63,16 @@ const hookRenderers: HookRenderers = {
'useImperativeHandle': () => '!null',
'useLayoutEffect': () => '!null',
'useDebugValue': () => '!null',
+
+ // React contexts processing
+ 'createContext': (node, context) => {
+ const contextValue = renderNode(node.arguments[0], context);
+ return `new \\${context.namespaces.builtins}\\ReactContext(${contextValue})`;
+ },
+ 'useContext': (node, context) => {
+ const contextNode = renderNode(node.arguments[0], context);
+ return `\\${context.namespaces.builtins}\\ReactContext::getValue(${contextNode})`;
+ },
};
export function reactHooksSupport(context: Context, node: ts.CallExpression): string | false {
@@ -77,7 +84,7 @@ export function reactHooksSupport(context: Context, node: ts.CallEx
}
if (hooksNames.includes(ex.name.getText())) {
- return hookRenderers[ex.name.getText()](node, context, ex.name.getText()) || false;
+ return hookRenderers[ex.name.getText()](node, context) || false;
}
return false;
}
@@ -88,7 +95,7 @@ export function reactHooksSupport(context: Context, node: ts.CallEx
}
if (context.moduleDescriptor.checkSpecialVarIdentifier(node.expression, hook)) {
- return hookRenderers[hook](node, context, node.expression.getText()) || false;
+ return hookRenderers[hook](node, context) || false;
}
return false;
diff --git a/src/ts2php/components/typeInference/basicTypes.ts b/src/ts2php/components/typeInference/basicTypes.ts
index f4376f41..9bf296d5 100644
--- a/src/ts2php/components/typeInference/basicTypes.ts
+++ b/src/ts2php/components/typeInference/basicTypes.ts
@@ -149,6 +149,11 @@ function parseArrayType(node: ts.Type, baseNode: ts.Node, checker: ts.TypeChecke
return false;
}
+ // @ts-ignore TODO: find more convenient way to detect parent name
+ if (sym.escapedName === 'Context' && sym.parent.escapedName === 'React') {
+ return false; // context types will be handled separately
+ }
+
let isObjectType = false;
if (!excludeObjects) {
isObjectType = (ifaceDecl as ts.InterfaceDeclaration).members.length > 0;
@@ -251,6 +256,9 @@ const transformTypeName = (type: ts.Type, node: ts.Node, checker: ts.TypeChecker
if (t === 'Element' && (type.symbol as any)?.parent?.escapedName === 'JSX') { // Workaround; jsx elements are rendered to strings
return 'string';
}
+ if (t.startsWith('React.Context')) {
+ return 'ReactContext';
+ }
return typeMap[t] || 'mixed';
};
diff --git a/src/ts2php/renderers/jsxElement.ts b/src/ts2php/renderers/jsxElement.ts
index 0b591fe4..837d5841 100644
--- a/src/ts2php/renderers/jsxElement.ts
+++ b/src/ts2php/renderers/jsxElement.ts
@@ -22,6 +22,28 @@ export function tJsxElement(node: ts.JsxElement, context: Context)
'[' + childrenRendered.join(', ') + ']' :
'[]';
+ if (node.openingElement.tagName.kind === ts.SyntaxKind.PropertyAccessExpression) {
+ // Probably react context provider?
+ if (
+ node.openingElement.tagName.name.getText() === 'Provider' &&
+ context.checker.getTypeAtLocation(node.openingElement.tagName.expression)?.symbol.escapedName === 'Context'
+ ) {
+ const contextValue = renderNode(
+ node.openingElement.attributes.properties
+ .find((prop): prop is ts.JsxAttribute => {
+ return prop.kind === ts.SyntaxKind.JsxAttribute && prop.name?.getText() === 'value';
+ })?.initializer,
+ context
+ );
+ const contextNode = renderNode(node.openingElement.tagName.expression, context);
+ const ctxChildren = renderNodes(Array.from(node.children), context, true).join(', ');
+ return `\\${context.namespaces.builtins}\\ReactContextSynthetic::spawn()
+ ->pushContext(${contextNode}, ${contextValue})
+ ->render([${ctxChildren}])
+ ->popContext(${contextNode})`;
+ }
+ }
+
if (node.openingElement.tagName.kind !== ts.SyntaxKind.Identifier) {
context.log.error('Non-identifiers are not supported as jsx elements', [], context.log.ctx(node));
return 'null';