diff --git a/.gitignore b/.gitignore index e75c34a3..a00bcfca 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ node_modules/ .idea/ demo/node_modules demo/public/build +demo/public/kphp_out demo/public/dist demo/public/compiled_demo diff --git a/demo/src/components/App.isoentry.tsx b/demo/src/components/App.isoentry.tsx index b835530a..8ea72efd 100644 --- a/demo/src/components/App.isoentry.tsx +++ b/demo/src/components/App.isoentry.tsx @@ -3,6 +3,7 @@ import { Button } from '#iso_palette/Button/Button.iso'; import { StatefulInput } from '#iso_palette/Input/Input.iso'; import { Radio } from '#iso_palette/Radio/Radio.iso'; import { CheckBox } from '#iso_palette/CheckBox/CheckBox.iso'; +import { ctx } from '#iso_palette/Context'; // @elephizeTarget export const GenericIcon: React.FunctionComponent = () => { @@ -71,7 +72,9 @@ export const App: React.FunctionComponent = () => { - 1x + + 1x + 2x 3x diff --git a/demo/src/components/iso_palette/Context.tsx b/demo/src/components/iso_palette/Context.tsx new file mode 100644 index 00000000..1947d837 --- /dev/null +++ b/demo/src/components/iso_palette/Context.tsx @@ -0,0 +1,5 @@ +import * as React from 'react'; + +export const ctx = React.createContext({ + 'label': 'contexts! original' +}); diff --git a/demo/src/components/iso_palette/Radio/Radio.iso.tsx b/demo/src/components/iso_palette/Radio/Radio.iso.tsx index 411c5a9c..84d3fef0 100644 --- a/demo/src/components/iso_palette/Radio/Radio.iso.tsx +++ b/demo/src/components/iso_palette/Radio/Radio.iso.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import { classNames as cx } from '#utils/classnames'; +import { ctx } from '#iso_palette/Context'; const defaultProps: React.InputHTMLAttributes = { className: '', @@ -15,6 +16,8 @@ const defaultProps: React.InputHTMLAttributes = { // @elephizeTarget export const Radio: React.FunctionComponent> = (inputProps) => { const props = { ...defaultProps, ...inputProps }; + const { useContext } = React; + const context = useContext(ctx); const { className, @@ -32,6 +35,7 @@ export const Radio: React.FunctionComponent> = (i ); diff --git a/doc/support.md b/doc/support.md index ef68ccfc..9e270d53 100644 --- a/doc/support.md +++ b/doc/support.md @@ -96,6 +96,18 @@ Все стандартные обработчики событий игнорируются при транспиляции. +#### React.Context + +Поддерживается использование функции `React.createContext()` совместно с хуком `useContext()` и конструкцией ``. + +Особенности: + +- Объект, передаваемый в контекст, не должен иметь внутри себя никаких несериализуемых конструкций (в т.ч. функций, объектов классов, DOM-нод) +- В случае вложенности двух одинаковых контекстов используется ближайший. При этом значение объекта контекста полностью + заменяется (не дополняется!). Атрибут `value` в конструкции `` также заменяет значение по умолчанию, а не дополняет его. +- Объект контекста желательно создавать в отдельном файле, чтобы исключить возможные циклические зависимости между файлами. + В случае появления циклических импортов, вместо идентификатора контекста приедет 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';