diff --git a/src/SDK/Language.php b/src/SDK/Language.php index 1c2bde785..083b12be4 100644 --- a/src/SDK/Language.php +++ b/src/SDK/Language.php @@ -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 */ @@ -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)); + } } diff --git a/src/SDK/Language/Dart.php b/src/SDK/Language/Dart.php index 3b8a17e26..b5d90e9ba 100644 --- a/src/SDK/Language/Dart.php +++ b/src/SDK/Language/Dart.php @@ -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 @@ -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 */ diff --git a/src/SDK/Language/Deno.php b/src/SDK/Language/Deno.php index 4ecaa8b68..701d9cbde 100644 --- a/src/SDK/Language/Deno.php +++ b/src/SDK/Language/Deno.php @@ -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 */ @@ -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) . ']'; - } } diff --git a/src/SDK/Language/DotNet.php b/src/SDK/Language/DotNet.php index 24fcdb700..7d08eeb7b 100644 --- a/src/SDK/Language/DotNet.php +++ b/src/SDK/Language/DotNet.php @@ -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 { ' . $elements . ' }'; + } + + protected function transformPermissionAction(string $action): string + { + return ucfirst($action); + } + + protected function transformPermissionRole(string $role): string + { + return ucfirst($role); + } + public function getPropertyOverrides(): array { return [ @@ -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 { ' . implode(', ', $permissions) . ' }'; - } - /** * @return array */ diff --git a/src/SDK/Language/Go.php b/src/SDK/Language/Go.php index 1129139a8..a5ea3d4d9 100644 --- a/src/SDK/Language/Go.php +++ b/src/SDK/Language/Go.php @@ -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 */ diff --git a/src/SDK/Language/GraphQL.php b/src/SDK/Language/GraphQL.php index 0f82bf0c8..f6e3a9311 100644 --- a/src/SDK/Language/GraphQL.php +++ b/src/SDK/Language/GraphQL.php @@ -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 diff --git a/src/SDK/Language/Kotlin.php b/src/SDK/Language/Kotlin.php index b4dd80e66..de53f1e56 100644 --- a/src/SDK/Language/Kotlin.php +++ b/src/SDK/Language/Kotlin.php @@ -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 @@ -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 */ diff --git a/src/SDK/Language/Node.php b/src/SDK/Language/Node.php index 469681790..59c184b1a 100644 --- a/src/SDK/Language/Node.php +++ b/src/SDK/Language/Node.php @@ -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'])) { @@ -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 === '{}') ? '{}' diff --git a/src/SDK/Language/PHP.php b/src/SDK/Language/PHP.php index 9a86e28a1..e79882b0a 100644 --- a/src/SDK/Language/PHP.php +++ b/src/SDK/Language/PHP.php @@ -130,6 +130,21 @@ public function getIdentifierOverrides(): array return []; } + public function getStaticAccessOperator(): string + { + return '::'; + } + + public function getStringQuote(): string + { + return '"'; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @return array */ @@ -379,23 +394,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 '[' . implode(', ', $permissions) . ']'; - } - /** * Converts JSON Object To PHP Native Assoc Array * diff --git a/src/SDK/Language/Python.php b/src/SDK/Language/Python.php index 15d9ff2f0..b5d210cc0 100644 --- a/src/SDK/Language/Python.php +++ b/src/SDK/Language/Python.php @@ -84,6 +84,21 @@ public function getIdentifierOverrides(): array return []; } + public function getStaticAccessOperator(): string + { + return '.'; + } + + public function getStringQuote(): string + { + return '"'; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @return array */ @@ -354,23 +369,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) . ']'; - } - public function getFilters(): array { return [ diff --git a/src/SDK/Language/REST.php b/src/SDK/Language/REST.php index 3f956e744..f950f8118 100644 --- a/src/SDK/Language/REST.php +++ b/src/SDK/Language/REST.php @@ -12,6 +12,21 @@ public function getName(): string return 'REST'; } + public function getStaticAccessOperator(): string + { + return '.'; + } + + public function getStringQuote(): string + { + return '"'; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @param array $param * @return string diff --git a/src/SDK/Language/Ruby.php b/src/SDK/Language/Ruby.php index cf384e634..46c30e5c6 100644 --- a/src/SDK/Language/Ruby.php +++ b/src/SDK/Language/Ruby.php @@ -86,6 +86,21 @@ public function getIdentifierOverrides(): array return []; } + public function getStaticAccessOperator(): string + { + return '.'; + } + + public function getStringQuote(): string + { + return "'"; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @return array */ @@ -325,23 +340,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 '[' . implode(', ', $permissions) . ']'; - } - /** * Converts JSON Object To Ruby Native Hash * diff --git a/src/SDK/Language/Swift.php b/src/SDK/Language/Swift.php index 47bf45985..9b74cdd8d 100644 --- a/src/SDK/Language/Swift.php +++ b/src/SDK/Language/Swift.php @@ -101,6 +101,21 @@ public function getIdentifierOverrides(): array ]; } + public function getStaticAccessOperator(): string + { + return '.'; + } + + public function getStringQuote(): string + { + return '"'; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @return array */ @@ -450,23 +465,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 '[' . implode(', ', $permissions) . ']'; - } - /** * Converts JSON Object To Swift Native Dictionary * diff --git a/src/SDK/Language/Web.php b/src/SDK/Language/Web.php index 4a234076f..0e3a763e3 100644 --- a/src/SDK/Language/Web.php +++ b/src/SDK/Language/Web.php @@ -14,6 +14,21 @@ public function getName(): string return 'Web'; } + public function getStaticAccessOperator(): string + { + return '.'; + } + + public function getStringQuote(): string + { + return "'"; + } + + public function getArrayOf(string $elements): string + { + return '[' . $elements . ']'; + } + /** * @return array */ @@ -163,23 +178,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) . ']'; - } - public function getReadOnlyProperties(array $parameter, string $responseModel, array $spec = []): array { $properties = [];