norn-cli 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.claude/skills/norn-social-campaign/SKILL.md +70 -0
  2. package/CHANGELOG.md +6 -0
  3. package/demos/nornenv-region-refactor/README.md +64 -0
  4. package/dist/cli.js +360 -1
  5. package/out/apiResponseIntellisenseCache.js +394 -0
  6. package/out/assertionRunner.js +567 -0
  7. package/out/cacheDir.js +136 -0
  8. package/out/chatParticipant.js +763 -0
  9. package/out/cli/colors.js +127 -0
  10. package/out/cli/formatters/assertion.js +102 -0
  11. package/out/cli/formatters/index.js +23 -0
  12. package/out/cli/formatters/response.js +106 -0
  13. package/out/cli/formatters/summary.js +246 -0
  14. package/out/cli/redaction.js +237 -0
  15. package/out/cli/reporters/html.js +689 -0
  16. package/out/cli/reporters/index.js +22 -0
  17. package/out/cli/reporters/junit.js +226 -0
  18. package/out/codeLensProvider.js +351 -0
  19. package/out/compareContentProvider.js +85 -0
  20. package/out/completionProvider.js +3739 -0
  21. package/out/contractAssertionSummary.js +225 -0
  22. package/out/contractDecorationProvider.js +243 -0
  23. package/out/coverageCalculator.js +879 -0
  24. package/out/coveragePanel.js +597 -0
  25. package/out/debug/breakpointResolver.js +84 -0
  26. package/out/debug/breakpoints.js +52 -0
  27. package/out/debug/nornDebugAdapter.js +166 -0
  28. package/out/debug/nornDebugSession.js +613 -0
  29. package/out/debug/sequenceLocationIndex.js +77 -0
  30. package/out/debug/types.js +3 -0
  31. package/out/deepClone.js +21 -0
  32. package/out/diagnosticProvider.js +2554 -0
  33. package/out/environmentParser.js +736 -0
  34. package/out/environmentProvider.js +544 -0
  35. package/out/environmentTemplates.js +146 -0
  36. package/out/errors/formatError.js +113 -0
  37. package/out/errors/nornError.js +29 -0
  38. package/out/formUrlEncoded.js +89 -0
  39. package/out/httpClient.js +348 -0
  40. package/out/httpRuntimeOptions.js +16 -0
  41. package/out/importErrors.js +31 -0
  42. package/out/inlayHintResolver.js +70 -0
  43. package/out/jsonFileReader.js +323 -0
  44. package/out/mcpClient.js +193 -0
  45. package/out/mcpConfig.js +184 -0
  46. package/out/mcpToolIntellisenseCache.js +96 -0
  47. package/out/mcpToolSchema.js +50 -0
  48. package/out/nornConfig.js +132 -0
  49. package/out/nornHoverProvider.js +124 -0
  50. package/out/nornInlayHintsProvider.js +191 -0
  51. package/out/nornPrompt.js +755 -0
  52. package/out/nornSqlParser.js +286 -0
  53. package/out/nornapiHoverProvider.js +135 -0
  54. package/out/nornapiInlayHintsProvider.js +94 -0
  55. package/out/nornapiParser.js +324 -0
  56. package/out/nornenvCodeActionProvider.js +101 -0
  57. package/out/nornenvDecorationProvider.js +239 -0
  58. package/out/nornenvFoldingProvider.js +63 -0
  59. package/out/nornenvHoverProvider.js +114 -0
  60. package/out/nornenvInlayHintsProvider.js +99 -0
  61. package/out/nornenvLanguageModel.js +187 -0
  62. package/out/nornenvRegionRefactor.js +267 -0
  63. package/out/nornsqlHoverProvider.js +95 -0
  64. package/out/nornsqlInlayHintsProvider.js +114 -0
  65. package/out/parser.js +839 -0
  66. package/out/pathAccess.js +28 -0
  67. package/out/postmanImportPanel.js +732 -0
  68. package/out/postmanImportPlanner.js +1155 -0
  69. package/out/postmanImportSidebarView.js +532 -0
  70. package/out/quotedString.js +35 -0
  71. package/out/requestPreparation.js +179 -0
  72. package/out/requestValidation.js +146 -0
  73. package/out/responsePanel.js +7754 -0
  74. package/out/schemaGenerator.js +562 -0
  75. package/out/scriptRunner.js +419 -0
  76. package/out/secrets/cliSecrets.js +415 -0
  77. package/out/secrets/crypto.js +105 -0
  78. package/out/secrets/envFileSecrets.js +177 -0
  79. package/out/secrets/keyStore.js +259 -0
  80. package/out/sequenceDeclaration.js +15 -0
  81. package/out/sequenceRunner.js +3590 -0
  82. package/out/sqlAdapterRunner.js +122 -0
  83. package/out/sqlBuiltInAdapters.js +604 -0
  84. package/out/sqlConfig.js +184 -0
  85. package/out/starterCatalog.js +554 -0
  86. package/out/stringUtils.js +25 -0
  87. package/out/swaggerBodyIntellisenseCache.js +114 -0
  88. package/out/swaggerParser.js +464 -0
  89. package/out/testProvider.js +767 -0
  90. package/out/theoryCaseLoader.js +113 -0
  91. package/out/validationCache.js +211 -0
  92. package/package.json +6 -1
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NornenvFoldingProvider = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const nornenvLanguageModel_1 = require("./nornenvLanguageModel");
39
+ function findLastNonEmptyLine(document, startLine, candidateEndLine) {
40
+ let endLine = candidateEndLine;
41
+ while (endLine > startLine && document.lineAt(endLine).text.trim() === '') {
42
+ endLine--;
43
+ }
44
+ return endLine;
45
+ }
46
+ class NornenvFoldingProvider {
47
+ provideFoldingRanges(document) {
48
+ const model = (0, nornenvLanguageModel_1.parseNornenvDocumentModel)(document.getText());
49
+ const ranges = [];
50
+ for (let index = 0; index < model.sections.length; index++) {
51
+ const section = model.sections[index];
52
+ const nextSection = model.sections[index + 1];
53
+ const candidateEndLine = nextSection ? nextSection.lineNumber - 1 : document.lineCount - 1;
54
+ const endLine = findLastNonEmptyLine(document, section.lineNumber, candidateEndLine);
55
+ if (endLine > section.lineNumber) {
56
+ ranges.push(new vscode.FoldingRange(section.lineNumber, endLine, vscode.FoldingRangeKind.Region));
57
+ }
58
+ }
59
+ return ranges;
60
+ }
61
+ }
62
+ exports.NornenvFoldingProvider = NornenvFoldingProvider;
63
+ //# sourceMappingURL=nornenvFoldingProvider.js.map
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NornenvHoverProvider = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const environmentParser_1 = require("./environmentParser");
39
+ const environmentProvider_1 = require("./environmentProvider");
40
+ const nornenvLanguageModel_1 = require("./nornenvLanguageModel");
41
+ function buildSelfDeclarationDetail(name, value, sectionKind, sectionName) {
42
+ if (!sectionKind || !sectionName) {
43
+ return {
44
+ name,
45
+ value,
46
+ sourceKind: 'common',
47
+ inherited: false
48
+ };
49
+ }
50
+ return {
51
+ name,
52
+ value,
53
+ sourceKind: sectionKind,
54
+ sourceName: sectionName,
55
+ inherited: false
56
+ };
57
+ }
58
+ class NornenvHoverProvider {
59
+ provideHover(document, position) {
60
+ try {
61
+ const text = document.getText();
62
+ const model = (0, nornenvLanguageModel_1.parseNornenvDocumentModel)(text);
63
+ const lineText = document.lineAt(position.line).text;
64
+ const reference = (0, nornenvLanguageModel_1.getNornenvReferenceAtPosition)(lineText, position.character);
65
+ const declarationAtCursor = (0, nornenvLanguageModel_1.getNornenvDeclarationAtPosition)(model, position.line, position.character);
66
+ const variableName = reference?.name ?? declarationAtCursor?.name;
67
+ if (!variableName) {
68
+ return undefined;
69
+ }
70
+ const filePath = document.uri.scheme === 'file' ? document.uri.fsPath : undefined;
71
+ const config = (0, nornenvLanguageModel_1.loadResolvedNornenvConfigFromText)(text, filePath);
72
+ const activeEnvironment = (0, environmentProvider_1.getActiveEnvironment)(filePath);
73
+ const activeDetails = activeEnvironment
74
+ ? (0, environmentParser_1.resolveEffectiveEnvVariableDetails)(activeEnvironment, config)
75
+ : new Map();
76
+ const containingSection = (0, nornenvLanguageModel_1.getNornenvSectionAtLine)(model, position.line);
77
+ const sectionInheritedDetails = containingSection
78
+ ? (0, environmentParser_1.resolveInheritedVariableDetails)(containingSection.name, config)
79
+ : new Map();
80
+ let detail = activeDetails.get(variableName) ?? sectionInheritedDetails.get(variableName);
81
+ if (!detail && declarationAtCursor) {
82
+ detail = buildSelfDeclarationDetail(declarationAtCursor.name, declarationAtCursor.value, declarationAtCursor.sectionKind, declarationAtCursor.sectionName);
83
+ }
84
+ if (!detail) {
85
+ const markdown = new vscode.MarkdownString(`\`${variableName}\` is not resolved in the active .nornenv context.`);
86
+ return new vscode.Hover(markdown, new vscode.Range(position, position));
87
+ }
88
+ const secret = config.secretNames.has(variableName);
89
+ const sourceDeclaration = (0, nornenvLanguageModel_1.findNornenvSourceDeclaration)(model, detail);
90
+ const sourceLabel = (0, nornenvLanguageModel_1.formatNornenvSourceLabel)(detail);
91
+ const lines = [
92
+ `**\`${variableName}\`**`,
93
+ `Defined in \`${sourceLabel}\`${sourceDeclaration ? ` (line ${sourceDeclaration.lineNumber + 1})` : ''}.`
94
+ ];
95
+ if (activeEnvironment) {
96
+ lines.push(`Active env \`${activeEnvironment}\` resolves to \`${(0, nornenvLanguageModel_1.formatNornenvDisplayValue)(detail.value, secret)}\`.`);
97
+ }
98
+ else {
99
+ lines.push(`Value: \`${(0, nornenvLanguageModel_1.formatNornenvDisplayValue)(detail.value, secret)}\`.`);
100
+ }
101
+ if (detail.inherited && activeEnvironment) {
102
+ lines.push(`Inherited by \`env:${activeEnvironment}\`.`);
103
+ }
104
+ const markdown = new vscode.MarkdownString(lines.join('\n\n'));
105
+ markdown.isTrusted = false;
106
+ return new vscode.Hover(markdown);
107
+ }
108
+ catch {
109
+ return undefined;
110
+ }
111
+ }
112
+ }
113
+ exports.NornenvHoverProvider = NornenvHoverProvider;
114
+ //# sourceMappingURL=nornenvHoverProvider.js.map
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NornenvInlayHintsProvider = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const environmentParser_1 = require("./environmentParser");
39
+ const environmentTemplates_1 = require("./environmentTemplates");
40
+ const environmentProvider_1 = require("./environmentProvider");
41
+ const nornenvLanguageModel_1 = require("./nornenvLanguageModel");
42
+ const inlayHintResolver_1 = require("./inlayHintResolver");
43
+ const TEMPLATE_TOKEN_REGEX = /\{\{([^{}]+)\}\}/g;
44
+ class NornenvInlayHintsProvider {
45
+ emitter = new vscode.EventEmitter();
46
+ environmentSubscription;
47
+ onDidChangeInlayHints = this.emitter.event;
48
+ constructor() {
49
+ this.environmentSubscription = (0, environmentProvider_1.onDidChangeActiveEnvironment)(() => {
50
+ this.emitter.fire();
51
+ });
52
+ }
53
+ provideInlayHints(document, range) {
54
+ const hints = [];
55
+ try {
56
+ const filePath = document.uri.scheme === 'file' ? document.uri.fsPath : undefined;
57
+ const config = (0, nornenvLanguageModel_1.loadResolvedNornenvConfigFromText)(document.getText(), filePath);
58
+ const activeEnvironment = (0, environmentProvider_1.getActiveEnvironment)(filePath);
59
+ const variables = activeEnvironment
60
+ ? (0, environmentParser_1.resolveEffectiveEnvVariables)(activeEnvironment, config)
61
+ : { ...config.common };
62
+ const activeEnv = activeEnvironment
63
+ ? config.environments.find(env => env.name === activeEnvironment)
64
+ : undefined;
65
+ (0, environmentTemplates_1.attachEnvironmentTemplateScopes)(variables, config.common, activeEnv?.variables);
66
+ const model = (0, nornenvLanguageModel_1.parseNornenvDocumentModel)(document.getText());
67
+ for (const declaration of model.declarations) {
68
+ if (declaration.lineNumber < range.start.line || declaration.lineNumber > range.end.line) {
69
+ continue;
70
+ }
71
+ TEMPLATE_TOKEN_REGEX.lastIndex = 0;
72
+ for (const match of declaration.value.matchAll(TEMPLATE_TOKEN_REGEX)) {
73
+ const resolved = (0, inlayHintResolver_1.resolveInlayValueLabel)(match[1], variables, config.secretNames);
74
+ if (!resolved) {
75
+ // Unresolvable (unknown / response ref / cycle) — diagnostics handle the squiggle.
76
+ // We stay quiet inline to avoid clutter.
77
+ continue;
78
+ }
79
+ const tokenEnd = declaration.valueStart + (match.index ?? 0) + match[0].length;
80
+ const hint = new vscode.InlayHint(new vscode.Position(declaration.lineNumber, tokenEnd), resolved.label, vscode.InlayHintKind.Parameter);
81
+ hint.tooltip = resolved.secret
82
+ ? `'${match[1].trim()}' resolves from a secret value.`
83
+ : `'${match[1].trim()}' resolves to '${resolved.value}'.`;
84
+ hints.push(hint);
85
+ }
86
+ }
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ return hints;
92
+ }
93
+ dispose() {
94
+ this.environmentSubscription.dispose();
95
+ this.emitter.dispose();
96
+ }
97
+ }
98
+ exports.NornenvInlayHintsProvider = NornenvInlayHintsProvider;
99
+ //# sourceMappingURL=nornenvInlayHintsProvider.js.map
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseNornenvDocumentModel = parseNornenvDocumentModel;
37
+ exports.loadResolvedNornenvConfigFromText = loadResolvedNornenvConfigFromText;
38
+ exports.getNornenvSectionAtLine = getNornenvSectionAtLine;
39
+ exports.getNornenvReferenceAtPosition = getNornenvReferenceAtPosition;
40
+ exports.getNornenvDeclarationAtPosition = getNornenvDeclarationAtPosition;
41
+ exports.findNornenvSourceDeclaration = findNornenvSourceDeclaration;
42
+ exports.formatNornenvSourceLabel = formatNornenvSourceLabel;
43
+ exports.formatNornenvDisplayValue = formatNornenvDisplayValue;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const environmentParser_1 = require("./environmentParser");
47
+ const SECTION_HEADER_REGEX = /^\s*\[(env|template):([a-zA-Z_][a-zA-Z0-9_-]*)(?:\s+extends\s+([^\]]+))?\]\s*$/i;
48
+ const TEMPLATE_TOKEN_REGEX = /\{\{([^{}]+)\}\}/g;
49
+ function parseParentList(clause) {
50
+ if (!clause) {
51
+ return [];
52
+ }
53
+ return clause
54
+ .split(',')
55
+ .map(parent => parent.trim())
56
+ .filter(parent => /^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(parent));
57
+ }
58
+ function parseTemplateReference(rawReference) {
59
+ return rawReference.trim().match(/^(?:\$env\.)?([a-zA-Z_][a-zA-Z0-9_]*)$/)?.[1];
60
+ }
61
+ function parseNornenvDocumentModel(text) {
62
+ const sections = [];
63
+ const declarations = [];
64
+ const lines = text.split('\n');
65
+ let currentSection;
66
+ for (let lineNumber = 0; lineNumber < lines.length; lineNumber++) {
67
+ const line = lines[lineNumber];
68
+ const sectionMatch = line.trim().match(SECTION_HEADER_REGEX);
69
+ if (sectionMatch) {
70
+ currentSection = {
71
+ kind: sectionMatch[1].toLowerCase(),
72
+ name: sectionMatch[2],
73
+ parents: parseParentList(sectionMatch[3]),
74
+ lineNumber
75
+ };
76
+ sections.push(currentSection);
77
+ continue;
78
+ }
79
+ const connectionMatch = line.match(/^(\s*)(secret\s+)?connectionString\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$/i);
80
+ if (connectionMatch) {
81
+ const displayName = connectionMatch[3];
82
+ const name = `${displayName}_connectionString`;
83
+ const nameStart = line.indexOf(displayName);
84
+ const value = connectionMatch[4];
85
+ const valueStart = line.length - value.length;
86
+ declarations.push({
87
+ name,
88
+ displayName,
89
+ value,
90
+ secret: Boolean(connectionMatch[2]),
91
+ sectionKind: currentSection?.kind,
92
+ sectionName: currentSection?.name,
93
+ lineNumber,
94
+ nameStart,
95
+ nameEnd: nameStart + displayName.length,
96
+ valueStart,
97
+ valueEnd: line.length
98
+ });
99
+ continue;
100
+ }
101
+ const variableMatch = line.match(/^(\s*)(secret|var)\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$/i);
102
+ if (variableMatch) {
103
+ const name = variableMatch[3];
104
+ const nameStart = line.indexOf(name);
105
+ const value = variableMatch[4];
106
+ const valueStart = line.length - value.length;
107
+ declarations.push({
108
+ name,
109
+ displayName: name,
110
+ value,
111
+ secret: variableMatch[2].toLowerCase() === 'secret',
112
+ sectionKind: currentSection?.kind,
113
+ sectionName: currentSection?.name,
114
+ lineNumber,
115
+ nameStart,
116
+ nameEnd: nameStart + name.length,
117
+ valueStart,
118
+ valueEnd: line.length
119
+ });
120
+ }
121
+ }
122
+ return { sections, declarations };
123
+ }
124
+ function loadResolvedNornenvConfigFromText(text, filePath) {
125
+ const parsed = (0, environmentParser_1.parseEnvFile)(text, filePath);
126
+ if (!filePath) {
127
+ return parsed;
128
+ }
129
+ return (0, environmentParser_1.resolveNornenvImports)(parsed, path.dirname(filePath), filePath, importedPath => fs.readFileSync(importedPath, 'utf-8')).config;
130
+ }
131
+ function getNornenvSectionAtLine(model, lineNumber) {
132
+ let current;
133
+ for (const section of model.sections) {
134
+ if (section.lineNumber > lineNumber) {
135
+ break;
136
+ }
137
+ current = section;
138
+ }
139
+ return current;
140
+ }
141
+ function getNornenvReferenceAtPosition(lineText, character) {
142
+ TEMPLATE_TOKEN_REGEX.lastIndex = 0;
143
+ for (const match of lineText.matchAll(TEMPLATE_TOKEN_REGEX)) {
144
+ const start = match.index ?? 0;
145
+ const end = start + match[0].length;
146
+ if (character < start || character > end) {
147
+ continue;
148
+ }
149
+ const name = parseTemplateReference(match[1]);
150
+ if (!name) {
151
+ return undefined;
152
+ }
153
+ return {
154
+ name,
155
+ raw: match[0],
156
+ start,
157
+ end
158
+ };
159
+ }
160
+ return undefined;
161
+ }
162
+ function getNornenvDeclarationAtPosition(model, lineNumber, character) {
163
+ return model.declarations.find(declaration => declaration.lineNumber === lineNumber &&
164
+ character >= declaration.nameStart &&
165
+ character <= declaration.nameEnd);
166
+ }
167
+ function findNornenvSourceDeclaration(model, detail) {
168
+ return model.declarations.find(declaration => {
169
+ if (declaration.name !== detail.name) {
170
+ return false;
171
+ }
172
+ if (detail.sourceKind === 'common') {
173
+ return !declaration.sectionName;
174
+ }
175
+ return declaration.sectionKind === detail.sourceKind && declaration.sectionName === detail.sourceName;
176
+ });
177
+ }
178
+ function formatNornenvSourceLabel(detail) {
179
+ if (detail.sourceKind === 'common') {
180
+ return 'common';
181
+ }
182
+ return `${detail.sourceKind}:${detail.sourceName ?? ''}`;
183
+ }
184
+ function formatNornenvDisplayValue(value, secret) {
185
+ return secret ? '******** (secret)' : value;
186
+ }
187
+ //# sourceMappingURL=nornenvLanguageModel.js.map