Skip to content
Merged
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
83 changes: 83 additions & 0 deletions src/SDK/Language.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,25 @@ abstract public function getKeywords(): array;
*/
abstract public function getIdentifierOverrides(): array;

/**
* Get the static access operator for the language (e.g. '::' for PHP, '.' for JS)
* @return string
*/
abstract public function getStaticAccessOperator(): string;

/**
* Get the string quote character for the language (e.g. '"' for PHP, "'" for JS)
* @return string
*/
abstract public function getStringQuote(): string;

/**
* Wrap elements in an array syntax for the language
* @param string $elements Comma-separated elements
* @return string
*/
abstract public function getArrayOf(string $elements): string;

/**
* @return array<array>
*/
Expand Down Expand Up @@ -193,4 +212,68 @@ public function hasPermissionParam(array $parameters): bool
}
return false;
}

/**
* Get the prefix for Permission and Role classes (e.g., 'sdk.' for Node)
* @return string
*/
protected function getPermissionPrefix(): string
{
return '';
}

/**
* Transform permission action name for language-specific casing
* Override in child classes if needed (e.g., DotNet uses ucfirst)
* @param string $action
* @return string
*/
protected function transformPermissionAction(string $action): string
{
return $action;
}

/**
* Transform permission role name for language-specific casing
* Override in child classes if needed (e.g., DotNet uses ucfirst)
* @param string $role
* @return string
*/
protected function transformPermissionRole(string $role): string
{
return $role;
}

/**
* Generate permission example code for the language
* @param string $example Permission string example
* @return string
*/
public function getPermissionExample(string $example): string
{
$permissions = [];
$staticOp = $this->getStaticAccessOperator();
$quote = $this->getStringQuote();
$prefix = $this->getPermissionPrefix();

foreach ($this->extractPermissionParts($example) as $permission) {
$args = [];
if ($permission['id'] !== null) {
$args[] = $quote . $permission['id'] . $quote;
}
if ($permission['innerRole'] !== null) {
$args[] = $quote . $permission['innerRole'] . $quote;
}
$argsString = implode(', ', $args);

$action = $permission['action'];
$role = $permission['role'];
$action = $this->transformPermissionAction($action);
$role = $this->transformPermissionRole($role);

$permissions[] = $prefix . 'Permission' . $staticOp . $action . '(' . $prefix . 'Role' . $staticOp . $role . '(' . $argsString . '))';
}

return $this->getArrayOf(implode(', ', $permissions));
}
}
32 changes: 15 additions & 17 deletions src/SDK/Language/Dart.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,21 @@ public function getIdentifierOverrides(): array
];
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return "'";
}

public function getArrayOf(string $elements): string
{
return '[' . $elements . ']';
}

/**
* @param array $parameter
* @return string
Expand Down Expand Up @@ -252,23 +267,6 @@ public function getParamExample(array $param): string
};
}

public function getPermissionExample(string $example): string
{
$permissions = [];
foreach ($this->extractPermissionParts($example) as $permission) {
$args = [];
if ($permission['id'] !== null) {
$args[] = "'" . $permission['id'] . "'";
}
if ($permission['innerRole'] !== null) {
$args[] = "'" . $permission['innerRole'] . "'";
}
$argsString = implode(', ', $args);
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
}
return '[' . implode(', ', $permissions) . ']';
}

/**
* @return array
*/
Expand Down
32 changes: 15 additions & 17 deletions src/SDK/Language/Deno.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ public function getName(): string
return 'Deno';
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return "'";
}

public function getArrayOf(string $elements): string
{
return '[' . $elements . ']';
}

/**
* @return array
*/
Expand Down Expand Up @@ -188,21 +203,4 @@ public function getParamExample(array $param): string
self::TYPE_STRING => "'{$example}'",
};
}

public function getPermissionExample(string $example): string
{
$permissions = [];
foreach ($this->extractPermissionParts($example) as $permission) {
$args = [];
if ($permission['id'] !== null) {
$args[] = "'" . $permission['id'] . "'";
}
if ($permission['innerRole'] !== null) {
$args[] = "'" . $permission['innerRole'] . "'";
}
$argsString = implode(', ', $args);
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
}
return '[' . implode(', ', $permissions) . ']';
}
}
42 changes: 25 additions & 17 deletions src/SDK/Language/DotNet.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,31 @@ public function getIdentifierOverrides(): array
];
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return '"';
}

public function getArrayOf(string $elements): string
{
return 'new List<string> { ' . $elements . ' }';
}

protected function transformPermissionAction(string $action): string
{
return ucfirst($action);
}

protected function transformPermissionRole(string $role): string
{
return ucfirst($role);
}

public function getPropertyOverrides(): array
{
return [
Expand Down Expand Up @@ -312,23 +337,6 @@ public function getParamExample(array $param): string
return $output;
}

public function getPermissionExample(string $example): string
{
$permissions = [];
foreach ($this->extractPermissionParts($example) as $permission) {
$args = [];
if ($permission['id'] !== null) {
$args[] = '"' . $permission['id'] . '"';
}
if ($permission['innerRole'] !== null) {
$args[] = '"' . $permission['innerRole'] . '"';
}
$argsString = implode(', ', $args);
$permissions[] = 'Permission.' . ucfirst($permission['action']) . '(Role.' . ucfirst($permission['role']) . '(' . $argsString . '))';
}
return 'new List<string> { ' . implode(', ', $permissions) . ' }';
}

/**
* @return array
*/
Expand Down
15 changes: 15 additions & 0 deletions src/SDK/Language/Go.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,21 @@ public function getKeywords(): array
];
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return '"';
}

public function getArrayOf(string $elements): string
{
return '[' . $elements . ']';
}

/**
* @return array
*/
Expand Down
15 changes: 15 additions & 0 deletions src/SDK/Language/GraphQL.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ public function getName(): string
return 'GraphQL';
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return '"';
}

public function getArrayOf(string $elements): string
{
return '[' . $elements . ']';
}

/**
* @param $type
* @return string
Expand Down
32 changes: 15 additions & 17 deletions src/SDK/Language/Kotlin.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,21 @@ public function getIdentifierOverrides(): array
return [];
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return '"';
}

public function getArrayOf(string $elements): string
{
return 'listOf(' . $elements . ')';
}

/**
* @param array $parameter
* @param array $spec
Expand Down Expand Up @@ -281,23 +296,6 @@ public function getParamExample(array $param): string
return $output;
}

public function getPermissionExample(string $example): string
{
$permissions = [];
foreach ($this->extractPermissionParts($example) as $permission) {
$args = [];
if ($permission['id'] !== null) {
$args[] = '"' . $permission['id'] . '"';
}
if ($permission['innerRole'] !== null) {
$args[] = '"' . $permission['innerRole'] . '"';
}
$argsString = implode(', ', $args);
$permissions[] = 'Permission.' . $permission['action'] . '(Role.' . $permission['role'] . '(' . $argsString . '))';
}
return 'listOf(' . implode(', ', $permissions) . ')';
}

/**
* @return array
*/
Expand Down
23 changes: 22 additions & 1 deletion src/SDK/Language/Node.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,26 @@ public function getName(): string
return 'NodeJS';
}

public function getStaticAccessOperator(): string
{
return '.';
}

public function getStringQuote(): string
{
return "'";
}

public function getArrayOf(string $elements): string
{
return '[' . $elements . ']';
}

protected function getPermissionPrefix(): string
{
return 'sdk.';
}

public function getTypeName(array $parameter, array $method = []): string
{
if (isset($parameter['enumName'])) {
Expand Down Expand Up @@ -140,7 +160,8 @@ public function getParamExample(array $param): string
}

return match ($type) {
self::TYPE_ARRAY, self::TYPE_FILE, self::TYPE_INTEGER, self::TYPE_NUMBER => $example,
self::TYPE_ARRAY => $this->isPermissionString($example) ? $this->getPermissionExample($example) : $example,
self::TYPE_FILE, self::TYPE_INTEGER, self::TYPE_NUMBER => $example,
self::TYPE_BOOLEAN => ($example) ? 'true' : 'false',
self::TYPE_OBJECT => ($example === '{}')
? '{}'
Expand Down
Loading
Loading