Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ node_modules/
.idea/
demo/node_modules
demo/public/build
demo/public/kphp_out
demo/public/dist
demo/public/compiled_demo

Expand Down
5 changes: 4 additions & 1 deletion demo/src/components/App.isoentry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 = () => {
Expand Down Expand Up @@ -71,7 +72,9 @@ export const App: React.FunctionComponent = () => {
<StatefulInput type={'number'} alignment={'left'} initialValue={data[key].toString()} />
</span>
<span className={'elephize-test-coeff'}>
<Radio name={'el-test'} value={'1'}>1x</Radio>
<ctx.Provider value={{ 'label': 'context! overridden' }}>
<Radio name={'el-test'} value={'1'}>1x</Radio>
</ctx.Provider>
<Radio name={'el-test'} value={'2'}>2x</Radio>
<Radio name={'el-test'} value={'3'}>3x</Radio>
<CheckBox name={'test2'} />
Expand Down
5 changes: 5 additions & 0 deletions demo/src/components/iso_palette/Context.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import * as React from 'react';

export const ctx = React.createContext({
'label': 'contexts! original'
});
4 changes: 4 additions & 0 deletions demo/src/components/iso_palette/Radio/Radio.iso.tsx
Original file line number Diff line number Diff line change
@@ -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<any> = {
className: '',
Expand All @@ -15,6 +16,8 @@ const defaultProps: React.InputHTMLAttributes<any> = {
// @elephizeTarget
export const Radio: React.FunctionComponent<React.InputHTMLAttributes<any>> = (inputProps) => {
const props = { ...defaultProps, ...inputProps };
const { useContext } = React;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

всегда нужно внутри функции брать useContext из реакта, или это просто опечатка

const context = useContext(ctx);

const {
className,
Expand All @@ -32,6 +35,7 @@ export const Radio: React.FunctionComponent<React.InputHTMLAttributes<any>> = (i
<label className={classNames}>
<input type="radio" className='Radio__input Radio__visuallyHidden' {...nativeProps} />
<span className='Radio__control' />
{context.label}
{children && <span className='Radio__text'>{children}</span>}
</label>
);
Expand Down
12 changes: 12 additions & 0 deletions doc/support.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,18 @@

Все стандартные обработчики событий игнорируются при транспиляции.

#### React.Context

Поддерживается использование функции `React.createContext()` совместно с хуком `useContext()` и конструкцией `<ctx.Provider>`.

Особенности:

- Объект, передаваемый в контекст, не должен иметь внутри себя никаких несериализуемых конструкций (в т.ч. функций, объектов классов, DOM-нод)
- В случае вложенности двух одинаковых контекстов используется ближайший. При этом значение объекта контекста полностью
заменяется (не дополняется!). Атрибут `value` в конструкции `<ctx.Provider>` также заменяет значение по умолчанию, а не дополняет его.
- Объект контекста желательно создавать в отдельном файле, чтобы исключить возможные циклические зависимости между файлами.
В случае появления циклических импортов, вместо идентификатора контекста приедет null, и это совсем не то, чего мы хотим.

### Ремарки про kphp

- Чем однозначнее типы, которые вы используете - тем лучше, т.к. меньше шанс того, что kphp запутается при выводе типов в транспилированном коде.
Expand Down
6 changes: 4 additions & 2 deletions external/check_kphp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 $?
1 change: 1 addition & 0 deletions src/__tests__/5_components.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'] },
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/FilterModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/FindModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/ForEachModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/IncludesModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/IndexOfModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/IsArrayModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/MapModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/PushPopModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/ReduceModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/SliceModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/SomeModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/arrayMethods/SpliceModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/ArrowFunctionModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/BasicOperatorsModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/BinaryExpressionModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/BlockModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/CallExpressionModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/EnumImportModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/EnumModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/ExportModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/FunctionDeclarationModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/IdentifierModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/IfStatementModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/ImportModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
/**
Expand Down
1 change: 1 addition & 0 deletions src/__tests__/specimens/byType/JsxModule.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
use VK\Elephize\Builtins\Stdlib;
use VK\Elephize\Builtins\CJSModule;
use VK\Elephize\Builtins\ReactContext;

class JsxModule extends CJSModule {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/LoopsModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 LoopsModule extends CJSModule {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 ObjectComputedPropertiesModule extends CJSModule {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 ObjectLiteralExpressionModule extends CJSModule {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 ParameterDestructuringModule extends CJSModule {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 PropertyAccessExpressionModule extends CJSModule {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/RestOperatorModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 RestOperatorModule extends CJSModule {
/**
Expand Down
2 changes: 2 additions & 0 deletions src/__tests__/specimens/byType/ServerIfStatementModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 ServerIfStatementModule extends CJSModule {
/**
Expand Down
Loading