Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 4x 4x 4x 12x 12x 12x 12x 11x 11x 11x 1x 1x 1x 1x 11x 11x 11x 9x 1x 8x 7x 7x 7x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 2x 2x 4x 4x 4x 11x 11x 9x 6x 6x 4x 29x 29x 29x | import { IAndRuleData, IRuleData, IRulesResponse } from "../types/interfaces";
interface RuleStore {
simpleRuleSet: IRuleData[];
andRuleSet: IAndRuleData[];
}
let alreadyRetrievedRules = false;
// Use objects to avoid binding issues with let exports
export const ruleStore: RuleStore = {
simpleRuleSet: [],
andRuleSet: []
};
type CompletionCallback = () => void;
/**
* Get Rules function loads validation rules from local JSON file
* This replaces the previous server-based approach with a simple local file load
* All rule processing logic remains the same, only the source has changed
* @returns Promise that resolves when rules are loaded
*/
export function getRules(doOnCompletion?: CompletionCallback): Promise<void> {
console.log("🔍 getRules: ⚡ Starting rules loading from local file");
console.log("🔍 getRules: 📁 Loading rules from src/data/rules.json");
console.log("🔍 getRules: AlreadyRetrievedRules:", alreadyRetrievedRules);
if (alreadyRetrievedRules === false) {
console.log("🔍 getRules: First time loading rules from local file");
alreadyRetrievedRules = true;
// Load rules from local JSON file and return the promise
return loadLocalRules();
} else {
console.log("🔍 GetRules: Rules already loaded, calling completion handler");
Eif (doOnCompletion) {
doOnCompletion();
}
return Promise.resolve();
}
// Load rules from local JSON file
async function loadLocalRules(): Promise<void> {
try {
console.log("🔍 GetRules: loadLocalRules - Loading from local JSON file");
// Fetch the rules data (webpack will handle this at build time)
const response = await fetch("/Pages/data/rules.json");
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const rulesResponse: IRulesResponse = await response.json();
console.log("🔍 GetRules: loadLocalRules - ✅ Rules loaded successfully");
console.log("🔍 GetRules: loadLocalRules - Response:", {
isError: rulesResponse.IsError,
simpleRulesCount: rulesResponse.SimpleRules?.length || 0,
andRulesCount: rulesResponse.AndRules?.length || 0,
message: rulesResponse.Message
});
if (!rulesResponse.IsError) {
console.log("🔍 GetRules: loadLocalRules - ✅ SUCCESS - Rules received!");
console.log("🔍 GetRules: loadLocalRules - SimpleRules:", rulesResponse.SimpleRules?.length || 0, "rules");
console.log("🔍 GetRules: loadLocalRules - AndRules:", rulesResponse.AndRules?.length || 0, "rules");
// Update the arrays in place to maintain references
ruleStore.simpleRuleSet.length = 0; // Clear existing
ruleStore.simpleRuleSet.push(...rulesResponse.SimpleRules);
ruleStore.andRuleSet.length = 0; // Clear existing
ruleStore.andRuleSet.push(...rulesResponse.AndRules);
console.log("🔍 GetRules: ✅ Rules successfully stored in global variables");
console.log("🔍 GetRules: Final SimpleRuleSet length:", ruleStore.simpleRuleSet?.length || 0);
console.log("🔍 GetRules: Final AndRuleSet length:", ruleStore.andRuleSet?.length || 0);
} else {
console.log("🔍 GetRules: loadLocalRules - ❌ Service returned error:", rulesResponse.Message);
showMessage("Rules error", rulesResponse.Message || "Failed to load rules");
}
} catch (e) {
const error = e as Error;
console.log("🔍 GetRules: loadLocalRules - ❌ LOAD ERROR:", error);
showMessage("Load error", "Could not load rules from local file: " + error.message);
}
console.log("🔍 GetRules: loadLocalRules - Calling completion handler");
if (doOnCompletion) {
doOnCompletion();
}
}
// Displays an error message
function showMessage(title: string, message: string): void {
const text = "getRules - " + title + ":\n" + message;
console.log(text);
}
}
/**
* Reset function for testing - clears the singleton state
* Only exported for test purposes
*/
export function resetRulesState(): void {
alreadyRetrievedRules = false;
ruleStore.simpleRuleSet = [];
ruleStore.andRuleSet = [];
} |