nitrogen 0.2.24 → 0.29.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -108
- package/lib/Logger.js +56 -0
- package/lib/autolinking/Autolinking.js +1 -0
- package/lib/autolinking/android/createCMakeExtension.js +109 -0
- package/lib/autolinking/android/createGradleExtension.js +36 -0
- package/lib/autolinking/android/createHybridObjectInitializer.js +159 -0
- package/lib/autolinking/createAndroidAutolinking.js +13 -0
- package/lib/autolinking/createIOSAutolinking.js +19 -0
- package/lib/autolinking/ios/createHybridObjectInitializer.js +97 -0
- package/lib/autolinking/ios/createPodspecRubyExtension.js +69 -0
- package/lib/autolinking/ios/createSwiftCxxBridge.js +117 -0
- package/lib/autolinking/ios/createSwiftUmbrellaHeader.js +74 -0
- package/lib/config/NitroConfig.js +112 -0
- package/lib/config/NitroUserConfig.js +88 -0
- package/lib/config/getConfig.js +84 -0
- package/lib/createGitAttributes.js +11 -0
- package/lib/createPlatformSpec.js +127 -0
- package/lib/getFiles.js +28 -0
- package/lib/getPlatformSpecs.js +153 -0
- package/lib/index.js +113 -10
- package/lib/init.js +123 -0
- package/lib/nitrogen.js +165 -0
- package/lib/prettifyDirectory.js +27 -0
- package/lib/syntax/BridgedType.js +1 -0
- package/lib/syntax/CodeNode.js +1 -0
- package/lib/syntax/HybridObjectSpec.js +1 -0
- package/lib/syntax/Method.js +108 -0
- package/lib/syntax/Parameter.js +65 -0
- package/lib/syntax/Property.js +147 -0
- package/lib/syntax/SourceFile.js +7 -0
- package/lib/syntax/c++/CppEnum.js +110 -0
- package/lib/syntax/c++/CppHybridObject.js +146 -0
- package/lib/syntax/c++/CppHybridObjectRegistration.js +18 -0
- package/lib/syntax/c++/CppStruct.js +108 -0
- package/lib/syntax/c++/CppUnion.js +88 -0
- package/lib/syntax/c++/getForwardDeclaration.js +14 -0
- package/lib/syntax/c++/includeNitroHeader.js +34 -0
- package/lib/syntax/createType.js +303 -0
- package/lib/syntax/getAllTypes.js +11 -0
- package/lib/syntax/getCustomTypeConfig.js +53 -0
- package/lib/syntax/getHybridObjectName.d.ts +36 -0
- package/lib/syntax/getHybridObjectName.js +10 -0
- package/lib/syntax/getInterfaceProperties.js +9 -0
- package/lib/syntax/getReferencedTypes.js +47 -0
- package/lib/syntax/helpers.js +53 -0
- package/lib/syntax/isCoreType.js +47 -0
- package/lib/syntax/kotlin/FbjniHybridObject.js +261 -0
- package/lib/syntax/kotlin/JNINativeRegistrations.js +7 -0
- package/lib/syntax/kotlin/KotlinBoxedPrimitive.js +17 -0
- package/lib/syntax/kotlin/KotlinCxxBridgedType.js +893 -0
- package/lib/syntax/kotlin/KotlinEnum.js +113 -0
- package/lib/syntax/kotlin/KotlinFunction.js +256 -0
- package/lib/syntax/kotlin/KotlinHybridObject.js +177 -0
- package/lib/syntax/kotlin/KotlinHybridObjectRegistration.js +26 -0
- package/lib/syntax/kotlin/KotlinStruct.js +172 -0
- package/lib/syntax/kotlin/KotlinVariant.js +191 -0
- package/lib/syntax/swift/SwiftCxxBridgedType.js +819 -0
- package/lib/syntax/swift/SwiftCxxTypeHelper.js +613 -0
- package/lib/syntax/swift/SwiftEnum.js +52 -0
- package/lib/syntax/swift/SwiftFunction.js +83 -0
- package/lib/syntax/swift/SwiftHybridObject.js +103 -0
- package/lib/syntax/swift/SwiftHybridObjectBridge.js +451 -0
- package/lib/syntax/swift/SwiftHybridObjectRegistration.js +42 -0
- package/lib/syntax/swift/SwiftStruct.js +75 -0
- package/lib/syntax/swift/SwiftVariant.js +58 -0
- package/lib/syntax/types/ArrayBufferType.js +37 -0
- package/lib/syntax/types/ArrayType.d.ts +12 -0
- package/lib/syntax/types/ArrayType.js +52 -0
- package/lib/syntax/types/BigIntType.js +27 -0
- package/lib/syntax/types/BooleanType.js +27 -0
- package/lib/syntax/types/CustomType.d.ts +14 -0
- package/lib/syntax/types/CustomType.js +36 -0
- package/lib/syntax/types/DateType.js +35 -0
- package/lib/syntax/types/EnumType.js +101 -0
- package/lib/syntax/types/ErrorType.js +37 -0
- package/lib/syntax/types/FunctionType.js +147 -0
- package/lib/syntax/types/HybridObjectBaseType.js +38 -0
- package/lib/syntax/types/HybridObjectType.js +131 -0
- package/lib/syntax/types/MapType.js +37 -0
- package/lib/syntax/types/NamedWrappingType.js +27 -0
- package/lib/syntax/types/NullType.js +23 -0
- package/lib/syntax/types/NumberType.js +27 -0
- package/lib/syntax/types/OptionalType.js +59 -0
- package/lib/syntax/types/PromiseType.js +62 -0
- package/lib/syntax/types/RecordType.js +47 -0
- package/lib/syntax/types/ResultWrappingType.js +44 -0
- package/lib/syntax/types/StringType.js +35 -0
- package/lib/syntax/types/StructType.js +61 -0
- package/lib/syntax/types/TupleType.js +39 -0
- package/lib/syntax/types/Type.js +1 -0
- package/lib/syntax/types/VariantType.js +75 -0
- package/lib/syntax/types/VoidType.js +27 -0
- package/lib/syntax/types/getTypeAs.js +12 -0
- package/lib/utils.js +126 -0
- package/lib/views/CppHybridViewComponent.js +256 -0
- package/lib/views/createHostComponentJs.js +27 -0
- package/lib/views/kotlin/KotlinHybridViewManager.js +229 -0
- package/lib/views/swift/SwiftHybridViewManager.js +131 -0
- package/lib/writeFile.js +19 -0
- package/package.json +58 -29
- package/src/Logger.ts +63 -0
- package/src/autolinking/Autolinking.ts +9 -0
- package/src/autolinking/android/createCMakeExtension.ts +126 -0
- package/src/autolinking/android/createGradleExtension.ts +43 -0
- package/src/autolinking/android/createHybridObjectInitializer.ts +174 -0
- package/src/autolinking/createAndroidAutolinking.ts +28 -0
- package/src/autolinking/createIOSAutolinking.ts +24 -0
- package/src/autolinking/ios/createHybridObjectInitializer.ts +112 -0
- package/src/autolinking/ios/createPodspecRubyExtension.ts +76 -0
- package/src/autolinking/ios/createSwiftCxxBridge.ts +137 -0
- package/src/autolinking/ios/createSwiftUmbrellaHeader.ts +90 -0
- package/src/config/NitroConfig.ts +139 -0
- package/src/config/NitroUserConfig.ts +105 -0
- package/src/config/getConfig.ts +91 -0
- package/src/createGitAttributes.ts +15 -0
- package/src/createPlatformSpec.ts +176 -0
- package/src/getFiles.ts +31 -0
- package/src/getPlatformSpecs.ts +202 -0
- package/src/index.ts +146 -0
- package/src/init.ts +186 -0
- package/src/nitrogen.ts +246 -0
- package/src/prettifyDirectory.ts +32 -0
- package/src/syntax/BridgedType.ts +59 -0
- package/src/syntax/CodeNode.ts +24 -0
- package/src/syntax/HybridObjectSpec.ts +14 -0
- package/src/syntax/Method.ts +154 -0
- package/src/syntax/Parameter.ts +81 -0
- package/src/syntax/Property.ts +203 -0
- package/src/syntax/SourceFile.ts +80 -0
- package/src/syntax/c++/CppEnum.ts +128 -0
- package/src/syntax/c++/CppHybridObject.ts +165 -0
- package/src/syntax/c++/CppHybridObjectRegistration.ts +39 -0
- package/src/syntax/c++/CppStruct.ts +129 -0
- package/src/syntax/c++/CppUnion.ts +105 -0
- package/src/syntax/c++/getForwardDeclaration.ts +19 -0
- package/src/syntax/c++/includeNitroHeader.ts +40 -0
- package/src/syntax/createType.ts +365 -0
- package/src/syntax/getAllTypes.ts +18 -0
- package/src/syntax/getCustomTypeConfig.ts +71 -0
- package/src/syntax/getHybridObjectName.ts +48 -0
- package/src/syntax/getInterfaceProperties.ts +21 -0
- package/src/syntax/getReferencedTypes.ts +57 -0
- package/src/syntax/helpers.ts +79 -0
- package/src/syntax/isCoreType.ts +60 -0
- package/src/syntax/kotlin/FbjniHybridObject.ts +313 -0
- package/src/syntax/kotlin/JNINativeRegistrations.ts +19 -0
- package/src/syntax/kotlin/KotlinBoxedPrimitive.ts +19 -0
- package/src/syntax/kotlin/KotlinCxxBridgedType.ts +942 -0
- package/src/syntax/kotlin/KotlinEnum.ts +130 -0
- package/src/syntax/kotlin/KotlinFunction.ts +277 -0
- package/src/syntax/kotlin/KotlinHybridObject.ts +205 -0
- package/src/syntax/kotlin/KotlinHybridObjectRegistration.ts +51 -0
- package/src/syntax/kotlin/KotlinStruct.ts +198 -0
- package/src/syntax/kotlin/KotlinVariant.ts +212 -0
- package/src/syntax/swift/SwiftCxxBridgedType.ts +874 -0
- package/src/syntax/swift/SwiftCxxTypeHelper.ts +674 -0
- package/src/syntax/swift/SwiftEnum.ts +65 -0
- package/src/syntax/swift/SwiftFunction.ts +91 -0
- package/src/syntax/swift/SwiftHybridObject.ts +121 -0
- package/src/syntax/swift/SwiftHybridObjectBridge.ts +522 -0
- package/src/syntax/swift/SwiftHybridObjectRegistration.ts +75 -0
- package/src/syntax/swift/SwiftStruct.ts +85 -0
- package/src/syntax/swift/SwiftVariant.ts +67 -0
- package/src/syntax/types/ArrayBufferType.ts +49 -0
- package/src/syntax/types/ArrayType.ts +62 -0
- package/src/syntax/types/BigIntType.ts +35 -0
- package/src/syntax/types/BooleanType.ts +35 -0
- package/src/syntax/types/CustomType.ts +47 -0
- package/src/syntax/types/DateType.ts +43 -0
- package/src/syntax/types/EnumType.ts +130 -0
- package/src/syntax/types/ErrorType.ts +44 -0
- package/src/syntax/types/FunctionType.ts +167 -0
- package/src/syntax/types/HybridObjectBaseType.ts +54 -0
- package/src/syntax/types/HybridObjectType.ts +198 -0
- package/src/syntax/types/MapType.ts +49 -0
- package/src/syntax/types/NamedWrappingType.ts +33 -0
- package/src/syntax/types/NullType.ts +30 -0
- package/src/syntax/types/NumberType.ts +34 -0
- package/src/syntax/types/OptionalType.ts +66 -0
- package/src/syntax/types/PromiseType.ts +72 -0
- package/src/syntax/types/RecordType.ts +56 -0
- package/src/syntax/types/ResultWrappingType.ts +53 -0
- package/src/syntax/types/StringType.ts +44 -0
- package/src/syntax/types/StructType.ts +83 -0
- package/src/syntax/types/TupleType.ts +53 -0
- package/src/syntax/types/Type.ts +82 -0
- package/src/syntax/types/VariantType.ts +92 -0
- package/src/syntax/types/VoidType.ts +34 -0
- package/src/syntax/types/getTypeAs.ts +15 -0
- package/src/utils.ts +162 -0
- package/src/views/CppHybridViewComponent.ts +304 -0
- package/src/views/createHostComponentJs.ts +34 -0
- package/src/views/kotlin/KotlinHybridViewManager.ts +258 -0
- package/src/views/swift/SwiftHybridViewManager.ts +153 -0
- package/src/writeFile.ts +27 -0
- package/.jshintignore +0 -6
- package/.jshintrc +0 -3
- package/.npmignore +0 -3
- package/.travis.yml +0 -13
- package/LICENSE +0 -13
- package/browser/nitrogen-min.js +0 -3
- package/browser/nitrogen.js +0 -6369
- package/lib/apiKey.js +0 -67
- package/lib/blob.js +0 -57
- package/lib/commandManager.js +0 -350
- package/lib/device.js +0 -19
- package/lib/memoryStore.js +0 -24
- package/lib/message.js +0 -298
- package/lib/permission.js +0 -121
- package/lib/principal.js +0 -330
- package/lib/service.js +0 -347
- package/lib/session.js +0 -494
- package/lib/user.js +0 -20
- package/publish +0 -2
- package/scripts/build-documentation +0 -4
- package/scripts/build-module +0 -27
- package/scripts/module.js +0 -12
- package/scripts/postamble.js +0 -1
- package/scripts/preamble.js +0 -2
- package/scripts/run-test-server +0 -9
- package/test/config.js +0 -12
- package/test/fixtures/images/image.jpg +0 -0
- package/test/fixtures/images/motion0.jpg +0 -0
- package/test/fixtures/images/motion1.jpg +0 -0
- package/test/fixtures/images/motion2.jpg +0 -0
- package/test/fixtures/index.js +0 -76
- package/test/main.js +0 -5
- package/test/memoryStore.js +0 -22
- package/test/mocha.opts +0 -3
- package/test/units/apiKey.js +0 -46
- package/test/units/blob.js +0 -35
- package/test/units/commandManager.js +0 -67
- package/test/units/device.js +0 -26
- package/test/units/heartbeat.js +0 -28
- package/test/units/message.js +0 -79
- package/test/units/permissions.js +0 -43
- package/test/units/principal.js +0 -116
- package/test/units/service.js +0 -92
- package/test/units/session.js +0 -97
- package/test/units/user.js +0 -48
- package/yuidoc.json +0 -8
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getForwardDeclaration } from '../c++/getForwardDeclaration.js';
|
|
2
|
+
export class HybridObjectBaseType {
|
|
3
|
+
constructor() { }
|
|
4
|
+
get canBePassedByReference() {
|
|
5
|
+
// It's a shared_ptr<..>, no copy.
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
get kind() {
|
|
9
|
+
return 'hybrid-object-base';
|
|
10
|
+
}
|
|
11
|
+
getCode(language) {
|
|
12
|
+
switch (language) {
|
|
13
|
+
case 'c++':
|
|
14
|
+
return `std::shared_ptr<HybridObject>`;
|
|
15
|
+
default:
|
|
16
|
+
throw new Error(`The base type \`HybridObject\` cannot be used directly in ${language} yet. Use a specific derived class of \`HybridObject\` instead!`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getExtraFiles() {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
getRequiredImports(language) {
|
|
23
|
+
const imports = [];
|
|
24
|
+
if (language === 'c++') {
|
|
25
|
+
imports.push({
|
|
26
|
+
language: 'c++',
|
|
27
|
+
name: 'memory',
|
|
28
|
+
space: 'system',
|
|
29
|
+
}, {
|
|
30
|
+
name: `NitroModules/HybridObject.hpp`,
|
|
31
|
+
forwardDeclaration: getForwardDeclaration('class', 'HybridObject', 'margelo::nitro'),
|
|
32
|
+
language: 'c++',
|
|
33
|
+
space: 'system',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return imports;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {} from '../../config/NitroConfig.js';
|
|
2
|
+
import { getForwardDeclaration } from '../c++/getForwardDeclaration.js';
|
|
3
|
+
import { getHybridObjectName } from '../getHybridObjectName.js';
|
|
4
|
+
export class HybridObjectType {
|
|
5
|
+
hybridObjectName;
|
|
6
|
+
implementationLanguage;
|
|
7
|
+
baseTypes;
|
|
8
|
+
sourceConfig;
|
|
9
|
+
constructor(...args) {
|
|
10
|
+
if (args.length === 1) {
|
|
11
|
+
const [spec] = args;
|
|
12
|
+
this.hybridObjectName = spec.name;
|
|
13
|
+
this.implementationLanguage = spec.language;
|
|
14
|
+
this.sourceConfig = spec.config;
|
|
15
|
+
this.baseTypes = spec.baseTypes.map((b) => new HybridObjectType(b));
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const [hybridObjectName, implementationLanguage, baseTypes, sourceConfig,] = args;
|
|
19
|
+
this.hybridObjectName = hybridObjectName;
|
|
20
|
+
this.implementationLanguage = implementationLanguage;
|
|
21
|
+
this.baseTypes = baseTypes;
|
|
22
|
+
this.sourceConfig = sourceConfig;
|
|
23
|
+
}
|
|
24
|
+
if (this.hybridObjectName.startsWith('__')) {
|
|
25
|
+
throw new Error(`HybridObject name cannot start with two underscores (__)! (In ${this.hybridObjectName})`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
get canBePassedByReference() {
|
|
29
|
+
// It's a shared_ptr<..>, no copy.
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
get kind() {
|
|
33
|
+
return 'hybrid-object';
|
|
34
|
+
}
|
|
35
|
+
getCode(language, options = {}) {
|
|
36
|
+
const name = getHybridObjectName(this.hybridObjectName);
|
|
37
|
+
const mode = options.mode ?? 'strong';
|
|
38
|
+
const fullyQualified = options.fullyQualified ?? this.sourceConfig.isExternalConfig;
|
|
39
|
+
switch (language) {
|
|
40
|
+
case 'c++': {
|
|
41
|
+
const ptrType = mode === 'strong' ? 'std::shared_ptr' : 'std::weak_ptr';
|
|
42
|
+
if (fullyQualified) {
|
|
43
|
+
const fullName = this.sourceConfig.getCxxNamespace('c++', name.HybridTSpec);
|
|
44
|
+
return `${ptrType}<${fullName}>`;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return `${ptrType}<${name.HybridTSpec}>`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
case 'swift': {
|
|
51
|
+
return `(any ${name.HybridTSpec})`;
|
|
52
|
+
}
|
|
53
|
+
case 'kotlin': {
|
|
54
|
+
if (fullyQualified) {
|
|
55
|
+
// full qualified name: "com.margelo.nitro.image.Image"
|
|
56
|
+
return this.sourceConfig.getAndroidPackage('java/kotlin', name.HybridTSpec);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// "Image"
|
|
60
|
+
return name.HybridTSpec;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
default:
|
|
64
|
+
throw new Error(`Language ${language} is not yet supported for HybridObjectType!`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
getExtraFiles() {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
getExternalCxxImportName() {
|
|
71
|
+
// TODO: We currently don't have a xplat way of handling import paths, therefore iosModuleName and androidCxxLibName need to have the same value.
|
|
72
|
+
if (this.sourceConfig.getIosModuleName() !==
|
|
73
|
+
this.sourceConfig.getAndroidCxxLibName()) {
|
|
74
|
+
throw new Error(`Cannot import external HybridObject "${this.hybridObjectName}" if it's nitro.json's iosModuleName and androidCxxLibName are not the same value!`);
|
|
75
|
+
}
|
|
76
|
+
return this.sourceConfig.getIosModuleName();
|
|
77
|
+
}
|
|
78
|
+
getRequiredImports(language) {
|
|
79
|
+
const name = getHybridObjectName(this.hybridObjectName);
|
|
80
|
+
const cxxNamespace = this.sourceConfig.getCxxNamespace('c++');
|
|
81
|
+
const imports = [];
|
|
82
|
+
switch (language) {
|
|
83
|
+
case 'c++': {
|
|
84
|
+
imports.push({
|
|
85
|
+
language: 'c++',
|
|
86
|
+
name: 'memory',
|
|
87
|
+
space: 'system',
|
|
88
|
+
});
|
|
89
|
+
if (this.sourceConfig.isExternalConfig) {
|
|
90
|
+
const cxxImport = this.getExternalCxxImportName();
|
|
91
|
+
imports.push({
|
|
92
|
+
name: `${cxxImport}/${name.HybridTSpec}.hpp`,
|
|
93
|
+
forwardDeclaration: getForwardDeclaration('class', name.HybridTSpec, cxxNamespace),
|
|
94
|
+
language: 'c++',
|
|
95
|
+
space: 'system',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
imports.push({
|
|
100
|
+
name: `${name.HybridTSpec}.hpp`,
|
|
101
|
+
forwardDeclaration: getForwardDeclaration('class', name.HybridTSpec, cxxNamespace),
|
|
102
|
+
language: 'c++',
|
|
103
|
+
space: 'user',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'kotlin': {
|
|
109
|
+
if (this.sourceConfig.isExternalConfig) {
|
|
110
|
+
imports.push({
|
|
111
|
+
language: 'kotlin',
|
|
112
|
+
name: this.sourceConfig.getAndroidPackage('java/kotlin', name.HybridTSpec),
|
|
113
|
+
space: 'system',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 'swift': {
|
|
119
|
+
if (this.sourceConfig.isExternalConfig) {
|
|
120
|
+
imports.push({
|
|
121
|
+
language: 'swift',
|
|
122
|
+
name: this.sourceConfig.getIosModuleName(),
|
|
123
|
+
space: 'system',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return imports;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getForwardDeclaration } from '../c++/getForwardDeclaration.js';
|
|
2
|
+
export class MapType {
|
|
3
|
+
get canBePassedByReference() {
|
|
4
|
+
// It's a shared_ptr<..>, no ref.
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
get kind() {
|
|
8
|
+
return 'map';
|
|
9
|
+
}
|
|
10
|
+
getCode(language) {
|
|
11
|
+
switch (language) {
|
|
12
|
+
case 'c++':
|
|
13
|
+
return 'std::shared_ptr<AnyMap>';
|
|
14
|
+
case 'swift':
|
|
15
|
+
return 'AnyMap';
|
|
16
|
+
case 'kotlin':
|
|
17
|
+
return 'AnyMap';
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Language ${language} is not yet supported for MapType!`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
getExtraFiles() {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
getRequiredImports(language) {
|
|
26
|
+
const imports = [];
|
|
27
|
+
if (language === 'c++') {
|
|
28
|
+
imports.push({
|
|
29
|
+
name: 'NitroModules/AnyMap.hpp',
|
|
30
|
+
forwardDeclaration: getForwardDeclaration('class', 'AnyMap', 'NitroModules'),
|
|
31
|
+
language: 'c++',
|
|
32
|
+
space: 'system',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return imports;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { escapeCppName } from '../helpers.js';
|
|
2
|
+
export class NamedWrappingType {
|
|
3
|
+
type;
|
|
4
|
+
name;
|
|
5
|
+
constructor(name, type) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.type = type;
|
|
8
|
+
}
|
|
9
|
+
get escapedName() {
|
|
10
|
+
return escapeCppName(this.name);
|
|
11
|
+
}
|
|
12
|
+
get kind() {
|
|
13
|
+
return this.type.kind;
|
|
14
|
+
}
|
|
15
|
+
get canBePassedByReference() {
|
|
16
|
+
return this.type.canBePassedByReference;
|
|
17
|
+
}
|
|
18
|
+
getCode(language, options) {
|
|
19
|
+
return this.type.getCode(language, options);
|
|
20
|
+
}
|
|
21
|
+
getExtraFiles() {
|
|
22
|
+
return this.type.getExtraFiles();
|
|
23
|
+
}
|
|
24
|
+
getRequiredImports(language) {
|
|
25
|
+
return this.type.getRequiredImports(language);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class NullType {
|
|
2
|
+
get canBePassedByReference() {
|
|
3
|
+
// It's a primitive.
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
get kind() {
|
|
7
|
+
return 'null';
|
|
8
|
+
}
|
|
9
|
+
getCode(language) {
|
|
10
|
+
switch (language) {
|
|
11
|
+
case 'c++':
|
|
12
|
+
return 'std::nullptr_t';
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Language ${language} is not yet supported for NullType!`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
getExtraFiles() {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
getRequiredImports() {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class NumberType {
|
|
2
|
+
get canBePassedByReference() {
|
|
3
|
+
// It's a primitive
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
get kind() {
|
|
7
|
+
return 'number';
|
|
8
|
+
}
|
|
9
|
+
getCode(language) {
|
|
10
|
+
switch (language) {
|
|
11
|
+
case 'c++':
|
|
12
|
+
return 'double';
|
|
13
|
+
case 'swift':
|
|
14
|
+
return 'Double';
|
|
15
|
+
case 'kotlin':
|
|
16
|
+
return 'Double';
|
|
17
|
+
default:
|
|
18
|
+
throw new Error(`Language ${language} is not yet supported for NumberType!`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getExtraFiles() {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
getRequiredImports() {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {} from '../SourceFile.js';
|
|
2
|
+
export class OptionalType {
|
|
3
|
+
wrappingType;
|
|
4
|
+
constructor(wrappingType) {
|
|
5
|
+
this.wrappingType = wrappingType;
|
|
6
|
+
}
|
|
7
|
+
get canBePassedByReference() {
|
|
8
|
+
// depends whether the wrapping type is heavy to copy or not.
|
|
9
|
+
return this.wrappingType.canBePassedByReference;
|
|
10
|
+
}
|
|
11
|
+
get kind() {
|
|
12
|
+
return 'optional';
|
|
13
|
+
}
|
|
14
|
+
get needsBraces() {
|
|
15
|
+
switch (this.wrappingType.kind) {
|
|
16
|
+
case 'function':
|
|
17
|
+
return true;
|
|
18
|
+
default:
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
getCode(language, options) {
|
|
23
|
+
const wrapping = this.wrappingType.getCode(language, options);
|
|
24
|
+
switch (language) {
|
|
25
|
+
case 'c++':
|
|
26
|
+
return `std::optional<${wrapping}>`;
|
|
27
|
+
case 'swift':
|
|
28
|
+
if (this.needsBraces) {
|
|
29
|
+
return `(${wrapping})?`;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return `${wrapping}?`;
|
|
33
|
+
}
|
|
34
|
+
case 'kotlin':
|
|
35
|
+
if (this.needsBraces) {
|
|
36
|
+
return `(${wrapping})?`;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return `${wrapping}?`;
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
throw new Error(`Language ${language} is not yet supported for OptionalType!`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
getExtraFiles() {
|
|
46
|
+
return this.wrappingType.getExtraFiles();
|
|
47
|
+
}
|
|
48
|
+
getRequiredImports(language) {
|
|
49
|
+
const imports = this.wrappingType.getRequiredImports(language);
|
|
50
|
+
if (language === 'c++') {
|
|
51
|
+
imports.push({
|
|
52
|
+
language: 'c++',
|
|
53
|
+
name: 'optional',
|
|
54
|
+
space: 'system',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return imports;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {} from '../SourceFile.js';
|
|
2
|
+
import { ErrorType } from './ErrorType.js';
|
|
3
|
+
import { FunctionType } from './FunctionType.js';
|
|
4
|
+
import { NamedWrappingType } from './NamedWrappingType.js';
|
|
5
|
+
import { VoidType } from './VoidType.js';
|
|
6
|
+
export class PromiseType {
|
|
7
|
+
resultingType;
|
|
8
|
+
errorType;
|
|
9
|
+
constructor(resultingType) {
|
|
10
|
+
this.resultingType = resultingType;
|
|
11
|
+
this.errorType = new ErrorType();
|
|
12
|
+
}
|
|
13
|
+
get canBePassedByReference() {
|
|
14
|
+
// It's a future<..>, it cannot be copied.
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
get kind() {
|
|
18
|
+
return 'promise';
|
|
19
|
+
}
|
|
20
|
+
get resolverFunction() {
|
|
21
|
+
if (this.resultingType.kind === 'void') {
|
|
22
|
+
return new FunctionType(new VoidType(), []);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return new FunctionType(new VoidType(), [
|
|
26
|
+
new NamedWrappingType('value', this.resultingType),
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
get rejecterFunction() {
|
|
31
|
+
return new FunctionType(new VoidType(), [
|
|
32
|
+
new NamedWrappingType('error', this.errorType),
|
|
33
|
+
]);
|
|
34
|
+
}
|
|
35
|
+
getCode(language, options) {
|
|
36
|
+
const resultingCode = this.resultingType.getCode(language, options);
|
|
37
|
+
switch (language) {
|
|
38
|
+
case 'c++':
|
|
39
|
+
return `std::shared_ptr<Promise<${resultingCode}>>`;
|
|
40
|
+
case 'swift':
|
|
41
|
+
return `Promise<${resultingCode}>`;
|
|
42
|
+
case 'kotlin':
|
|
43
|
+
return `Promise<${resultingCode}>`;
|
|
44
|
+
default:
|
|
45
|
+
throw new Error(`Language ${language} is not yet supported for PromiseType!`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getExtraFiles() {
|
|
49
|
+
return this.resultingType.getExtraFiles();
|
|
50
|
+
}
|
|
51
|
+
getRequiredImports(language) {
|
|
52
|
+
const imports = this.resultingType.getRequiredImports(language);
|
|
53
|
+
if (language === 'c++') {
|
|
54
|
+
imports.push({
|
|
55
|
+
language: 'c++',
|
|
56
|
+
name: 'NitroModules/Promise.hpp',
|
|
57
|
+
space: 'system',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return imports;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {} from '../SourceFile.js';
|
|
2
|
+
export class RecordType {
|
|
3
|
+
keyType;
|
|
4
|
+
valueType;
|
|
5
|
+
constructor(keyType, valueType) {
|
|
6
|
+
this.keyType = keyType;
|
|
7
|
+
this.valueType = valueType;
|
|
8
|
+
}
|
|
9
|
+
get canBePassedByReference() {
|
|
10
|
+
// It's a unordered_map<..>, heavy to copy.
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
get kind() {
|
|
14
|
+
return 'record';
|
|
15
|
+
}
|
|
16
|
+
getCode(language, options) {
|
|
17
|
+
const keyCode = this.keyType.getCode(language, options);
|
|
18
|
+
const valueCode = this.valueType.getCode(language, options);
|
|
19
|
+
switch (language) {
|
|
20
|
+
case 'c++':
|
|
21
|
+
return `std::unordered_map<${keyCode}, ${valueCode}>`;
|
|
22
|
+
case 'swift':
|
|
23
|
+
return `Dictionary<${keyCode}, ${valueCode}>`;
|
|
24
|
+
case 'kotlin':
|
|
25
|
+
return `Map<${keyCode}, ${valueCode}>`;
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`Language ${language} is not yet supported for RecordType!`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getExtraFiles() {
|
|
31
|
+
return [...this.keyType.getExtraFiles(), ...this.valueType.getExtraFiles()];
|
|
32
|
+
}
|
|
33
|
+
getRequiredImports(language) {
|
|
34
|
+
const imports = [
|
|
35
|
+
...this.keyType.getRequiredImports(language),
|
|
36
|
+
...this.valueType.getRequiredImports(language),
|
|
37
|
+
];
|
|
38
|
+
if (language === 'c++') {
|
|
39
|
+
imports.push({
|
|
40
|
+
language: 'c++',
|
|
41
|
+
name: 'unordered_map',
|
|
42
|
+
space: 'system',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return imports;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {} from '../SourceFile.js';
|
|
2
|
+
import { ErrorType } from './ErrorType.js';
|
|
3
|
+
export class ResultWrappingType {
|
|
4
|
+
result;
|
|
5
|
+
error;
|
|
6
|
+
constructor(result) {
|
|
7
|
+
this.result = result;
|
|
8
|
+
this.error = new ErrorType();
|
|
9
|
+
}
|
|
10
|
+
get canBePassedByReference() {
|
|
11
|
+
return this.result.canBePassedByReference;
|
|
12
|
+
}
|
|
13
|
+
get kind() {
|
|
14
|
+
return 'result-wrapper';
|
|
15
|
+
}
|
|
16
|
+
getCode(language, options) {
|
|
17
|
+
const type = this.result.getCode(language, options);
|
|
18
|
+
switch (language) {
|
|
19
|
+
case 'c++':
|
|
20
|
+
return `Result<${type}>`;
|
|
21
|
+
case 'swift':
|
|
22
|
+
return type;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(`Language ${language} is not yet supported for VariantType!`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
getExtraFiles() {
|
|
28
|
+
return [...this.result.getExtraFiles(), ...this.error.getExtraFiles()];
|
|
29
|
+
}
|
|
30
|
+
getRequiredImports(language) {
|
|
31
|
+
const imports = [
|
|
32
|
+
...this.result.getRequiredImports(language),
|
|
33
|
+
...this.error.getRequiredImports(language),
|
|
34
|
+
];
|
|
35
|
+
if (language === 'c++') {
|
|
36
|
+
imports.push({
|
|
37
|
+
language: 'c++',
|
|
38
|
+
name: 'NitroModules/Result.hpp',
|
|
39
|
+
space: 'system',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return imports;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class StringType {
|
|
2
|
+
get canBePassedByReference() {
|
|
3
|
+
// It's a string<..>, heavy to copy.
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
get kind() {
|
|
7
|
+
return 'string';
|
|
8
|
+
}
|
|
9
|
+
getCode(language) {
|
|
10
|
+
switch (language) {
|
|
11
|
+
case 'c++':
|
|
12
|
+
return 'std::string';
|
|
13
|
+
case 'swift':
|
|
14
|
+
return 'String';
|
|
15
|
+
case 'kotlin':
|
|
16
|
+
return 'String';
|
|
17
|
+
default:
|
|
18
|
+
throw new Error(`Language ${language} is not yet supported for StringType!`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
getExtraFiles() {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
getRequiredImports(language) {
|
|
25
|
+
const imports = [];
|
|
26
|
+
if (language === 'c++') {
|
|
27
|
+
imports.push({
|
|
28
|
+
language: 'c++',
|
|
29
|
+
name: 'string',
|
|
30
|
+
space: 'system',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return imports;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { NitroConfig } from '../../config/NitroConfig.js';
|
|
2
|
+
import { createCppStruct } from '../c++/CppStruct.js';
|
|
3
|
+
import { getForwardDeclaration } from '../c++/getForwardDeclaration.js';
|
|
4
|
+
import {} from '../SourceFile.js';
|
|
5
|
+
export class StructType {
|
|
6
|
+
structName;
|
|
7
|
+
properties;
|
|
8
|
+
declarationFile;
|
|
9
|
+
constructor(structName, properties) {
|
|
10
|
+
this.structName = structName;
|
|
11
|
+
this.properties = properties;
|
|
12
|
+
this.declarationFile = createCppStruct(structName, properties);
|
|
13
|
+
if (this.structName.startsWith('__')) {
|
|
14
|
+
throw new Error(`Struct name cannot start with two underscores (__) as this is reserved syntax for Nitrogen! (In ${this.structName})`);
|
|
15
|
+
}
|
|
16
|
+
if (this.properties.length === 0) {
|
|
17
|
+
throw new Error(`Empty structs are not supported in Nitrogen! Add at least one property to ${this.structName}.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
get canBePassedByReference() {
|
|
21
|
+
// It's a struct, heavy to copy.
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
get kind() {
|
|
25
|
+
return 'struct';
|
|
26
|
+
}
|
|
27
|
+
getCode(language, { fullyQualified } = {}) {
|
|
28
|
+
switch (language) {
|
|
29
|
+
case 'c++':
|
|
30
|
+
if (fullyQualified) {
|
|
31
|
+
return NitroConfig.current.getCxxNamespace('c++', this.structName);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return this.structName;
|
|
35
|
+
}
|
|
36
|
+
case 'swift':
|
|
37
|
+
return this.structName;
|
|
38
|
+
case 'kotlin':
|
|
39
|
+
return this.structName;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Language ${language} is not yet supported for StructType!`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
getExtraFiles() {
|
|
45
|
+
const referencedTypes = this.declarationFile.referencedTypes.flatMap((r) => r.getExtraFiles());
|
|
46
|
+
return [this.declarationFile, ...referencedTypes];
|
|
47
|
+
}
|
|
48
|
+
getRequiredImports(language) {
|
|
49
|
+
const imports = [];
|
|
50
|
+
if (language === 'c++') {
|
|
51
|
+
const cxxNamespace = NitroConfig.current.getCxxNamespace('c++');
|
|
52
|
+
imports.push({
|
|
53
|
+
name: this.declarationFile.name,
|
|
54
|
+
language: this.declarationFile.language,
|
|
55
|
+
forwardDeclaration: getForwardDeclaration('struct', this.structName, cxxNamespace),
|
|
56
|
+
space: 'user',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return imports;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {} from '../SourceFile.js';
|
|
2
|
+
export class TupleType {
|
|
3
|
+
itemTypes;
|
|
4
|
+
constructor(itemTypes) {
|
|
5
|
+
this.itemTypes = itemTypes;
|
|
6
|
+
}
|
|
7
|
+
get canBePassedByReference() {
|
|
8
|
+
// It's a tuple<..> - heavy to copy
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
get kind() {
|
|
12
|
+
return 'tuple';
|
|
13
|
+
}
|
|
14
|
+
getCode(language, options) {
|
|
15
|
+
const types = this.itemTypes.map((t) => t.getCode(language, options));
|
|
16
|
+
switch (language) {
|
|
17
|
+
case 'c++':
|
|
18
|
+
return `std::tuple<${types.join(', ')}>`;
|
|
19
|
+
case 'swift':
|
|
20
|
+
throw new Error(`Tuple (${types.join(', ')}) is not yet supported in Swift due to a Swift bug! See https://github.com/swiftlang/swift/issues/75865`);
|
|
21
|
+
default:
|
|
22
|
+
throw new Error(`Language ${language} is not yet supported for TupleType!`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getExtraFiles() {
|
|
26
|
+
return this.itemTypes.flatMap((t) => t.getExtraFiles());
|
|
27
|
+
}
|
|
28
|
+
getRequiredImports(language) {
|
|
29
|
+
const imports = this.itemTypes.flatMap((t) => t.getRequiredImports(language));
|
|
30
|
+
if (language === 'c++') {
|
|
31
|
+
imports.push({
|
|
32
|
+
language: 'c++',
|
|
33
|
+
name: 'tuple',
|
|
34
|
+
space: 'system',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return imports;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|