Commit Graph

14 Commits

Author SHA1 Message Date
b55e503cbc Update constitution to document loadGlobalVariableFunctions pattern
Version: 1.17.0 → 1.18.0 (MINOR: Function loading pattern documentation)

Changes:
- Document loadGlobalVariableFunctions() generic pattern
- Update VM context injection code example
- Update helpers.js loading documentation
- Document tempContext with full globalVMContext + globalVariableContext
- Fix duplicate req entry and renumber to 11 and 12

Key Documentation Updates:

1. Section I.II - helpers.js Pattern:
   - Loaded by loadGlobalVariableFunctions() which scans ALL .js files
   - Filename determines key: helpers.js → globalVariableContext.helpers
   - Executed in tempContext with full VM globals access

2. Section I.V - VM Context Injection Pattern:
   - Replaced specific helpers loading code with generic pattern
   - Documents loadGlobalVariableFunctions() scanning all .js files
   - Shows tempContext creation with {...globalVMContext, ...globalVariableContext}
   - Documents 4-step loading process with filename-to-key mapping

3. Section I.V - Helper Functions Module:
   - Added Generic Loading Pattern section
   - Documents full access to VM globals (axios, jwt, crypto, etc.)
   - Documents access to previously loaded JSON data and functions
   - Added note about extensibility (utils.js, validators.js, etc.)

Architecture Notes:
- Generic pattern: any .js file in globalVariables/ auto-loaded
- tempContext includes all dependencies from both contexts
- Function modules can access same globals as proxy.js
- Supports multiple function modules without code changes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 11:22:07 -06:00
6df1d49e9a Update tempContext to use full globalVMContext and globalVariableContext
Changes:
- Change tempContext from minimal {crypto, console: logger}
- Now uses {...globalVMContext, ...globalVariableContext}
- Provides function modules access to all VM globals
- Matches the context pattern used for proxy.js

Benefits:
- Function modules can access all dependencies (axios, jwt, etc.)
- Consistent with per-request context pattern
- Previously loaded JSON data available to function modules
- More flexible for complex function modules

Context now includes:
- From globalVMContext: URLSearchParams, URL, console, crypto, axios, uuidv4, jwt, xmlBuilder
- From globalVariableContext: Previously loaded JSON files and function modules
- Allows function modules to depend on other globals if needed

Testing:
- ✓ Syntax validated
- ✓ helpers.js loads correctly with full context
- ✓ helpers.generateRequestId() uses crypto from context
- ✓ All 11 exports available

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 11:17:19 -06:00
6e2e385d6a Refactor: Rename loadHelpers to loadGlobalVariableFunctions with generic pattern
Changes:
- Rename loadHelpers() → loadGlobalVariableFunctions()
- Match pattern of loadGlobalObjects() for consistency
- Load ALL .js files from globalVariables/ directory (not just helpers.js)
- Use filename as key in globalVariableContext (e.g., helpers.js → 'helpers')
- Generic implementation supports multiple function modules

Pattern:
- globalVariables/filename.js → globalVariableContext['filename']
- Each .js file must return an object via IIFE
- Files filtered: *.js (excluding *.example.js)
- Executed in temp context with crypto and console

Benefits:
- Consistent with loadGlobalObjects() pattern
- Generic: can add more function modules without code changes
- Filename determines the global variable name
- Clear separation: .json for data, .js for functions

Example:
- helpers.js → globalVariableContext.helpers
- utils.js → globalVariableContext.utils (future)
- validators.js → globalVariableContext.validators (future)

Testing:
- ✓ Syntax validated
- ✓ helpers.js loads correctly with 11 exports
- ✓ Available in context as 'helpers' object
- ✓ Pattern matches loadGlobalObjects() structure

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 11:03:35 -06:00
d6fa0b1f97 Refactor: Store helpers in globalVariableContext instead of separate variable
Changes:
- Store helpers object in globalVariableContext.helpers
- Remove separate 'helpers' variable and helpersContext
- Helpers now spread into context via ...globalVariableContext
- Simplifies context injection - all globals in one place

Benefits:
- More consistent with JSON data loading pattern
- Single source of truth (globalVariableContext) for all VM globals
- Cleaner context creation (no separate helpers variable)
- helpers treated same as other global objects

Implementation:
- loadHelpers() now mutates globalVariableContext instead of returning
- Use tempContext for helpers execution (discarded after use)
- helpers accessible as 'helpers' in proxy.js via spread operator

Testing:
- ✓ Syntax validated
- ✓ helpers accessible in VM context
- ✓ Spread operator includes both JSON data and helpers
- ✓ All 11 helper functions available

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 11:00:17 -06:00
ab5aa83b6f Update server.js to load and inject helpers module
Changes:
- Add loadHelpers() function to load helpers.js via vm.Script
- Load helpers module at startup using same isolation pattern as proxy.js
- Inject helpers object into VM context for proxy.js access
- Update paths: global/ → globalVariables/, proxy.js → proxyScripts/proxy.js
- Create isolated context for helpers with crypto and console

Implementation:
- helpers.js loaded via vm.Script with isolated context
- helpers context includes crypto and console (logger)
- helpers object returned by IIFE execution
- Injected into per-request VM context alongside other globals
- Follows constitution pattern for vm.Script module loading

Testing:
- ✓ All JavaScript syntax validated
- ✓ Helpers module loads successfully
- ✓ All 11 expected functions present
- ✓ generateRequestId() returns valid format

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 10:55:17 -06:00
b263311a43 Extract helper functions from proxy.js into helpers.js module
- Create src/globalVariables/helpers.js (315 lines)
- Extract 11 pure utility functions from proxy.js
- Reduce proxy.js from 752 to 493 lines (35% reduction)
- Load helpers via vm.Script with same isolation pattern
- Update constitution to document helper extraction pattern

Extracted functions:
- generateRequestId, validateDocumentId, validateDocumentCount
- escapeXml, mapDriveErrorToHttp
- toSitemapEntry, transformDocumentsToSitemapEntries
- generateSitemapXML, generateSitemap
- parseRoute, DocumentCountExceededError class

Architecture:
- helpers.js loaded via vm.Script (IIFE returning object)
- Injected as 'helpers' global object into VM context
- proxy.js accesses via helpers.functionName() pattern
- Maintains zero-import isolation pattern

Constitution version: 1.16.0 → 1.17.0

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 10:52:49 -06:00
f6710203c7 Reorganize project structure: relocate proxy.js and global directory
- Move src/proxy.js → src/proxyScripts/proxy.js
- Move global/ → src/globalVariables/
- Update constitution.md to reflect new file locations
- Update all documentation references to new paths
- Consolidate all source code under src/ directory

Constitution version: 1.15.0 → 1.16.0

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-07 10:35:03 -06:00
c2ecc72775 removed .old files 2026-03-07 01:36:41 -06:00
b35a5c82ce bringing inline with code 2026-03-07 01:35:07 -06:00
a9406d4292 remove globalThis and added URL to global 2026-03-07 01:29:07 -06:00
1a6bd09b7b Now working as a vm.Script passing in all the Globals the proxy script needs 2026-03-07 01:20:45 -06:00
67b36f97ce trying to stop proxy.js from exporting 2026-03-07 00:02:46 -06:00
e9495f65b5 Initial Version of sitemap.xml spec 2026-03-06 23:34:00 -06:00
fec5bfa5c7 Initial commit from Specify template 2026-03-05 23:44:06 -06:00