nitro-codegen
Version:
The code-generator for react-native-nitro-modules.
81 lines (75 loc) • 2.06 kB
text/typescript
import type { Language, Platform } from '../getPlatformSpecs.js'
import type { Type } from './types/Type.js'
/**
* Represents a file with source code, in a specific programming language.
*/
export interface SourceFile {
/**
* The name of the file with extension (e.g. `Image.hpp`)
*/
name: string
/**
* The subdirectory/subdirectories of the file, or empty (`[]`) if none.
*/
subdirectory: string[]
/**
* The full content of the file.
*/
content: string
/**
* The language the {@linkcode content} is written in (e.g. `c++`)
*/
language: Language
/**
* The platform this file can be used on or is created for. (e.g. `ios`)
*/
platform: Platform | 'shared'
}
/**
* Represents a {@linkcode SourceFile} that also references other types.
*/
export interface FileWithReferencedTypes extends SourceFile {
/**
* All external types this {@linkcode SourceFile} references,
* either as return types, parameter types, or member types.
*/
referencedTypes: Type[]
}
/**
* Represents an import for a specific header or module.
*
* E.g. `include "Image.hpp"`, or `import NitroModules`
*/
export interface SourceImport {
/**
* The name of the header or module to import (e.g. `Image.hpp`)
*/
name: string
/**
* If this is a C++ import, it could also be forward-declared.
* @example
* ```cpp
* namespace NitroImage {
* class HybridImage;
* }
* ```
*/
forwardDeclaration?: string
/**
* The language this file is written in (e.g. `c++`)
*/
language: Language
/**
* Whether the import is a user-defined header (something local, like `"MyObject.hpp"`)
* or a shared system header (like `<NitroModules/HybridObject.hpp>`)
*/
space: 'user' | 'system'
}
type GroupedFiles = Record<SourceFile['platform'], SourceFile[]>
export function groupByPlatform(files: SourceFile[]): GroupedFiles {
const result: GroupedFiles = { shared: [], ios: [], android: [] }
for (const file of files) {
result[file.platform].push(file)
}
return result
}