7#include <unordered_map>
13enum class NativeAddonTarget
19enum class NativeAddonResolveMode
25struct NativeBinaryDescriptor
27 std::string mPlatform;
32 std::string mChecksumSha256;
33 std::string mEntryPath;
39struct AddonDependencySpec
51 Kind mKind = Registry;
59 static AddonDependencySpec FromValue(
const std::string&
id,
const std::string& value)
61 AddonDependencySpec out;
63 if (value.empty() || value.find(
"://") == std::string::npos)
70 std::string url = value;
71 size_t hashPos = url.find(
'#');
72 if (hashPos != std::string::npos)
74 out.mRef = url.substr(hashPos + 1);
75 url = url.substr(0, hashPos);
79 std::string lower = url;
80 for (
char& c : lower) c = (char)((c >=
'A' && c <=
'Z') ? c + 32 : c);
81 if (lower.size() >= 4 && lower.compare(lower.size() - 4, 4,
".zip") == 0)
85 else if (lower.find(
"github.com/") != std::string::npos)
87 out.mKind = GitHubRepo;
100struct NativeModuleMetadata
102 bool mHasNative =
false;
103 NativeAddonTarget mTarget = NativeAddonTarget::EngineAndEditor;
104 std::string mSourceDir =
"Source";
105 std::string mBinaryName;
106 std::string mEntrySymbol =
"PolyphasePlugin_GetDesc";
107 std::string mExportDefine;
108 uint32_t mPluginApiVersion = 1;
109 NativeAddonResolveMode mResolveMode = NativeAddonResolveMode::Source;
110 std::vector<NativeBinaryDescriptor> mBinaries;
116 std::vector<std::string> mExtraDefines;
117 std::vector<std::string> mExtraIncludeDirs;
118 std::vector<std::string> mExtraLibDirs;
119 std::vector<std::string> mExtraLibs;
120 std::vector<std::string> mCopyBinaries;
128 struct PlatformExtras
130 std::vector<std::string> mExtraDefines;
131 std::vector<std::string> mExtraIncludeDirs;
132 std::vector<std::string> mExtraLibDirs;
133 std::vector<std::string> mExtraLibs;
134 std::vector<std::string> mCopyBinaries;
136 std::unordered_map<std::string, PlatformExtras> mPerPlatform;
148 struct BuildTargetMetadata
151 std::string mDisplayName;
152 std::string mCategory;
154 std::vector<BuildTargetMetadata> mBuildTargets;
159 PlatformExtras ResolveExtras(
const std::string& platformName)
const
162 out.mExtraDefines = mExtraDefines;
163 out.mExtraIncludeDirs = mExtraIncludeDirs;
164 out.mExtraLibDirs = mExtraLibDirs;
165 out.mExtraLibs = mExtraLibs;
166 out.mCopyBinaries = mCopyBinaries;
168 if (!platformName.empty())
170 auto it = mPerPlatform.find(platformName);
171 if (it != mPerPlatform.end())
173 const PlatformExtras& over = it->second;
174 out.mExtraDefines.insert (out.mExtraDefines.end(), over.mExtraDefines.begin(), over.mExtraDefines.end());
175 out.mExtraIncludeDirs.insert(out.mExtraIncludeDirs.end(), over.mExtraIncludeDirs.begin(), over.mExtraIncludeDirs.end());
176 out.mExtraLibDirs.insert (out.mExtraLibDirs.end(), over.mExtraLibDirs.begin(), over.mExtraLibDirs.end());
177 out.mExtraLibs.insert (out.mExtraLibs.end(), over.mExtraLibs.begin(), over.mExtraLibs.end());
178 out.mCopyBinaries.insert (out.mCopyBinaries.end(), over.mCopyBinaries.begin(), over.mCopyBinaries.end());
188struct ContentMetadata
193 std::string mDescription;
195 std::string mVersion;
196 std::string mUpdated;
197 std::vector<std::string> mTags;
202 std::vector<AddonDependencySpec> mDependencies;
206 std::string mOnInstallScript;
214 ContentMetadata mMetadata;
216 bool mHasThumbnail =
false;
224 ContentMetadata mMetadata;
225 std::string mRepoUrl;
226 bool mHasThumbnail =
false;
227 bool mIsInstalled =
false;
229 bool mIsStandalone =
false;
230 std::string mInstalledVersion;
231 NativeModuleMetadata mNative;
237struct AddonRepository
241 std::vector<std::string> mAddonIds;
250 std::string mVersion;
251 std::string mInstalledDate;
252 std::string mRepoUrl;
253 bool mEnabled =
true;
254 bool mEnableNative =
true;
255 NativeAddonResolveMode mNativeMode = NativeAddonResolveMode::Source;
256 std::string mLastSyncAt;
257 std::string mLastSyncSource;
258 std::string mLastSyncStatus;
259 bool mTrustedScripts =
false;