| Line 12: |
Line 12: |
| | require('strict') | | require('strict') |
| | | | |
| − | -- Load core helpers | + | -- load Utilities first so we can keep it in sync with the effective cfg |
| | local utilities = require('Module:Citation/CS1/Utilities') | | local utilities = require('Module:Citation/CS1/Utilities') |
| | + | local z = utilities.z |
| | + | |
| | + | local validation = require('Module:Citation/CS1/Date_validation') |
| | local identifiers = require('Module:Citation/CS1/Identifiers') | | local identifiers = require('Module:Citation/CS1/Identifiers') |
| | local metadata = require('Module:Citation/CS1/COinS') | | local metadata = require('Module:Citation/CS1/COinS') |
| − | local validation = require('Module:Citation/CS1/Date_validation')
| |
| | | | |
| − | -- Load config/whitelist (read-only tables via mw.loadData) | + | -- load configuration (read-only) and wrap it so we can provide safe defaults |
| − | local cfg = mw.loadData('Module:Citation/CS1/Configuration') | + | local raw_cfg = mw.loadData('Module:Citation/CS1/Configuration') |
| | + | local cfg = setmetatable({}, { __index = raw_cfg }) |
| | + | |
| | + | -- MINIMUM safe defaults so fields are never nil |
| | + | cfg.basic_arguments = raw_cfg.basic_arguments or {} |
| | + | cfg.presentation = raw_cfg.presentation or {} |
| | + | cfg.error_conditions = raw_cfg.error_conditions or {} |
| | + | cfg.messages = raw_cfg.messages or {} |
| | + | cfg.maint_cats = raw_cfg.maint_cats or {} |
| | + | cfg.prop_cats = raw_cfg.prop_cats or {} |
| | + | |
| | + | -- whitelist stays read-only |
| | local whitelist = mw.loadData('Module:Citation/CS1/Whitelist') | | local whitelist = mw.loadData('Module:Citation/CS1/Whitelist') |
| | + | |
| | + | -- keep Utilities aligned with this effective cfg |
| | + | utilities.set_selected_modules(cfg) |
| | + | |
| | | | |
| | -- Synchronize Utilities with the same config CS1 uses | | -- Synchronize Utilities with the same config CS1 uses |