Private/Data.ps1
|
# PSSnips — Module-scoped variables: paths, defaults, colour map, and templates. # Persistent paths, default settings, display colour map, and snippet templates # that are shared across all functions in the module. $script:Home = Join-Path $env:USERPROFILE '.pssnips' $script:CfgFile = Join-Path $script:Home 'config.json' $script:IdxFile = Join-Path $script:Home 'index.json' $script:SnipDir = Join-Path $script:Home 'snippets' # Advisory lock timeout (ms). Callers degrade gracefully on timeout rather than throw. $script:LockTimeoutMs = 3000 $script:Defaults = [ordered]@{ SnippetsDir = $script:SnipDir Editor = 'edit' EditorFallbacks = @('nvim','code','notepad') GitHubToken = '' GitHubUsername = '' DefaultLanguage = 'ps1' ConfirmDelete = $true MaxHistory = 10 GitLabToken = '' GitLabUrl = 'https://gitlab.com' SharedSnippetsDir = '' BitbucketUsername = '' BitbucketAppPassword = '' } # Environment variable → config key mapping (used by LoadCfg for layer 3 resolution) $script:EnvVarMap = [ordered]@{ PSSNIPS_DIR = 'SnippetsDir' PSSNIPS_EDITOR = 'Editor' PSSNIPS_DEFAULT_LANG = 'DefaultLanguage' PSSNIPS_GITHUB_TOKEN = 'GitHubToken' PSSNIPS_GITHUB_USER = 'GitHubUsername' PSSNIPS_GITLAB_TOKEN = 'GitLabToken' PSSNIPS_GITLAB_URL = 'GitLabUrl' PSSNIPS_SHARED_DIR = 'SharedSnippetsDir' PSSNIPS_WORKSPACE = 'WorkspaceConfigDir' } $script:WorkspaceCfgFile = '' # resolved at InitEnv time # Map extension → color for display $script:LangColor = @{ ps1 = 'Cyan'; psm1 = 'Cyan'; py = 'Yellow'; js = 'Yellow' ts = 'Blue'; bat = 'Gray'; cmd = 'Gray'; sh = 'Green' rb = 'Red'; go = 'Cyan'; cs = 'Magenta';sql = 'DarkCyan' txt = 'White'; md = 'White'; json= 'DarkYellow' } # Placeholder templates for new snippets $script:Templates = @{ ps1 = "<#`n.SYNOPSIS`n {desc}`n`n.DESCRIPTION`n `n`n.NOTES`n Snippet: {name}`n Tags:`n#>`n`n" py = "# {name}`n# {desc}`n`n" js = "// {name}`n// {desc}`n`n" ts = "// {name}`n// {desc}`n`n" bat = "@echo off`nREM {name}`nREM {desc}`n`n" sh = "#!/usr/bin/env bash`n# {name}`n# {desc}`n`n" rb = "# {name}`n# {desc}`n`n" go = "package main`n`n// {name} – {desc}`nfunc main() {`n`t`n}`n" } # Index/config in-memory caches (dirty = $true means reload from disk is needed) $script:IdxCache = $null $script:IdxDirty = $true $script:CfgCache = $null $script:CfgDirty = $true # Argument-completer TTL cache $script:CompleterCache = $null $script:CompleterCacheTime = [datetime]::MinValue $script:CompleterTtlSecs = 10 # Full-text search sidecar cache (path set in InitEnv) $script:FtsCache = $null $script:FtsCacheFile = '' # Event handler registry: hashtable of event-name → hashtable of (id → scriptblock) $script:EventRegistry = @{} # Active repository instance (set by InitEnv) $script:Repository = $null |