create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
410 lines (357 loc) • 10.9 kB
JavaScript
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @format
*/
'use strict';
export type PlatformType = 'iOS' | 'android';
export type CommandsFunctionTypeAnnotation = $ReadOnly<{|
type: 'FunctionTypeAnnotation',
params: $ReadOnlyArray<CommandsFunctionTypeParamAnnotation>,
|}>;
export type CommandsFunctionTypeParamAnnotation = $ReadOnly<{|
name: string,
typeAnnotation: CommandsTypeAnnotation,
|}>;
export type CommandsTypeAnnotation =
| ReservedFunctionValueTypeAnnotation
| BooleanTypeAnnotation
| Int32TypeAnnotation
| DoubleTypeAnnotation
| FloatTypeAnnotation
| StringTypeAnnotation;
type ReservedFunctionValueTypeAnnotation = $ReadOnly<{|
type: 'ReservedFunctionValueTypeAnnotation',
name: ReservedFunctionValueTypeName,
|}>;
export type DoubleTypeAnnotation = $ReadOnly<{|
type: 'DoubleTypeAnnotation',
|}>;
export type FloatTypeAnnotation = $ReadOnly<{|
type: 'FloatTypeAnnotation',
|}>;
export type BooleanTypeAnnotation = $ReadOnly<{|
type: 'BooleanTypeAnnotation',
|}>;
export type Int32TypeAnnotation = $ReadOnly<{|
type: 'Int32TypeAnnotation',
|}>;
export type StringTypeAnnotation = $ReadOnly<{|
type: 'StringTypeAnnotation',
|}>;
export type EventObjectPropertyType =
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
name: string,
optional: boolean,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
name: string,
optional: boolean,
properties: $ReadOnlyArray<EventObjectPropertyType>,
|}>;
type PropTypeTypeAnnotation =
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
default: boolean | null,
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
default: string | null,
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
default: number,
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
default: number | null,
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
default: number,
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
default: string,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'Int32EnumTypeAnnotation',
default: number,
options: $ReadOnlyArray<{|
value: number,
|}>,
|}>
| $ReadOnly<{|
type: 'ReservedPropTypeAnnotation',
name:
| 'ColorPrimitive'
| 'ImageSourcePrimitive'
| 'PointPrimitive'
| 'EdgeInsetsPrimitive',
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>
| $ReadOnly<{|
type: 'ArrayTypeAnnotation',
elementType:
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
default: string,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>
| $ReadOnly<{|
type: 'ReservedPropTypeAnnotation',
name:
| 'ColorPrimitive'
| 'ImageSourcePrimitive'
| 'PointPrimitive'
| 'EdgeInsetsPrimitive',
|}>
| $ReadOnly<{|
type: 'ArrayTypeAnnotation',
elementType: $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>,
|}>,
|}>;
export type PropTypeShape = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: PropTypeTypeAnnotation,
|}>;
export type EventTypeShape = $ReadOnly<{|
name: string,
bubblingType: 'direct' | 'bubble',
optional: boolean,
paperTopLevelNameDeprecated?: string,
typeAnnotation: $ReadOnly<{|
type: 'EventTypeAnnotation',
argument?: $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<EventObjectPropertyType>,
|}>,
|}>,
|}>;
export type CommandTypeShape = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: CommandsFunctionTypeAnnotation,
|}>;
export type OptionsShape = $ReadOnly<{|
interfaceOnly?: boolean,
// Use for components with no current paper rename in progress
// Does not check for new name
paperComponentName?: string,
// Use for components that are not used on other platforms.
excludedPlatforms?: $ReadOnlyArray<PlatformType>,
// Use for components currently being renamed in paper
// Will use new name if it is available and fallback to this name
paperComponentNameDeprecated?: string,
|}>;
export type ExtendsPropsShape = $ReadOnly<{|
type: 'ReactNativeBuiltInType',
knownTypeName: 'ReactNativeCoreViewProps',
|}>;
export type ComponentShape = $ReadOnly<{|
...OptionsShape,
extendsProps: $ReadOnlyArray<ExtendsPropsShape>,
events: $ReadOnlyArray<EventTypeShape>,
props: $ReadOnlyArray<PropTypeShape>,
commands: $ReadOnlyArray<CommandTypeShape>,
|}>;
export type SchemaType = $ReadOnly<{|
modules: $ReadOnly<{|
[hasteModuleName: string]: ComponentSchema | NativeModuleSchema,
|}>,
|}>;
export type ComponentSchema = $ReadOnly<{|
type: 'Component',
components: $ReadOnly<{|
[componentName: string]: ComponentShape,
|}>,
|}>;
/**
* NativeModule Types
*/
export type Nullable<+T: NativeModuleTypeAnnotation> =
| NullableTypeAnnotation<T>
| T;
export type NullableTypeAnnotation<
+T: NativeModuleTypeAnnotation,
> = $ReadOnly<{|
type: 'NullableTypeAnnotation',
typeAnnotation: T,
|}>;
export type NativeModuleSchema = $ReadOnly<{|
type: 'NativeModule',
aliases: NativeModuleAliasMap,
spec: NativeModuleSpec,
moduleNames: $ReadOnlyArray<string>,
// Use for modules that are not used on other platforms.
// TODO: It's clearer to define `restrictedToPlatforms` instead, but
// `excludedPlatforms` is used here to be consistent with ComponentSchema.
excludedPlatforms?: $ReadOnlyArray<PlatformType>,
|}>;
type NativeModuleSpec = $ReadOnly<{|
properties: $ReadOnlyArray<NativeModulePropertySchema>,
|}>;
export type NativeModulePropertySchema = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: Nullable<NativeModuleFunctionTypeAnnotation>,
|}>;
export type NativeModuleAliasMap = $ReadOnly<{|
[aliasName: string]: NativeModuleObjectTypeAnnotation,
|}>;
export type NativeModuleFunctionTypeAnnotation = $ReadOnly<{|
type: 'FunctionTypeAnnotation',
params: $ReadOnlyArray<NativeModuleMethodParamSchema>,
returnTypeAnnotation: Nullable<NativeModuleReturnTypeAnnotation>,
|}>;
export type NativeModuleMethodParamSchema = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: Nullable<NativeModuleParamTypeAnnotation>,
|}>;
export type NativeModuleObjectTypeAnnotation = $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<NativeModuleObjectTypeAnnotationPropertySchema>,
|}>;
export type NativeModuleObjectTypeAnnotationPropertySchema = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: Nullable<NativeModuleBaseTypeAnnotation>,
|}>;
export type NativeModuleArrayTypeAnnotation<
+T: Nullable<NativeModuleBaseTypeAnnotation>,
> = $ReadOnly<{|
type: 'ArrayTypeAnnotation',
/**
* TODO(T72031674): Migrate all our NativeModule specs to not use
* invalid Array ElementTypes. Then, make the elementType required.
*/
elementType?: T,
|}>;
export type NativeModuleStringTypeAnnotation = $ReadOnly<{|
type: 'StringTypeAnnotation',
|}>;
export type NativeModuleNumberTypeAnnotation = $ReadOnly<{|
type: 'NumberTypeAnnotation',
|}>;
export type NativeModuleInt32TypeAnnotation = $ReadOnly<{|
type: 'Int32TypeAnnotation',
|}>;
export type NativeModuleDoubleTypeAnnotation = $ReadOnly<{|
type: 'DoubleTypeAnnotation',
|}>;
export type NativeModuleFloatTypeAnnotation = $ReadOnly<{|
type: 'FloatTypeAnnotation',
|}>;
export type NativeModuleBooleanTypeAnnotation = $ReadOnly<{|
type: 'BooleanTypeAnnotation',
|}>;
export type NativeModuleGenericObjectTypeAnnotation = $ReadOnly<{|
type: 'GenericObjectTypeAnnotation',
|}>;
export type NativeModuleReservedFunctionValueTypeAnnotation = $ReadOnly<{|
type: 'ReservedFunctionValueTypeAnnotation',
name: ReservedFunctionValueTypeName,
|}>;
export type NativeModuleTypeAliasTypeAnnotation = $ReadOnly<{|
type: 'TypeAliasTypeAnnotation',
name: string,
|}>;
export type NativeModulePromiseTypeAnnotation = $ReadOnly<{|
type: 'PromiseTypeAnnotation',
|}>;
export type NativeModuleVoidTypeAnnotation = $ReadOnly<{|
type: 'VoidTypeAnnotation',
|}>;
export type NativeModuleBaseTypeAnnotation =
| NativeModuleStringTypeAnnotation
| NativeModuleNumberTypeAnnotation
| NativeModuleInt32TypeAnnotation
| NativeModuleDoubleTypeAnnotation
| NativeModuleFloatTypeAnnotation
| NativeModuleBooleanTypeAnnotation
| NativeModuleGenericObjectTypeAnnotation
| NativeModuleReservedFunctionValueTypeAnnotation
| NativeModuleTypeAliasTypeAnnotation
| NativeModuleArrayTypeAnnotation<Nullable<NativeModuleBaseTypeAnnotation>>
| NativeModuleObjectTypeAnnotation;
export type NativeModuleParamTypeAnnotation =
| NativeModuleBaseTypeAnnotation
| NativeModuleParamOnlyTypeAnnotation;
export type NativeModuleReturnTypeAnnotation =
| NativeModuleBaseTypeAnnotation
| NativeModuleReturnOnlyTypeAnnotation;
export type NativeModuleTypeAnnotation =
| NativeModuleBaseTypeAnnotation
| NativeModuleParamOnlyTypeAnnotation
| NativeModuleReturnOnlyTypeAnnotation;
type NativeModuleParamOnlyTypeAnnotation = NativeModuleFunctionTypeAnnotation;
type NativeModuleReturnOnlyTypeAnnotation =
| NativeModulePromiseTypeAnnotation
| NativeModuleVoidTypeAnnotation;
export type ReservedFunctionValueTypeName = 'RootTag'; // Union with more custom types.