Files
FlowPilot/background/registration-email-state.js
T
2026-05-12 02:26:46 +08:00

88 lines
3.2 KiB
JavaScript

(function attachBackgroundRegistrationEmailState(root, factory) {
root.MultiPageRegistrationEmailState = factory();
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundRegistrationEmailStateModule() {
const DEFAULT_REGISTRATION_EMAIL_STATE = Object.freeze({
current: '',
previous: '',
source: '',
updatedAt: 0,
});
function createRegistrationEmailStateHelpers() {
function normalizeEmailValue(value) {
return String(value || '').trim();
}
function cloneDefaultRegistrationEmailState() {
return {
current: DEFAULT_REGISTRATION_EMAIL_STATE.current,
previous: DEFAULT_REGISTRATION_EMAIL_STATE.previous,
source: DEFAULT_REGISTRATION_EMAIL_STATE.source,
updatedAt: DEFAULT_REGISTRATION_EMAIL_STATE.updatedAt,
};
}
function normalizeRegistrationEmailState(value, fallbackEmail = '') {
const fallback = normalizeEmailValue(fallbackEmail);
const candidate = value && typeof value === 'object' && !Array.isArray(value)
? value
: null;
const current = normalizeEmailValue(candidate?.current || fallback);
const previous = normalizeEmailValue(candidate?.previous || current || fallback);
const source = String(candidate?.source || '').trim();
const updatedAt = Number(candidate?.updatedAt) || 0;
return {
current,
previous,
source,
updatedAt: updatedAt > 0 ? updatedAt : 0,
};
}
function getRegistrationEmailState(state = {}) {
return normalizeRegistrationEmailState(state?.registrationEmailState, state?.email);
}
function buildRegistrationEmailStateUpdates(state = {}, options = {}) {
const currentState = getRegistrationEmailState(state);
const currentEmail = normalizeEmailValue(options.currentEmail);
const preservePrevious = Boolean(options.preservePrevious);
const source = String(options.source || '').trim();
const nextState = cloneDefaultRegistrationEmailState();
nextState.current = currentEmail;
nextState.previous = currentEmail || (preservePrevious ? currentState.previous : '');
nextState.source = currentEmail
? (source || currentState.source)
: (preservePrevious ? currentState.source : '');
nextState.updatedAt = currentEmail || (preservePrevious && currentState.previous)
? Date.now()
: 0;
return {
email: currentEmail || null,
registrationEmailState: nextState,
};
}
function getRegistrationEmailBaseline(state = {}, options = {}) {
const currentState = getRegistrationEmailState(state);
const preferredEmail = normalizeEmailValue(options.preferredEmail);
const fallbackEmail = normalizeEmailValue(options.fallbackEmail);
return preferredEmail || currentState.current || currentState.previous || fallbackEmail || '';
}
return {
DEFAULT_REGISTRATION_EMAIL_STATE: cloneDefaultRegistrationEmailState(),
buildRegistrationEmailStateUpdates,
getRegistrationEmailBaseline,
getRegistrationEmailState,
normalizeRegistrationEmailState,
};
}
return {
createRegistrationEmailStateHelpers,
};
});