@use-voltra/expo-plugin 2.0.0-rc.4 → 2.1.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/build/cjs/index.js +5 -1
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/utils/prerender.js +32 -5
- package/build/cjs/utils/prerender.js.map +1 -1
- package/build/cjs/validation.js +55 -0
- package/build/cjs/validation.js.map +1 -1
- package/build/esm/index.js +2 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/utils/prerender.js +30 -5
- package/build/esm/utils/prerender.js.map +1 -1
- package/build/esm/validation.js +53 -0
- package/build/esm/validation.js.map +1 -1
- package/build/types/index.d.ts +3 -3
- package/build/types/index.d.ts.map +1 -1
- package/build/types/types.d.ts +19 -0
- package/build/types/types.d.ts.map +1 -1
- package/build/types/utils/prerender.d.ts +14 -0
- package/build/types/utils/prerender.d.ts.map +1 -1
- package/build/types/validation.d.ts +2 -0
- package/build/types/validation.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/constants.ts +5 -0
- package/src/index.ts +25 -0
- package/src/types.ts +41 -0
- package/src/utils/entitlements.ts +26 -0
- package/src/utils/fonts.ts +44 -0
- package/src/utils/localePick.node.test.ts +24 -0
- package/src/utils/localePick.ts +53 -0
- package/src/utils/logger.ts +55 -0
- package/src/utils/prerender.node.test.ts +69 -0
- package/src/utils/prerender.ts +249 -0
- package/src/utils/widgetLabel.ts +19 -0
- package/src/validation.node.test.ts +95 -0
- package/src/validation.ts +225 -0
package/build/cjs/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.widgetLabelEnglish = exports.isWidgetLocalizedMap = exports.prerenderWidgetState = exports.logger = exports.pickLocalizedValue = exports.normalizeLocaleTag = exports.resolveFontPaths = exports.addApplicationGroupsEntitlement = exports.validateWidgetLabel = exports.validateInitialStatePath = exports.validateHomeScreenWidgetId = exports.assertValidLocaleKey = exports.MODULE_EXTENSIONS = exports.MAX_IMAGE_SIZE_BYTES = void 0;
|
|
3
|
+
exports.widgetLabelEnglish = exports.isWidgetLocalizedMap = exports.prerenderWidgetState = exports.evaluateWidgetModuleExports = exports.evaluateWidgetModule = exports.logger = exports.pickLocalizedValue = exports.normalizeLocaleTag = exports.resolveFontPaths = exports.addApplicationGroupsEntitlement = exports.validateWidgetLabel = exports.validateWidgetEntry = exports.validateInitialStatePath = exports.validateHomeScreenWidgetId = exports.normalizeWidgetEntryPath = exports.assertValidLocaleKey = exports.MODULE_EXTENSIONS = exports.MAX_IMAGE_SIZE_BYTES = void 0;
|
|
4
4
|
var constants_1 = require("./constants");
|
|
5
5
|
Object.defineProperty(exports, "MAX_IMAGE_SIZE_BYTES", { enumerable: true, get: function () { return constants_1.MAX_IMAGE_SIZE_BYTES; } });
|
|
6
6
|
Object.defineProperty(exports, "MODULE_EXTENSIONS", { enumerable: true, get: function () { return constants_1.MODULE_EXTENSIONS; } });
|
|
7
7
|
var validation_1 = require("./validation");
|
|
8
8
|
Object.defineProperty(exports, "assertValidLocaleKey", { enumerable: true, get: function () { return validation_1.assertValidLocaleKey; } });
|
|
9
|
+
Object.defineProperty(exports, "normalizeWidgetEntryPath", { enumerable: true, get: function () { return validation_1.normalizeWidgetEntryPath; } });
|
|
9
10
|
Object.defineProperty(exports, "validateHomeScreenWidgetId", { enumerable: true, get: function () { return validation_1.validateHomeScreenWidgetId; } });
|
|
10
11
|
Object.defineProperty(exports, "validateInitialStatePath", { enumerable: true, get: function () { return validation_1.validateInitialStatePath; } });
|
|
12
|
+
Object.defineProperty(exports, "validateWidgetEntry", { enumerable: true, get: function () { return validation_1.validateWidgetEntry; } });
|
|
11
13
|
Object.defineProperty(exports, "validateWidgetLabel", { enumerable: true, get: function () { return validation_1.validateWidgetLabel; } });
|
|
12
14
|
var entitlements_1 = require("./utils/entitlements");
|
|
13
15
|
Object.defineProperty(exports, "addApplicationGroupsEntitlement", { enumerable: true, get: function () { return entitlements_1.addApplicationGroupsEntitlement; } });
|
|
@@ -19,6 +21,8 @@ Object.defineProperty(exports, "pickLocalizedValue", { enumerable: true, get: fu
|
|
|
19
21
|
var logger_1 = require("./utils/logger");
|
|
20
22
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
21
23
|
var prerender_1 = require("./utils/prerender");
|
|
24
|
+
Object.defineProperty(exports, "evaluateWidgetModule", { enumerable: true, get: function () { return prerender_1.evaluateWidgetModule; } });
|
|
25
|
+
Object.defineProperty(exports, "evaluateWidgetModuleExports", { enumerable: true, get: function () { return prerender_1.evaluateWidgetModuleExports; } });
|
|
22
26
|
Object.defineProperty(exports, "prerenderWidgetState", { enumerable: true, get: function () { return prerender_1.prerenderWidgetState; } });
|
|
23
27
|
var widgetLabel_1 = require("./utils/widgetLabel");
|
|
24
28
|
Object.defineProperty(exports, "isWidgetLocalizedMap", { enumerable: true, get: function () { return widgetLabel_1.isWidgetLocalizedMap; } });
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqE;AAA5D,iHAAA,oBAAoB,OAAA;AAAE,8GAAA,iBAAiB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqE;AAA5D,iHAAA,oBAAoB,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAUhD,2CAOqB;AANnB,kHAAA,oBAAoB,OAAA;AACpB,sHAAA,wBAAwB,OAAA;AACxB,wHAAA,0BAA0B,OAAA;AAC1B,sHAAA,wBAAwB,OAAA;AACxB,iHAAA,mBAAmB,OAAA;AACnB,iHAAA,mBAAmB,OAAA;AAErB,qDAAsE;AAA7D,+HAAA,+BAA+B,OAAA;AACxC,uCAAgD;AAAvC,yGAAA,gBAAgB,OAAA;AACzB,iDAA2E;AAAlE,gHAAA,kBAAkB,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAC/C,yCAAuC;AAA9B,gGAAA,MAAM,OAAA;AAEf,+CAA2G;AAAlG,iHAAA,oBAAoB,OAAA;AAAE,wHAAA,2BAA2B,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAChF,mDAA8E;AAArE,mHAAA,oBAAoB,OAAA;AAAE,iHAAA,kBAAkB,OAAA"}
|
|
@@ -36,13 +36,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.evaluateWidgetModuleExports = evaluateWidgetModuleExports;
|
|
40
|
+
exports.evaluateWidgetModule = evaluateWidgetModule;
|
|
39
41
|
exports.prerenderWidgetState = prerenderWidgetState;
|
|
40
42
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
41
43
|
const node_path_1 = __importDefault(require("node:path"));
|
|
44
|
+
const node_module_1 = require("node:module");
|
|
42
45
|
const node_vm_1 = __importDefault(require("node:vm"));
|
|
43
46
|
const babel = __importStar(require("@babel/core"));
|
|
44
47
|
const constants_1 = require("../constants");
|
|
48
|
+
const logger_1 = require("./logger");
|
|
45
49
|
const widgetLabel_1 = require("./widgetLabel");
|
|
50
|
+
const PRERENDER_PACKAGE_REDIRECTS = {
|
|
51
|
+
'@use-voltra/ios-client': '@use-voltra/ios',
|
|
52
|
+
'@use-voltra/android-client': '@use-voltra/android',
|
|
53
|
+
};
|
|
46
54
|
/**
|
|
47
55
|
* Check if a module specifier is a relative or absolute path (local file)
|
|
48
56
|
*/
|
|
@@ -104,17 +112,30 @@ function transpileFile(filePath, projectRoot) {
|
|
|
104
112
|
* Evaluate a widget module using Babel transpilation and Node.js VM.
|
|
105
113
|
* This allows executing widget code that uses JSX and React components.
|
|
106
114
|
* Local module dependencies are also transpiled with the same Babel settings.
|
|
115
|
+
*
|
|
116
|
+
* Exported so platform-specific prerender flows can reuse the same module loader rather
|
|
117
|
+
* than duplicating the Babel + VM scaffolding. The returned value is the module's exports
|
|
118
|
+
* object — callers decide whether to read `.default`, a named export, etc.
|
|
107
119
|
*/
|
|
108
|
-
function
|
|
120
|
+
function evaluateWidgetModuleExports(projectRoot, filePath, warnedRedirects = new Set()) {
|
|
109
121
|
// Cache for already-evaluated modules to handle circular dependencies
|
|
110
122
|
const moduleCache = new Map();
|
|
123
|
+
const projectRequire = (0, node_module_1.createRequire)(node_path_1.default.join(projectRoot, 'package.json'));
|
|
111
124
|
/**
|
|
112
125
|
* Custom require that transpiles local modules with Babel
|
|
113
126
|
*/
|
|
114
127
|
function customRequire(moduleSpecifier, currentDir) {
|
|
115
128
|
// For non-local modules (npm packages), use native require
|
|
116
129
|
if (!isLocalModule(moduleSpecifier)) {
|
|
117
|
-
|
|
130
|
+
const redirectedSpecifier = PRERENDER_PACKAGE_REDIRECTS[moduleSpecifier];
|
|
131
|
+
if (redirectedSpecifier) {
|
|
132
|
+
if (!warnedRedirects.has(moduleSpecifier)) {
|
|
133
|
+
warnedRedirects.add(moduleSpecifier);
|
|
134
|
+
logger_1.logger.warn(`Prerendering initial state imported '${moduleSpecifier}'. Using '${redirectedSpecifier}' instead.`);
|
|
135
|
+
}
|
|
136
|
+
return projectRequire(redirectedSpecifier);
|
|
137
|
+
}
|
|
138
|
+
return projectRequire(moduleSpecifier);
|
|
118
139
|
}
|
|
119
140
|
// Resolve the local module path
|
|
120
141
|
const resolvedPath = resolveModulePath(moduleSpecifier, currentDir);
|
|
@@ -148,8 +169,13 @@ function evaluateWidgetModule(projectRoot, filePath) {
|
|
|
148
169
|
moduleCache.set(resolvedPath, mockModule.exports);
|
|
149
170
|
return mockModule.exports;
|
|
150
171
|
}
|
|
151
|
-
|
|
152
|
-
|
|
172
|
+
return customRequire(filePath, node_path_1.default.dirname(filePath));
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Evaluate a widget file as a server-style WidgetVariants module and return its object export.
|
|
176
|
+
*/
|
|
177
|
+
function evaluateWidgetModule(projectRoot, filePath, warnedRedirects = new Set()) {
|
|
178
|
+
const exports = evaluateWidgetModuleExports(projectRoot, filePath, warnedRedirects);
|
|
153
179
|
const widgetVariants = exports.default || exports;
|
|
154
180
|
if (!widgetVariants || typeof widgetVariants !== 'object') {
|
|
155
181
|
throw new Error('Widget file must export a WidgetVariants object or have a default export of WidgetVariants');
|
|
@@ -170,6 +196,7 @@ function evaluateWidgetModule(projectRoot, filePath) {
|
|
|
170
196
|
*/
|
|
171
197
|
async function prerenderWidgetState(widgets, projectRoot, renderer) {
|
|
172
198
|
const prerenderedStates = new Map();
|
|
199
|
+
const warnedRedirects = new Set();
|
|
173
200
|
for (const widget of widgets) {
|
|
174
201
|
if (!widget.initialStatePath) {
|
|
175
202
|
continue;
|
|
@@ -182,7 +209,7 @@ async function prerenderWidgetState(widgets, projectRoot, renderer) {
|
|
|
182
209
|
try {
|
|
183
210
|
for (const [localeKey, relativePath] of Object.entries(perLocalePaths)) {
|
|
184
211
|
const absoluteWidgetPath = node_path_1.default.resolve(projectRoot, relativePath);
|
|
185
|
-
const widgetVariants = evaluateWidgetModule(projectRoot, absoluteWidgetPath);
|
|
212
|
+
const widgetVariants = evaluateWidgetModule(projectRoot, absoluteWidgetPath, warnedRedirects);
|
|
186
213
|
const prerenderedState = renderer(widgetVariants);
|
|
187
214
|
inner.set(localeKey, prerenderedState);
|
|
188
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"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"}
|
package/build/cjs/validation.js
CHANGED
|
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.validateHomeScreenWidgetId = validateHomeScreenWidgetId;
|
|
37
37
|
exports.assertValidLocaleKey = assertValidLocaleKey;
|
|
38
38
|
exports.validateWidgetLabel = validateWidgetLabel;
|
|
39
|
+
exports.normalizeWidgetEntryPath = normalizeWidgetEntryPath;
|
|
40
|
+
exports.validateWidgetEntry = validateWidgetEntry;
|
|
39
41
|
exports.validateInitialStatePath = validateInitialStatePath;
|
|
40
42
|
const fs = __importStar(require("fs"));
|
|
41
43
|
const path = __importStar(require("path"));
|
|
@@ -46,6 +48,17 @@ const WIDGET_ID_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
|
|
46
48
|
*/
|
|
47
49
|
const LOCALE_KEY_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*([_-][a-zA-Z0-9]+)*$/;
|
|
48
50
|
const MAX_LOCALE_KEY_LENGTH = 32;
|
|
51
|
+
const WIDGET_ENTRY_EXTENSIONS = new Set(['.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs']);
|
|
52
|
+
const WIDGET_ENTRY_FIELD_NAME = 'entry';
|
|
53
|
+
function isAbsoluteWidgetPath(value) {
|
|
54
|
+
return path.isAbsolute(value) || path.win32.isAbsolute(value) || /^[a-zA-Z]:[\\/]/.test(value);
|
|
55
|
+
}
|
|
56
|
+
function normalizeWidgetEntry(entry) {
|
|
57
|
+
return path.posix.normalize(entry.replace(/\\/g, '/'));
|
|
58
|
+
}
|
|
59
|
+
function widgetEntryExtension(entry) {
|
|
60
|
+
return path.posix.extname(entry);
|
|
61
|
+
}
|
|
49
62
|
function validateHomeScreenWidgetId(widgetId) {
|
|
50
63
|
if (!widgetId || typeof widgetId !== 'string') {
|
|
51
64
|
throw new Error('Widget ID is required and must be a string');
|
|
@@ -97,6 +110,48 @@ function validateWidgetLabel(value, widgetId, fieldName) {
|
|
|
97
110
|
}
|
|
98
111
|
}
|
|
99
112
|
}
|
|
113
|
+
function normalizeWidgetEntryPath(entry, projectRoot) {
|
|
114
|
+
const normalizedInput = normalizeWidgetEntry(entry);
|
|
115
|
+
if (projectRoot) {
|
|
116
|
+
const absolutePath = path.resolve(projectRoot, normalizedInput);
|
|
117
|
+
const relativePath = path.relative(projectRoot, absolutePath);
|
|
118
|
+
return normalizeWidgetEntry(relativePath);
|
|
119
|
+
}
|
|
120
|
+
return normalizedInput;
|
|
121
|
+
}
|
|
122
|
+
function validateWidgetEntry(value, widgetId, projectRoot) {
|
|
123
|
+
if (typeof value !== 'string' || !value.trim()) {
|
|
124
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} is required`);
|
|
125
|
+
}
|
|
126
|
+
if (isAbsoluteWidgetPath(value)) {
|
|
127
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must be a relative path, not an absolute path`);
|
|
128
|
+
}
|
|
129
|
+
const normalizedEntry = normalizeWidgetEntryPath(value);
|
|
130
|
+
if (!normalizedEntry || normalizedEntry === '.') {
|
|
131
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must point to a file inside the project root`);
|
|
132
|
+
}
|
|
133
|
+
if (normalizedEntry === '..' || normalizedEntry.startsWith('../')) {
|
|
134
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must stay within the project root after normalization`);
|
|
135
|
+
}
|
|
136
|
+
const extension = widgetEntryExtension(normalizedEntry);
|
|
137
|
+
if (!WIDGET_ENTRY_EXTENSIONS.has(extension)) {
|
|
138
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must use a Metro-importable source extension ` +
|
|
139
|
+
`(${Array.from(WIDGET_ENTRY_EXTENSIONS).join(', ')}); received '${extension || '(none)'}'`);
|
|
140
|
+
}
|
|
141
|
+
if (!projectRoot) {
|
|
142
|
+
return normalizedEntry;
|
|
143
|
+
}
|
|
144
|
+
const normalizedInput = normalizeWidgetEntry(value);
|
|
145
|
+
const absolutePath = path.resolve(projectRoot, normalizedInput);
|
|
146
|
+
const normalizedProjectRelativePath = normalizeWidgetEntryPath(normalizedInput, projectRoot);
|
|
147
|
+
if (normalizedProjectRelativePath === '..' || normalizedProjectRelativePath.startsWith('../')) {
|
|
148
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must stay within the project root after normalization`);
|
|
149
|
+
}
|
|
150
|
+
if (!fs.existsSync(absolutePath) || !fs.statSync(absolutePath).isFile()) {
|
|
151
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} file not found at ${normalizedProjectRelativePath}`);
|
|
152
|
+
}
|
|
153
|
+
return normalizedProjectRelativePath;
|
|
154
|
+
}
|
|
100
155
|
/**
|
|
101
156
|
* Validates optional initialStatePath: plain string or locale map of project-relative file paths.
|
|
102
157
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"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"}
|
package/build/esm/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { MAX_IMAGE_SIZE_BYTES, MODULE_EXTENSIONS } from './constants';
|
|
2
|
-
export { assertValidLocaleKey, validateHomeScreenWidgetId, validateInitialStatePath, validateWidgetLabel, } from './validation';
|
|
2
|
+
export { assertValidLocaleKey, normalizeWidgetEntryPath, validateHomeScreenWidgetId, validateInitialStatePath, validateWidgetEntry, validateWidgetLabel, } from './validation';
|
|
3
3
|
export { addApplicationGroupsEntitlement } from './utils/entitlements';
|
|
4
4
|
export { resolveFontPaths } from './utils/fonts';
|
|
5
5
|
export { normalizeLocaleTag, pickLocalizedValue } from './utils/localePick';
|
|
6
6
|
export { logger } from './utils/logger';
|
|
7
|
-
export { prerenderWidgetState } from './utils/prerender';
|
|
7
|
+
export { evaluateWidgetModule, evaluateWidgetModuleExports, prerenderWidgetState } from './utils/prerender';
|
|
8
8
|
export { isWidgetLocalizedMap, widgetLabelEnglish } from './utils/widgetLabel';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAUrE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC3G,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
3
4
|
import vm from 'node:vm';
|
|
4
5
|
import * as babel from '@babel/core';
|
|
5
6
|
import { MODULE_EXTENSIONS } from '../constants';
|
|
7
|
+
import { logger } from './logger';
|
|
6
8
|
import { isWidgetLocalizedMap } from './widgetLabel';
|
|
9
|
+
const PRERENDER_PACKAGE_REDIRECTS = {
|
|
10
|
+
'@use-voltra/ios-client': '@use-voltra/ios',
|
|
11
|
+
'@use-voltra/android-client': '@use-voltra/android',
|
|
12
|
+
};
|
|
7
13
|
/**
|
|
8
14
|
* Check if a module specifier is a relative or absolute path (local file)
|
|
9
15
|
*/
|
|
@@ -65,17 +71,30 @@ function transpileFile(filePath, projectRoot) {
|
|
|
65
71
|
* Evaluate a widget module using Babel transpilation and Node.js VM.
|
|
66
72
|
* This allows executing widget code that uses JSX and React components.
|
|
67
73
|
* Local module dependencies are also transpiled with the same Babel settings.
|
|
74
|
+
*
|
|
75
|
+
* Exported so platform-specific prerender flows can reuse the same module loader rather
|
|
76
|
+
* than duplicating the Babel + VM scaffolding. The returned value is the module's exports
|
|
77
|
+
* object — callers decide whether to read `.default`, a named export, etc.
|
|
68
78
|
*/
|
|
69
|
-
function
|
|
79
|
+
export function evaluateWidgetModuleExports(projectRoot, filePath, warnedRedirects = new Set()) {
|
|
70
80
|
// Cache for already-evaluated modules to handle circular dependencies
|
|
71
81
|
const moduleCache = new Map();
|
|
82
|
+
const projectRequire = createRequire(path.join(projectRoot, 'package.json'));
|
|
72
83
|
/**
|
|
73
84
|
* Custom require that transpiles local modules with Babel
|
|
74
85
|
*/
|
|
75
86
|
function customRequire(moduleSpecifier, currentDir) {
|
|
76
87
|
// For non-local modules (npm packages), use native require
|
|
77
88
|
if (!isLocalModule(moduleSpecifier)) {
|
|
78
|
-
|
|
89
|
+
const redirectedSpecifier = PRERENDER_PACKAGE_REDIRECTS[moduleSpecifier];
|
|
90
|
+
if (redirectedSpecifier) {
|
|
91
|
+
if (!warnedRedirects.has(moduleSpecifier)) {
|
|
92
|
+
warnedRedirects.add(moduleSpecifier);
|
|
93
|
+
logger.warn(`Prerendering initial state imported '${moduleSpecifier}'. Using '${redirectedSpecifier}' instead.`);
|
|
94
|
+
}
|
|
95
|
+
return projectRequire(redirectedSpecifier);
|
|
96
|
+
}
|
|
97
|
+
return projectRequire(moduleSpecifier);
|
|
79
98
|
}
|
|
80
99
|
// Resolve the local module path
|
|
81
100
|
const resolvedPath = resolveModulePath(moduleSpecifier, currentDir);
|
|
@@ -109,8 +128,13 @@ function evaluateWidgetModule(projectRoot, filePath) {
|
|
|
109
128
|
moduleCache.set(resolvedPath, mockModule.exports);
|
|
110
129
|
return mockModule.exports;
|
|
111
130
|
}
|
|
112
|
-
|
|
113
|
-
|
|
131
|
+
return customRequire(filePath, path.dirname(filePath));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Evaluate a widget file as a server-style WidgetVariants module and return its object export.
|
|
135
|
+
*/
|
|
136
|
+
export function evaluateWidgetModule(projectRoot, filePath, warnedRedirects = new Set()) {
|
|
137
|
+
const exports = evaluateWidgetModuleExports(projectRoot, filePath, warnedRedirects);
|
|
114
138
|
const widgetVariants = exports.default || exports;
|
|
115
139
|
if (!widgetVariants || typeof widgetVariants !== 'object') {
|
|
116
140
|
throw new Error('Widget file must export a WidgetVariants object or have a default export of WidgetVariants');
|
|
@@ -131,6 +155,7 @@ function evaluateWidgetModule(projectRoot, filePath) {
|
|
|
131
155
|
*/
|
|
132
156
|
export async function prerenderWidgetState(widgets, projectRoot, renderer) {
|
|
133
157
|
const prerenderedStates = new Map();
|
|
158
|
+
const warnedRedirects = new Set();
|
|
134
159
|
for (const widget of widgets) {
|
|
135
160
|
if (!widget.initialStatePath) {
|
|
136
161
|
continue;
|
|
@@ -143,7 +168,7 @@ export async function prerenderWidgetState(widgets, projectRoot, renderer) {
|
|
|
143
168
|
try {
|
|
144
169
|
for (const [localeKey, relativePath] of Object.entries(perLocalePaths)) {
|
|
145
170
|
const absoluteWidgetPath = path.resolve(projectRoot, relativePath);
|
|
146
|
-
const widgetVariants = evaluateWidgetModule(projectRoot, absoluteWidgetPath);
|
|
171
|
+
const widgetVariants = evaluateWidgetModule(projectRoot, absoluteWidgetPath, warnedRedirects);
|
|
147
172
|
const prerenderedState = renderer(widgetVariants);
|
|
148
173
|
inner.set(localeKey, prerenderedState);
|
|
149
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAkBpD;;GAEG;AACH,SAAS,aAAa,CAAC,eAAuB;IAC5C,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC3E,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,eAAuB,EAAE,OAAe;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAEvD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAA;QAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9D,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,GAAG,CAAC,CAAA;YACpD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,yBAAyB,CAAC,WAAmB;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;IAC5D,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;AACtD,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AACvE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB,EAAE,WAAmB;IAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAA;IAErE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;QACvC,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,QAAQ;QAClB,GAAG,CAAC,sBAAsB;YACxB,CAAC,CAAC,EAAE,UAAU,EAAE,sBAAsB,EAAE;YACxC,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;aAC9C,CAAC;KACP,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"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"}
|
package/build/esm/validation.js
CHANGED
|
@@ -7,6 +7,17 @@ const WIDGET_ID_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
|
|
7
7
|
*/
|
|
8
8
|
const LOCALE_KEY_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*([_-][a-zA-Z0-9]+)*$/;
|
|
9
9
|
const MAX_LOCALE_KEY_LENGTH = 32;
|
|
10
|
+
const WIDGET_ENTRY_EXTENSIONS = new Set(['.js', '.jsx', '.ts', '.tsx', '.mjs', '.cjs']);
|
|
11
|
+
const WIDGET_ENTRY_FIELD_NAME = 'entry';
|
|
12
|
+
function isAbsoluteWidgetPath(value) {
|
|
13
|
+
return path.isAbsolute(value) || path.win32.isAbsolute(value) || /^[a-zA-Z]:[\\/]/.test(value);
|
|
14
|
+
}
|
|
15
|
+
function normalizeWidgetEntry(entry) {
|
|
16
|
+
return path.posix.normalize(entry.replace(/\\/g, '/'));
|
|
17
|
+
}
|
|
18
|
+
function widgetEntryExtension(entry) {
|
|
19
|
+
return path.posix.extname(entry);
|
|
20
|
+
}
|
|
10
21
|
export function validateHomeScreenWidgetId(widgetId) {
|
|
11
22
|
if (!widgetId || typeof widgetId !== 'string') {
|
|
12
23
|
throw new Error('Widget ID is required and must be a string');
|
|
@@ -58,6 +69,48 @@ export function validateWidgetLabel(value, widgetId, fieldName) {
|
|
|
58
69
|
}
|
|
59
70
|
}
|
|
60
71
|
}
|
|
72
|
+
export function normalizeWidgetEntryPath(entry, projectRoot) {
|
|
73
|
+
const normalizedInput = normalizeWidgetEntry(entry);
|
|
74
|
+
if (projectRoot) {
|
|
75
|
+
const absolutePath = path.resolve(projectRoot, normalizedInput);
|
|
76
|
+
const relativePath = path.relative(projectRoot, absolutePath);
|
|
77
|
+
return normalizeWidgetEntry(relativePath);
|
|
78
|
+
}
|
|
79
|
+
return normalizedInput;
|
|
80
|
+
}
|
|
81
|
+
export function validateWidgetEntry(value, widgetId, projectRoot) {
|
|
82
|
+
if (typeof value !== 'string' || !value.trim()) {
|
|
83
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} is required`);
|
|
84
|
+
}
|
|
85
|
+
if (isAbsoluteWidgetPath(value)) {
|
|
86
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must be a relative path, not an absolute path`);
|
|
87
|
+
}
|
|
88
|
+
const normalizedEntry = normalizeWidgetEntryPath(value);
|
|
89
|
+
if (!normalizedEntry || normalizedEntry === '.') {
|
|
90
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must point to a file inside the project root`);
|
|
91
|
+
}
|
|
92
|
+
if (normalizedEntry === '..' || normalizedEntry.startsWith('../')) {
|
|
93
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must stay within the project root after normalization`);
|
|
94
|
+
}
|
|
95
|
+
const extension = widgetEntryExtension(normalizedEntry);
|
|
96
|
+
if (!WIDGET_ENTRY_EXTENSIONS.has(extension)) {
|
|
97
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must use a Metro-importable source extension ` +
|
|
98
|
+
`(${Array.from(WIDGET_ENTRY_EXTENSIONS).join(', ')}); received '${extension || '(none)'}'`);
|
|
99
|
+
}
|
|
100
|
+
if (!projectRoot) {
|
|
101
|
+
return normalizedEntry;
|
|
102
|
+
}
|
|
103
|
+
const normalizedInput = normalizeWidgetEntry(value);
|
|
104
|
+
const absolutePath = path.resolve(projectRoot, normalizedInput);
|
|
105
|
+
const normalizedProjectRelativePath = normalizeWidgetEntryPath(normalizedInput, projectRoot);
|
|
106
|
+
if (normalizedProjectRelativePath === '..' || normalizedProjectRelativePath.startsWith('../')) {
|
|
107
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} must stay within the project root after normalization`);
|
|
108
|
+
}
|
|
109
|
+
if (!fs.existsSync(absolutePath) || !fs.statSync(absolutePath).isFile()) {
|
|
110
|
+
throw new Error(`Widget '${widgetId}': ${WIDGET_ENTRY_FIELD_NAME} file not found at ${normalizedProjectRelativePath}`);
|
|
111
|
+
}
|
|
112
|
+
return normalizedProjectRelativePath;
|
|
113
|
+
}
|
|
61
114
|
/**
|
|
62
115
|
* Validates optional initialStatePath: plain string or locale map of project-relative file paths.
|
|
63
116
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAI5B,mFAAmF;AACnF,MAAM,iBAAiB,GAAG,0BAA0B,CAAA;AAEpD;;GAEG;AACH,MAAM,kBAAkB,GAAG,2CAA2C,CAAA;AAEtE,MAAM,qBAAqB,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"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"}
|
package/build/types/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { MAX_IMAGE_SIZE_BYTES, MODULE_EXTENSIONS } from './constants';
|
|
2
|
-
export type { WidgetInitialStatePath, WidgetLabel, WidgetLocalizedCopy } from './types';
|
|
3
|
-
export { assertValidLocaleKey, validateHomeScreenWidgetId, validateInitialStatePath, validateWidgetLabel, } from './validation';
|
|
2
|
+
export type { DynamicWidgetEntryConfig, DynamicWidgetManifest, DynamicWidgetManifestWidget, DynamicWidgetPlatform, WidgetInitialStatePath, WidgetLabel, WidgetLocalizedCopy, } from './types';
|
|
3
|
+
export { assertValidLocaleKey, normalizeWidgetEntryPath, validateHomeScreenWidgetId, validateInitialStatePath, validateWidgetEntry, validateWidgetLabel, } from './validation';
|
|
4
4
|
export { addApplicationGroupsEntitlement } from './utils/entitlements';
|
|
5
5
|
export { resolveFontPaths } from './utils/fonts';
|
|
6
6
|
export { normalizeLocaleTag, pickLocalizedValue } from './utils/localePick';
|
|
7
7
|
export { logger } from './utils/logger';
|
|
8
8
|
export type { PrerenderableWidget, PrerenderedWidgetStates, WidgetRenderer } from './utils/prerender';
|
|
9
|
-
export { prerenderWidgetState } from './utils/prerender';
|
|
9
|
+
export { evaluateWidgetModule, evaluateWidgetModuleExports, prerenderWidgetState } from './utils/prerender';
|
|
10
10
|
export { isWidgetLocalizedMap, widgetLabelEnglish } from './utils/widgetLabel';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,mBAAmB,GACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACrG,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC3G,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA"}
|
package/build/types/types.d.ts
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
* Types shared by iOS and Android Voltra config plugins.
|
|
3
3
|
* Platform widget config types live in each client's expo-plugin package.
|
|
4
4
|
*/
|
|
5
|
+
export type DynamicWidgetPlatform = 'ios' | 'android';
|
|
6
|
+
/**
|
|
7
|
+
* Shared app.json entry contract for Dynamic Widgets.
|
|
8
|
+
*
|
|
9
|
+
* `entry` stays optional during rollout so platform packages can adopt the shared contract
|
|
10
|
+
* incrementally, but validation should require it for real widget declarations.
|
|
11
|
+
*/
|
|
12
|
+
export interface DynamicWidgetEntryConfig {
|
|
13
|
+
entry?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DynamicWidgetManifestWidget {
|
|
16
|
+
id: string;
|
|
17
|
+
entry: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DynamicWidgetManifest {
|
|
20
|
+
version: 1;
|
|
21
|
+
platform: DynamicWidgetPlatform;
|
|
22
|
+
widgets: DynamicWidgetManifestWidget[];
|
|
23
|
+
}
|
|
5
24
|
/**
|
|
6
25
|
* Per-locale strings for widget picker/gallery labels (`displayName`, `description`).
|
|
7
26
|
* Keys should be BCP-47-style locale tags (e.g. `en`, `pl`, `pt-BR`). Plain `string` is still allowed for a single-language setup.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEtD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,CAAA;AAErD;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,OAAO,EAAE,2BAA2B,EAAE,CAAA;CACvC;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAExD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEtD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,mBAAmB,CAAA"}
|
|
@@ -12,6 +12,20 @@ export interface PrerenderableWidget {
|
|
|
12
12
|
}
|
|
13
13
|
/** widgetId -> locale key -> prerendered JSON string (single-file widgets use `__default`) */
|
|
14
14
|
export type PrerenderedWidgetStates = Map<string, Map<string, string>>;
|
|
15
|
+
/**
|
|
16
|
+
* Evaluate a widget module using Babel transpilation and Node.js VM.
|
|
17
|
+
* This allows executing widget code that uses JSX and React components.
|
|
18
|
+
* Local module dependencies are also transpiled with the same Babel settings.
|
|
19
|
+
*
|
|
20
|
+
* Exported so platform-specific prerender flows can reuse the same module loader rather
|
|
21
|
+
* than duplicating the Babel + VM scaffolding. The returned value is the module's exports
|
|
22
|
+
* object — callers decide whether to read `.default`, a named export, etc.
|
|
23
|
+
*/
|
|
24
|
+
export declare function evaluateWidgetModuleExports(projectRoot: string, filePath: string, warnedRedirects?: Set<string>): any;
|
|
25
|
+
/**
|
|
26
|
+
* Evaluate a widget file as a server-style WidgetVariants module and return its object export.
|
|
27
|
+
*/
|
|
28
|
+
export declare function evaluateWidgetModule(projectRoot: string, filePath: string, warnedRedirects?: Set<string>): any;
|
|
15
29
|
/**
|
|
16
30
|
* Prerender widget initial states for build-time inclusion.
|
|
17
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,sBAAsB,EAAe,MAAM,UAAU,CAAA;AAInE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAA;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;CAC1C;AAED,8FAA8F;AAC9F,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AA2EtE;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,eAAe,cAAoB,GAClC,GAAG,CAsEL;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,cAAoB,GAAG,GAAG,CASpH;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,uBAAuB,CAAC,CAgClC"}
|
|
@@ -2,6 +2,8 @@ import type { WidgetInitialStatePath } from './types';
|
|
|
2
2
|
export declare function validateHomeScreenWidgetId(widgetId: unknown): asserts widgetId is string;
|
|
3
3
|
export declare function assertValidLocaleKey(localeKey: string, widgetId: string, fieldName: string): void;
|
|
4
4
|
export declare function validateWidgetLabel(value: unknown, widgetId: string, fieldName: string): void;
|
|
5
|
+
export declare function normalizeWidgetEntryPath(entry: string, projectRoot?: string): string;
|
|
6
|
+
export declare function validateWidgetEntry(value: unknown, widgetId: string, projectRoot?: string): string;
|
|
5
7
|
/**
|
|
6
8
|
* Validates optional initialStatePath: plain string or locale map of project-relative file paths.
|
|
7
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AA0BrD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAWxF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAuBjG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAmC7F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAUpF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAiDlG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAkDN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@use-voltra/expo-plugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Shared utilities for Voltra Expo config plugins",
|
|
5
5
|
"main": "build/cjs/index.js",
|
|
6
6
|
"module": "build/esm/index.js",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"build",
|
|
19
|
+
"src",
|
|
19
20
|
"README.md"
|
|
20
21
|
],
|
|
21
22
|
"dependencies": {
|
package/src/constants.ts
ADDED