@use-voltra/expo-plugin 1.3.0
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 +34 -0
- package/build/cjs/android/files/assets.js +259 -0
- package/build/cjs/android/files/assets.js.map +1 -0
- package/build/cjs/android/files/fonts.js +69 -0
- package/build/cjs/android/files/fonts.js.map +1 -0
- package/build/cjs/android/files/index.js +81 -0
- package/build/cjs/android/files/index.js.map +1 -0
- package/build/cjs/android/files/initialStates.js +83 -0
- package/build/cjs/android/files/initialStates.js.map +1 -0
- package/build/cjs/android/files/kotlin.js +142 -0
- package/build/cjs/android/files/kotlin.js.map +1 -0
- package/build/cjs/android/files/xml.js +247 -0
- package/build/cjs/android/files/xml.js.map +1 -0
- package/build/cjs/android/index.js +33 -0
- package/build/cjs/android/index.js.map +1 -0
- package/build/cjs/android/manifest.js +63 -0
- package/build/cjs/android/manifest.js.map +1 -0
- package/build/cjs/constants.js +48 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/cjs/index.js +71 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/ios/eas.js +28 -0
- package/build/cjs/ios/eas.js.map +1 -0
- package/build/cjs/ios/entitlements.js +46 -0
- package/build/cjs/ios/entitlements.js.map +1 -0
- package/build/cjs/ios/index.js +39 -0
- package/build/cjs/ios/index.js.map +1 -0
- package/build/cjs/ios/infoPlist.js +51 -0
- package/build/cjs/ios/infoPlist.js.map +1 -0
- package/build/cjs/ios/pushNotifications.js +22 -0
- package/build/cjs/ios/pushNotifications.js.map +1 -0
- package/build/cjs/ios-widget/eas.js +66 -0
- package/build/cjs/ios-widget/eas.js.map +1 -0
- package/build/cjs/ios-widget/files/assets.js +199 -0
- package/build/cjs/ios-widget/files/assets.js.map +1 -0
- package/build/cjs/ios-widget/files/entitlements.js +77 -0
- package/build/cjs/ios-widget/files/entitlements.js.map +1 -0
- package/build/cjs/ios-widget/files/index.js +92 -0
- package/build/cjs/ios-widget/files/index.js.map +1 -0
- package/build/cjs/ios-widget/files/infoPlist.js +91 -0
- package/build/cjs/ios-widget/files/infoPlist.js.map +1 -0
- package/build/cjs/ios-widget/files/swift.js +256 -0
- package/build/cjs/ios-widget/files/swift.js.map +1 -0
- package/build/cjs/ios-widget/fonts.js +151 -0
- package/build/cjs/ios-widget/fonts.js.map +1 -0
- package/build/cjs/ios-widget/index.js +46 -0
- package/build/cjs/ios-widget/index.js.map +1 -0
- package/build/cjs/ios-widget/podfile.js +43 -0
- package/build/cjs/ios-widget/podfile.js.map +1 -0
- package/build/cjs/ios-widget/widgetPlist.js +99 -0
- package/build/cjs/ios-widget/widgetPlist.js.map +1 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js +245 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/cjs/ios-widget/xcode/configurationList.js +91 -0
- package/build/cjs/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/cjs/ios-widget/xcode/groups.js +65 -0
- package/build/cjs/ios-widget/xcode/groups.js.map +1 -0
- package/build/cjs/ios-widget/xcode/index.js +155 -0
- package/build/cjs/ios-widget/xcode/index.js.map +1 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js +71 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/cjs/ios-widget/xcode/productFile.js +74 -0
- package/build/cjs/ios-widget/xcode/productFile.js.map +1 -0
- package/build/cjs/ios-widget/xcode/target.js +113 -0
- package/build/cjs/ios-widget/xcode/target.js.map +1 -0
- package/build/cjs/package.json +3 -0
- package/build/cjs/types.js +3 -0
- package/build/cjs/types.js.map +1 -0
- package/build/cjs/utils/entitlements.js +21 -0
- package/build/cjs/utils/entitlements.js.map +1 -0
- package/build/cjs/utils/fileDiscovery.js +107 -0
- package/build/cjs/utils/fileDiscovery.js.map +1 -0
- package/build/cjs/utils/fonts.js +75 -0
- package/build/cjs/utils/fonts.js.map +1 -0
- package/build/cjs/utils/logger.js +51 -0
- package/build/cjs/utils/logger.js.map +1 -0
- package/build/cjs/utils/prerender.js +191 -0
- package/build/cjs/utils/prerender.js.map +1 -0
- package/build/cjs/utils/urlScheme.js +40 -0
- package/build/cjs/utils/urlScheme.js.map +1 -0
- package/build/cjs/validation.js +231 -0
- package/build/cjs/validation.js.map +1 -0
- package/build/esm/android/files/assets.js +223 -0
- package/build/esm/android/files/assets.js.map +1 -0
- package/build/esm/android/files/fonts.js +33 -0
- package/build/esm/android/files/fonts.js.map +1 -0
- package/build/esm/android/files/index.js +77 -0
- package/build/esm/android/files/index.js.map +1 -0
- package/build/esm/android/files/initialStates.js +44 -0
- package/build/esm/android/files/initialStates.js.map +1 -0
- package/build/esm/android/files/kotlin.js +103 -0
- package/build/esm/android/files/kotlin.js.map +1 -0
- package/build/esm/android/files/xml.js +206 -0
- package/build/esm/android/files/xml.js.map +1 -0
- package/build/esm/android/index.js +29 -0
- package/build/esm/android/index.js.map +1 -0
- package/build/esm/android/manifest.js +59 -0
- package/build/esm/android/manifest.js.map +1 -0
- package/build/esm/constants.js +45 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/index.js +69 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/ios/eas.js +24 -0
- package/build/esm/ios/eas.js.map +1 -0
- package/build/esm/ios/entitlements.js +42 -0
- package/build/esm/ios/entitlements.js.map +1 -0
- package/build/esm/ios/index.js +34 -0
- package/build/esm/ios/index.js.map +1 -0
- package/build/esm/ios/infoPlist.js +47 -0
- package/build/esm/ios/infoPlist.js.map +1 -0
- package/build/esm/ios/pushNotifications.js +18 -0
- package/build/esm/ios/pushNotifications.js.map +1 -0
- package/build/esm/ios-widget/eas.js +62 -0
- package/build/esm/ios-widget/eas.js.map +1 -0
- package/build/esm/ios-widget/files/assets.js +163 -0
- package/build/esm/ios-widget/files/assets.js.map +1 -0
- package/build/esm/ios-widget/files/entitlements.js +37 -0
- package/build/esm/ios-widget/files/entitlements.js.map +1 -0
- package/build/esm/ios-widget/files/index.js +55 -0
- package/build/esm/ios-widget/files/index.js.map +1 -0
- package/build/esm/ios-widget/files/infoPlist.js +55 -0
- package/build/esm/ios-widget/files/infoPlist.js.map +1 -0
- package/build/esm/ios-widget/files/swift.js +217 -0
- package/build/esm/ios-widget/files/swift.js.map +1 -0
- package/build/esm/ios-widget/fonts.js +111 -0
- package/build/esm/ios-widget/fonts.js.map +1 -0
- package/build/esm/ios-widget/index.js +42 -0
- package/build/esm/ios-widget/index.js.map +1 -0
- package/build/esm/ios-widget/podfile.js +39 -0
- package/build/esm/ios-widget/podfile.js.map +1 -0
- package/build/esm/ios-widget/widgetPlist.js +92 -0
- package/build/esm/ios-widget/widgetPlist.js.map +1 -0
- package/build/esm/ios-widget/xcode/buildPhases.js +208 -0
- package/build/esm/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/esm/ios-widget/xcode/configurationList.js +87 -0
- package/build/esm/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/esm/ios-widget/xcode/groups.js +61 -0
- package/build/esm/ios-widget/xcode/groups.js.map +1 -0
- package/build/esm/ios-widget/xcode/index.js +118 -0
- package/build/esm/ios-widget/xcode/index.js.map +1 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js +68 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/esm/ios-widget/xcode/productFile.js +70 -0
- package/build/esm/ios-widget/xcode/productFile.js.map +1 -0
- package/build/esm/ios-widget/xcode/target.js +108 -0
- package/build/esm/ios-widget/xcode/target.js.map +1 -0
- package/build/esm/package.json +3 -0
- package/build/esm/types.js +2 -0
- package/build/esm/types.js.map +1 -0
- package/build/esm/utils/entitlements.js +18 -0
- package/build/esm/utils/entitlements.js.map +1 -0
- package/build/esm/utils/fileDiscovery.js +71 -0
- package/build/esm/utils/fileDiscovery.js.map +1 -0
- package/build/esm/utils/fonts.js +39 -0
- package/build/esm/utils/fonts.js.map +1 -0
- package/build/esm/utils/logger.js +48 -0
- package/build/esm/utils/logger.js.map +1 -0
- package/build/esm/utils/prerender.js +152 -0
- package/build/esm/utils/prerender.js.map +1 -0
- package/build/esm/utils/urlScheme.js +37 -0
- package/build/esm/utils/urlScheme.js.map +1 -0
- package/build/esm/validation.js +193 -0
- package/build/esm/validation.js.map +1 -0
- package/build/types/android/files/assets.d.ts +26 -0
- package/build/types/android/files/assets.d.ts.map +1 -0
- package/build/types/android/files/fonts.d.ts +19 -0
- package/build/types/android/files/fonts.d.ts.map +1 -0
- package/build/types/android/files/index.d.ts +21 -0
- package/build/types/android/files/index.d.ts.map +1 -0
- package/build/types/android/files/initialStates.d.ts +14 -0
- package/build/types/android/files/initialStates.d.ts.map +1 -0
- package/build/types/android/files/kotlin.d.ts +11 -0
- package/build/types/android/files/kotlin.d.ts.map +1 -0
- package/build/types/android/files/xml.d.ts +25 -0
- package/build/types/android/files/xml.d.ts.map +1 -0
- package/build/types/android/index.d.ts +12 -0
- package/build/types/android/index.d.ts.map +1 -0
- package/build/types/android/manifest.d.ts +15 -0
- package/build/types/android/manifest.d.ts.map +1 -0
- package/build/types/constants.d.ts +29 -0
- package/build/types/constants.d.ts.map +1 -0
- package/build/types/index.d.ts +13 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/ios/eas.d.ts +12 -0
- package/build/types/ios/eas.d.ts.map +1 -0
- package/build/types/ios/entitlements.d.ts +14 -0
- package/build/types/ios/entitlements.d.ts.map +1 -0
- package/build/types/ios/index.d.ts +19 -0
- package/build/types/ios/index.d.ts.map +1 -0
- package/build/types/ios/infoPlist.d.ts +21 -0
- package/build/types/ios/infoPlist.d.ts.map +1 -0
- package/build/types/ios/pushNotifications.d.ts +10 -0
- package/build/types/ios/pushNotifications.d.ts.map +1 -0
- package/build/types/ios-widget/eas.d.ts +15 -0
- package/build/types/ios-widget/eas.d.ts.map +1 -0
- package/build/types/ios-widget/files/assets.d.ts +13 -0
- package/build/types/ios-widget/files/assets.d.ts.map +1 -0
- package/build/types/ios-widget/files/entitlements.d.ts +17 -0
- package/build/types/ios-widget/files/entitlements.d.ts.map +1 -0
- package/build/types/ios-widget/files/index.d.ts +24 -0
- package/build/types/ios-widget/files/index.d.ts.map +1 -0
- package/build/types/ios-widget/files/infoPlist.d.ts +10 -0
- package/build/types/ios-widget/files/infoPlist.d.ts.map +1 -0
- package/build/types/ios-widget/files/swift.d.ts +15 -0
- package/build/types/ios-widget/files/swift.d.ts.map +1 -0
- package/build/types/ios-widget/fonts.d.ts +22 -0
- package/build/types/ios-widget/fonts.d.ts.map +1 -0
- package/build/types/ios-widget/index.d.ts +31 -0
- package/build/types/ios-widget/index.d.ts.map +1 -0
- package/build/types/ios-widget/podfile.d.ts +9 -0
- package/build/types/ios-widget/podfile.d.ts.map +1 -0
- package/build/types/ios-widget/widgetPlist.d.ts +20 -0
- package/build/types/ios-widget/widgetPlist.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts +25 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts +20 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/groups.d.ts +15 -0
- package/build/types/ios-widget/xcode/groups.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/index.d.ts +20 -0
- package/build/types/ios-widget/xcode/index.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts +15 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/productFile.d.ts +14 -0
- package/build/types/ios-widget/xcode/productFile.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/target.d.ts +42 -0
- package/build/types/ios-widget/xcode/target.d.ts.map +1 -0
- package/build/types/types.d.ts +261 -0
- package/build/types/types.d.ts.map +1 -0
- package/build/types/utils/entitlements.d.ts +9 -0
- package/build/types/utils/entitlements.d.ts.map +1 -0
- package/build/types/utils/fileDiscovery.d.ts +13 -0
- package/build/types/utils/fileDiscovery.d.ts.map +1 -0
- package/build/types/utils/fonts.d.ts +2 -0
- package/build/types/utils/fonts.d.ts.map +1 -0
- package/build/types/utils/logger.d.ts +30 -0
- package/build/types/utils/logger.d.ts.map +1 -0
- package/build/types/utils/prerender.d.ts +25 -0
- package/build/types/utils/prerender.d.ts.map +1 -0
- package/build/types/utils/urlScheme.d.ts +10 -0
- package/build/types/utils/urlScheme.d.ts.map +1 -0
- package/build/types/validation.d.ts +17 -0
- package/build/types/validation.d.ts.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.resolveFontPaths = resolveFontPaths;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const module_1 = require("module");
|
|
40
|
+
const logger_1 = require("./logger");
|
|
41
|
+
const FONT_EXTENSIONS = ['.ttf', '.otf', '.woff', '.woff2'];
|
|
42
|
+
async function resolveFontInput(input, projectRoot) {
|
|
43
|
+
const resolvedPath = path.resolve(projectRoot, input);
|
|
44
|
+
try {
|
|
45
|
+
await fs.stat(resolvedPath);
|
|
46
|
+
return resolvedPath;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
try {
|
|
50
|
+
const projectRequire = (0, module_1.createRequire)(path.join(projectRoot, 'package.json'));
|
|
51
|
+
return projectRequire.resolve(input);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
logger_1.logger.warn(`Could not resolve font path: ${input}`);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function resolveFontPaths(fonts, projectRoot) {
|
|
60
|
+
const promises = fonts.map(async (input) => {
|
|
61
|
+
const resolvedInput = await resolveFontInput(input, projectRoot);
|
|
62
|
+
if (!resolvedInput) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const stat = await fs.stat(resolvedInput);
|
|
66
|
+
if (stat.isDirectory()) {
|
|
67
|
+
const dir = await fs.readdir(resolvedInput);
|
|
68
|
+
return dir.map((file) => path.join(resolvedInput, file));
|
|
69
|
+
}
|
|
70
|
+
return [resolvedInput];
|
|
71
|
+
});
|
|
72
|
+
const results = await Promise.all(promises);
|
|
73
|
+
return results.flat().filter((filePath) => FONT_EXTENSIONS.some((ext) => filePath.endsWith(ext)));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=fonts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/utils/fonts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,4CAkBC;AA3CD,gDAAiC;AACjC,2CAA4B;AAC5B,mCAAsC;AAEtC,qCAAiC;AAEjC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AAE3D,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,WAAmB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAErD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3B,OAAO,YAAY,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;YAC5E,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,eAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,KAAe,EAAE,WAAmB;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,CAAC,aAAa,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Structured logging utility for the Voltra plugin
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
const PREFIX = '[Voltra]';
|
|
8
|
+
// ANSI color codes
|
|
9
|
+
const RED = '\x1b[31m';
|
|
10
|
+
const RESET = '\x1b[0m';
|
|
11
|
+
exports.logger = {
|
|
12
|
+
/**
|
|
13
|
+
* Log an informational message
|
|
14
|
+
*/
|
|
15
|
+
info: (message) => {
|
|
16
|
+
console.log(`${PREFIX} ${message}`);
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* Log a warning message
|
|
20
|
+
*/
|
|
21
|
+
warn: (message) => {
|
|
22
|
+
console.warn(`${PREFIX} ⚠️ ${message}`);
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Log a warning message in red (for critical warnings)
|
|
26
|
+
*/
|
|
27
|
+
warnRed: (message) => {
|
|
28
|
+
console.warn(`${RED}${PREFIX} ⚠️ ${message}${RESET}`);
|
|
29
|
+
},
|
|
30
|
+
/**
|
|
31
|
+
* Log an error message
|
|
32
|
+
*/
|
|
33
|
+
error: (message) => {
|
|
34
|
+
console.error(`${PREFIX} ❌ ${message}`);
|
|
35
|
+
},
|
|
36
|
+
/**
|
|
37
|
+
* Log a success message
|
|
38
|
+
*/
|
|
39
|
+
success: (message) => {
|
|
40
|
+
console.log(`${PREFIX} ✅ ${message}`);
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* Log a debug message (only when VOLTRA_DEBUG env var is set)
|
|
44
|
+
*/
|
|
45
|
+
debug: (message) => {
|
|
46
|
+
if (process.env.VOLTRA_DEBUG) {
|
|
47
|
+
console.log(`${PREFIX} 🔍 ${message}`);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAM,MAAM,GAAG,UAAU,CAAA;AAEzB,mBAAmB;AACnB,MAAM,GAAG,GAAG,UAAU,CAAA;AACtB,MAAM,KAAK,GAAG,SAAS,CAAA;AAEV,QAAA,MAAM,GAAG;IACpB;;OAEG;IACH,IAAI,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAA;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED;;OAEG;IACH,OAAO,EAAE,CAAC,OAAe,EAAQ,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,QAAQ,OAAO,GAAG,KAAK,EAAE,CAAC,CAAA;IACxD,CAAC;IAED;;OAEG;IACH,KAAK,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,OAAO,EAAE,CAAC,CAAA;IACzC,CAAC;IAED;;OAEG;IACH,OAAO,EAAE,CAAC,OAAe,EAAQ,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,OAAO,EAAE,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,EAAE,CAAC,OAAe,EAAQ,EAAE;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,OAAO,OAAO,EAAE,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.prerenderWidgetState = prerenderWidgetState;
|
|
40
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
41
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
42
|
+
const node_vm_1 = __importDefault(require("node:vm"));
|
|
43
|
+
const babel = __importStar(require("@babel/core"));
|
|
44
|
+
const constants_1 = require("../constants");
|
|
45
|
+
/**
|
|
46
|
+
* Check if a module specifier is a relative or absolute path (local file)
|
|
47
|
+
*/
|
|
48
|
+
function isLocalModule(moduleSpecifier) {
|
|
49
|
+
return moduleSpecifier.startsWith('.') || moduleSpecifier.startsWith('/');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a module path, trying different extensions
|
|
53
|
+
*/
|
|
54
|
+
function resolveModulePath(moduleSpecifier, fromDir) {
|
|
55
|
+
const basePath = node_path_1.default.resolve(fromDir, moduleSpecifier);
|
|
56
|
+
for (const ext of constants_1.MODULE_EXTENSIONS) {
|
|
57
|
+
const fullPath = basePath + ext;
|
|
58
|
+
if (node_fs_1.default.existsSync(fullPath) && node_fs_1.default.statSync(fullPath).isFile()) {
|
|
59
|
+
return fullPath;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Try index files if it's a directory
|
|
63
|
+
if (node_fs_1.default.existsSync(basePath) && node_fs_1.default.statSync(basePath).isDirectory()) {
|
|
64
|
+
for (const ext of constants_1.MODULE_EXTENSIONS) {
|
|
65
|
+
const indexPath = node_path_1.default.join(basePath, 'index' + ext);
|
|
66
|
+
if (node_fs_1.default.existsSync(indexPath)) {
|
|
67
|
+
return indexPath;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
function getProjectBabelConfigPath(projectRoot) {
|
|
74
|
+
const configPath = node_path_1.default.join(projectRoot, 'babel.config.js');
|
|
75
|
+
return node_fs_1.default.existsSync(configPath) ? configPath : null;
|
|
76
|
+
}
|
|
77
|
+
function getFallbackExpoPreset(projectRoot) {
|
|
78
|
+
return require.resolve('babel-preset-expo', { paths: [projectRoot] });
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Transpile a file with Babel
|
|
82
|
+
*/
|
|
83
|
+
function transpileFile(filePath, projectRoot) {
|
|
84
|
+
const code = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
85
|
+
const projectBabelConfigPath = getProjectBabelConfigPath(projectRoot);
|
|
86
|
+
const result = babel.transformSync(code, {
|
|
87
|
+
cwd: projectRoot,
|
|
88
|
+
filename: filePath,
|
|
89
|
+
...(projectBabelConfigPath
|
|
90
|
+
? { configFile: projectBabelConfigPath }
|
|
91
|
+
: {
|
|
92
|
+
babelrc: false,
|
|
93
|
+
configFile: false,
|
|
94
|
+
presets: [getFallbackExpoPreset(projectRoot)],
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
if (!result || !result.code) {
|
|
98
|
+
throw new Error(`Babel transpilation failed for ${filePath}`);
|
|
99
|
+
}
|
|
100
|
+
return result.code;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Evaluate a widget module using Babel transpilation and Node.js VM.
|
|
104
|
+
* This allows executing widget code that uses JSX and React components.
|
|
105
|
+
* Local module dependencies are also transpiled with the same Babel settings.
|
|
106
|
+
*/
|
|
107
|
+
function evaluateWidgetModule(projectRoot, filePath) {
|
|
108
|
+
// Cache for already-evaluated modules to handle circular dependencies
|
|
109
|
+
const moduleCache = new Map();
|
|
110
|
+
/**
|
|
111
|
+
* Custom require that transpiles local modules with Babel
|
|
112
|
+
*/
|
|
113
|
+
function customRequire(moduleSpecifier, currentDir) {
|
|
114
|
+
// For non-local modules (npm packages), use native require
|
|
115
|
+
if (!isLocalModule(moduleSpecifier)) {
|
|
116
|
+
return require(moduleSpecifier);
|
|
117
|
+
}
|
|
118
|
+
// Resolve the local module path
|
|
119
|
+
const resolvedPath = resolveModulePath(moduleSpecifier, currentDir);
|
|
120
|
+
if (!resolvedPath) {
|
|
121
|
+
throw new Error(`Cannot resolve module '${moduleSpecifier}' from '${currentDir}'`);
|
|
122
|
+
}
|
|
123
|
+
// Return cached module if already evaluated
|
|
124
|
+
if (moduleCache.has(resolvedPath)) {
|
|
125
|
+
return moduleCache.get(resolvedPath);
|
|
126
|
+
}
|
|
127
|
+
// Transpile and evaluate the module
|
|
128
|
+
const transpiledCode = transpileFile(resolvedPath, projectRoot);
|
|
129
|
+
const moduleDir = node_path_1.default.dirname(resolvedPath);
|
|
130
|
+
const mockModule = { exports: {} };
|
|
131
|
+
// Create require function bound to the module's directory
|
|
132
|
+
const boundRequire = (spec) => customRequire(spec, moduleDir);
|
|
133
|
+
const context = node_vm_1.default.createContext({
|
|
134
|
+
exports: mockModule.exports,
|
|
135
|
+
module: mockModule,
|
|
136
|
+
require: boundRequire,
|
|
137
|
+
__filename: resolvedPath,
|
|
138
|
+
__dirname: moduleDir,
|
|
139
|
+
console: console,
|
|
140
|
+
process: process,
|
|
141
|
+
});
|
|
142
|
+
// Cache before evaluation to handle circular dependencies
|
|
143
|
+
moduleCache.set(resolvedPath, mockModule.exports);
|
|
144
|
+
const script = new node_vm_1.default.Script(transpiledCode, { filename: resolvedPath });
|
|
145
|
+
script.runInContext(context);
|
|
146
|
+
// Update cache with final exports (in case module.exports was reassigned)
|
|
147
|
+
moduleCache.set(resolvedPath, mockModule.exports);
|
|
148
|
+
return mockModule.exports;
|
|
149
|
+
}
|
|
150
|
+
// Evaluate the entry module
|
|
151
|
+
const exports = customRequire(filePath, node_path_1.default.dirname(filePath));
|
|
152
|
+
const widgetVariants = exports.default || exports;
|
|
153
|
+
if (!widgetVariants || typeof widgetVariants !== 'object') {
|
|
154
|
+
throw new Error('Widget file must export a WidgetVariants object or have a default export of WidgetVariants');
|
|
155
|
+
}
|
|
156
|
+
return widgetVariants;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Prerender widget initial states for build-time inclusion.
|
|
160
|
+
*
|
|
161
|
+
* Widget code is transpiled with Babel and executed in a Node.js VM sandbox.
|
|
162
|
+
* This function loads widget files that export WidgetVariants for widgets with initialStatePath configured,
|
|
163
|
+
* renders them to JSON, and returns a map of prerendered states that can be bundled into the app.
|
|
164
|
+
*
|
|
165
|
+
* @param widgets - Array of widget configurations
|
|
166
|
+
* @param projectRoot - Root directory of the Expo project
|
|
167
|
+
* @param renderer - The renderer function to use (voltra/server or voltra/android/server)
|
|
168
|
+
* @returns Map of widgetId -> prerendered widget state as JSON string
|
|
169
|
+
*/
|
|
170
|
+
async function prerenderWidgetState(widgets, projectRoot, renderer) {
|
|
171
|
+
const prerenderedStates = new Map();
|
|
172
|
+
for (const widget of widgets) {
|
|
173
|
+
if (!widget.initialStatePath) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
// Resolve the absolute path to the widget file
|
|
178
|
+
const absoluteWidgetPath = node_path_1.default.resolve(projectRoot, widget.initialStatePath);
|
|
179
|
+
// Evaluate the module (transpiles with Babel and executes in VM)
|
|
180
|
+
const widgetVariants = evaluateWidgetModule(projectRoot, absoluteWidgetPath);
|
|
181
|
+
// Render the widget variants to a JSON string
|
|
182
|
+
const prerenderedState = renderer(widgetVariants);
|
|
183
|
+
prerenderedStates.set(widget.id, prerenderedState);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
throw new Error(`Failed to prerender widget state for ${widget.id} (${widget.initialStatePath}): ${error instanceof Error ? error.message : String(error)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return prerenderedStates;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=prerender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureURLScheme = ensureURLScheme;
|
|
4
|
+
/**
|
|
5
|
+
* Ensures the main app has a URL scheme set so widgetURL can open it.
|
|
6
|
+
* This is an optional feature for deep linking from widgets.
|
|
7
|
+
*
|
|
8
|
+
* @param config - The Expo config object
|
|
9
|
+
* @returns The modified config with URL scheme ensured
|
|
10
|
+
*/
|
|
11
|
+
function ensureURLScheme(config) {
|
|
12
|
+
const scheme = typeof config.scheme === 'string' ? config.scheme : config.ios?.bundleIdentifier;
|
|
13
|
+
if (!scheme) {
|
|
14
|
+
return config;
|
|
15
|
+
}
|
|
16
|
+
const existingInfoPlist = config.ios?.infoPlist || {};
|
|
17
|
+
const existingTypes = existingInfoPlist.CFBundleURLTypes || [];
|
|
18
|
+
// Check if scheme already exists
|
|
19
|
+
const hasScheme = existingTypes.some((t) => Array.isArray(t?.CFBundleURLSchemes) && t.CFBundleURLSchemes.includes(scheme));
|
|
20
|
+
if (hasScheme) {
|
|
21
|
+
return config;
|
|
22
|
+
}
|
|
23
|
+
// Add the URL scheme
|
|
24
|
+
return {
|
|
25
|
+
...config,
|
|
26
|
+
ios: {
|
|
27
|
+
...config.ios,
|
|
28
|
+
infoPlist: {
|
|
29
|
+
...existingInfoPlist,
|
|
30
|
+
CFBundleURLTypes: [
|
|
31
|
+
...existingTypes,
|
|
32
|
+
{
|
|
33
|
+
CFBundleURLSchemes: [scheme],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=urlScheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlScheme.js","sourceRoot":"","sources":["../../../src/utils/urlScheme.ts"],"names":[],"mappings":";;AASA,0CAmCC;AA1CD;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,MAAkB;IAChD,MAAM,MAAM,GAAG,OAAQ,MAAc,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAc,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAA;IAEjH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,SAAS,IAAI,EAAE,CAAA;IACrD,MAAM,aAAa,GAAI,iBAAiB,CAAC,gBAA0B,IAAI,EAAE,CAAA;IAEzE,iCAAiC;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrF,CAAA;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,MAAM,CAAA;IACf,CAAC;IAED,qBAAqB;IACrB,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE;YACH,GAAG,MAAM,CAAC,GAAG;YACb,SAAS,EAAE;gBACT,GAAG,iBAAiB;gBACpB,gBAAgB,EAAE;oBAChB,GAAG,aAAa;oBAChB;wBACE,kBAAkB,EAAE,CAAC,MAAM,CAAC;qBAC7B;iBACF;aACF;SACF;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.validateWidgetConfig = validateWidgetConfig;
|
|
37
|
+
exports.validateAndroidWidgetConfig = validateAndroidWidgetConfig;
|
|
38
|
+
exports.validateProps = validateProps;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
/**
|
|
42
|
+
* Validation functions for the Voltra plugin
|
|
43
|
+
*/
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// iOS Widget Validation
|
|
46
|
+
// ============================================================================
|
|
47
|
+
const VALID_FAMILIES = new Set([
|
|
48
|
+
'systemSmall',
|
|
49
|
+
'systemMedium',
|
|
50
|
+
'systemLarge',
|
|
51
|
+
'systemExtraLarge',
|
|
52
|
+
'accessoryCircular',
|
|
53
|
+
'accessoryRectangular',
|
|
54
|
+
'accessoryInline',
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* Validates a widget configuration.
|
|
58
|
+
* Throws an error if validation fails.
|
|
59
|
+
*/
|
|
60
|
+
function validateWidgetConfig(widget) {
|
|
61
|
+
// Validate widget ID
|
|
62
|
+
if (!widget.id || typeof widget.id !== 'string') {
|
|
63
|
+
throw new Error('Widget ID is required and must be a string');
|
|
64
|
+
}
|
|
65
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(widget.id)) {
|
|
66
|
+
throw new Error(`Widget ID '${widget.id}' is invalid. ` +
|
|
67
|
+
'Must start with a letter or underscore and contain only alphanumeric characters and underscores.');
|
|
68
|
+
}
|
|
69
|
+
// Validate display name
|
|
70
|
+
if (!widget.displayName?.trim()) {
|
|
71
|
+
throw new Error(`Widget '${widget.id}': displayName is required`);
|
|
72
|
+
}
|
|
73
|
+
// Validate description
|
|
74
|
+
if (!widget.description?.trim()) {
|
|
75
|
+
throw new Error(`Widget '${widget.id}': description is required`);
|
|
76
|
+
}
|
|
77
|
+
// Validate supported families if provided
|
|
78
|
+
if (widget.supportedFamilies) {
|
|
79
|
+
if (!Array.isArray(widget.supportedFamilies)) {
|
|
80
|
+
throw new Error(`Widget '${widget.id}': supportedFamilies must be an array`);
|
|
81
|
+
}
|
|
82
|
+
for (const family of widget.supportedFamilies) {
|
|
83
|
+
if (!VALID_FAMILIES.has(family)) {
|
|
84
|
+
throw new Error(`Widget '${widget.id}': Invalid widget family '${family}'. ` +
|
|
85
|
+
`Valid families are: ${Array.from(VALID_FAMILIES).join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// Android Widget Validation
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Validates an Android widget configuration.
|
|
95
|
+
* Throws an error if validation fails.
|
|
96
|
+
*/
|
|
97
|
+
function validateAndroidWidgetConfig(widget, projectRoot) {
|
|
98
|
+
// Validate widget ID
|
|
99
|
+
if (!widget.id || typeof widget.id !== 'string') {
|
|
100
|
+
throw new Error('Widget ID is required and must be a string');
|
|
101
|
+
}
|
|
102
|
+
if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(widget.id)) {
|
|
103
|
+
throw new Error(`Widget ID '${widget.id}' is invalid. ` +
|
|
104
|
+
'Must start with a letter or underscore and contain only alphanumeric characters and underscores.');
|
|
105
|
+
}
|
|
106
|
+
// Validate display name
|
|
107
|
+
if (!widget.displayName?.trim()) {
|
|
108
|
+
throw new Error(`Widget '${widget.id}': displayName is required`);
|
|
109
|
+
}
|
|
110
|
+
// Validate description
|
|
111
|
+
if (!widget.description?.trim()) {
|
|
112
|
+
throw new Error(`Widget '${widget.id}': description is required`);
|
|
113
|
+
}
|
|
114
|
+
// Validate targetCellWidth
|
|
115
|
+
if (typeof widget.targetCellWidth !== 'number') {
|
|
116
|
+
throw new Error(`Widget '${widget.id}': targetCellWidth is required and must be a number`);
|
|
117
|
+
}
|
|
118
|
+
if (!Number.isInteger(widget.targetCellWidth) || widget.targetCellWidth < 1) {
|
|
119
|
+
throw new Error(`Widget '${widget.id}': targetCellWidth must be a positive integer (typically 1-5)`);
|
|
120
|
+
}
|
|
121
|
+
// Validate targetCellHeight
|
|
122
|
+
if (typeof widget.targetCellHeight !== 'number') {
|
|
123
|
+
throw new Error(`Widget '${widget.id}': targetCellHeight is required and must be a number`);
|
|
124
|
+
}
|
|
125
|
+
if (!Number.isInteger(widget.targetCellHeight) || widget.targetCellHeight < 1) {
|
|
126
|
+
throw new Error(`Widget '${widget.id}': targetCellHeight must be a positive integer (typically 1-5)`);
|
|
127
|
+
}
|
|
128
|
+
// Validate minCellWidth if provided
|
|
129
|
+
if (widget.minCellWidth !== undefined) {
|
|
130
|
+
if (typeof widget.minCellWidth !== 'number' || !Number.isInteger(widget.minCellWidth) || widget.minCellWidth < 1) {
|
|
131
|
+
throw new Error(`Widget '${widget.id}': minCellWidth must be a positive integer`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Validate minCellHeight if provided
|
|
135
|
+
if (widget.minCellHeight !== undefined) {
|
|
136
|
+
if (typeof widget.minCellHeight !== 'number' ||
|
|
137
|
+
!Number.isInteger(widget.minCellHeight) ||
|
|
138
|
+
widget.minCellHeight < 1) {
|
|
139
|
+
throw new Error(`Widget '${widget.id}': minCellHeight must be a positive integer`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Validate previewImage if provided
|
|
143
|
+
if (widget.previewImage !== undefined) {
|
|
144
|
+
if (typeof widget.previewImage !== 'string' || !widget.previewImage.trim()) {
|
|
145
|
+
throw new Error(`Widget '${widget.id}': previewImage must be a non-empty string`);
|
|
146
|
+
}
|
|
147
|
+
const ext = path.extname(widget.previewImage).toLowerCase();
|
|
148
|
+
const validImageExts = ['.png', '.jpg', '.jpeg', '.webp'];
|
|
149
|
+
if (!validImageExts.includes(ext)) {
|
|
150
|
+
throw new Error(`Widget '${widget.id}': previewImage must be a PNG, JPG, JPEG, or WebP file. Got: ${ext}`);
|
|
151
|
+
}
|
|
152
|
+
// Check file exists if projectRoot is provided
|
|
153
|
+
if (projectRoot) {
|
|
154
|
+
const fullPath = path.join(projectRoot, widget.previewImage);
|
|
155
|
+
if (!fs.existsSync(fullPath)) {
|
|
156
|
+
throw new Error(`Widget '${widget.id}': previewImage file not found at ${widget.previewImage}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Validate previewLayout if provided
|
|
161
|
+
if (widget.previewLayout !== undefined) {
|
|
162
|
+
if (typeof widget.previewLayout !== 'string' || !widget.previewLayout.trim()) {
|
|
163
|
+
throw new Error(`Widget '${widget.id}': previewLayout must be a non-empty string`);
|
|
164
|
+
}
|
|
165
|
+
const ext = path.extname(widget.previewLayout).toLowerCase();
|
|
166
|
+
if (ext !== '.xml') {
|
|
167
|
+
throw new Error(`Widget '${widget.id}': previewLayout must be an XML file. Got: ${ext}`);
|
|
168
|
+
}
|
|
169
|
+
// Check file exists if projectRoot is provided
|
|
170
|
+
if (projectRoot) {
|
|
171
|
+
const fullPath = path.join(projectRoot, widget.previewLayout);
|
|
172
|
+
if (!fs.existsSync(fullPath)) {
|
|
173
|
+
throw new Error(`Widget '${widget.id}': previewLayout file not found at ${widget.previewLayout}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// Plugin Props Validation
|
|
180
|
+
// ============================================================================
|
|
181
|
+
/**
|
|
182
|
+
* Validates the plugin props at entry point.
|
|
183
|
+
* Throws an error if validation fails.
|
|
184
|
+
*/
|
|
185
|
+
function validateProps(props) {
|
|
186
|
+
// Validate group identifier format if provided
|
|
187
|
+
if (props.groupIdentifier !== undefined) {
|
|
188
|
+
if (typeof props.groupIdentifier !== 'string') {
|
|
189
|
+
throw new Error('groupIdentifier must be a string');
|
|
190
|
+
}
|
|
191
|
+
if (!props.groupIdentifier.startsWith('group.')) {
|
|
192
|
+
throw new Error(`groupIdentifier '${props.groupIdentifier}' must start with 'group.'`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Validate iOS widgets if provided
|
|
196
|
+
if (props.widgets !== undefined) {
|
|
197
|
+
if (!Array.isArray(props.widgets)) {
|
|
198
|
+
throw new Error('widgets must be an array');
|
|
199
|
+
}
|
|
200
|
+
// Check for duplicate widget IDs
|
|
201
|
+
const seenIds = new Set();
|
|
202
|
+
for (const widget of props.widgets) {
|
|
203
|
+
validateWidgetConfig(widget);
|
|
204
|
+
if (seenIds.has(widget.id)) {
|
|
205
|
+
throw new Error(`Duplicate widget ID: '${widget.id}'`);
|
|
206
|
+
}
|
|
207
|
+
seenIds.add(widget.id);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Validate Android configuration if provided
|
|
211
|
+
if (props.android !== undefined) {
|
|
212
|
+
if (typeof props.android !== 'object' || props.android === null) {
|
|
213
|
+
throw new Error('android configuration must be an object');
|
|
214
|
+
}
|
|
215
|
+
if (props.android.widgets !== undefined) {
|
|
216
|
+
if (!Array.isArray(props.android.widgets)) {
|
|
217
|
+
throw new Error('android.widgets must be an array');
|
|
218
|
+
}
|
|
219
|
+
// Check for duplicate widget IDs
|
|
220
|
+
const seenIds = new Set();
|
|
221
|
+
for (const widget of props.android.widgets) {
|
|
222
|
+
validateAndroidWidgetConfig(widget);
|
|
223
|
+
if (seenIds.has(widget.id)) {
|
|
224
|
+
throw new Error(`Duplicate Android widget ID: '${widget.id}'`);
|
|
225
|
+
}
|
|
226
|
+
seenIds.add(widget.id);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"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"}
|