logicstamp-context 0.2.5 → 0.2.7
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.
- package/LLM_CONTEXT.md +2 -2
- package/README.md +33 -13
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +11 -1
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +84 -9
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/security.d.ts +38 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +343 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/handlers/securityHandler.d.ts +5 -0
- package/dist/cli/handlers/securityHandler.d.ts.map +1 -0
- package/dist/cli/handlers/securityHandler.js +45 -0
- package/dist/cli/handlers/securityHandler.js.map +1 -0
- package/dist/cli/parser/argumentParser.d.ts.map +1 -1
- package/dist/cli/parser/argumentParser.js +23 -0
- package/dist/cli/parser/argumentParser.js.map +1 -1
- package/dist/cli/parser/helpText.d.ts +2 -0
- package/dist/cli/parser/helpText.d.ts.map +1 -1
- package/dist/cli/parser/helpText.js +453 -348
- package/dist/cli/parser/helpText.js.map +1 -1
- package/dist/cli/stamp.js +55 -1
- package/dist/cli/stamp.js.map +1 -1
- package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -1
- package/dist/core/astParser/extractors/propExtractor.js +16 -4
- package/dist/core/astParser/extractors/propExtractor.js.map +1 -1
- package/dist/core/astParser.d.ts +3 -1
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +109 -0
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/contractBuilder.d.ts.map +1 -1
- package/dist/core/contractBuilder.js +11 -15
- package/dist/core/contractBuilder.js.map +1 -1
- package/dist/core/manifest.d.ts.map +1 -1
- package/dist/core/manifest.js +54 -3
- package/dist/core/manifest.js.map +1 -1
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/core/pack.js +57 -1
- package/dist/core/pack.js.map +1 -1
- package/dist/utils/gitignore.d.ts +30 -2
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +132 -20
- package/dist/utils/gitignore.js.map +1 -1
- package/dist/utils/secretDetector.d.ts +21 -0
- package/dist/utils/secretDetector.d.ts.map +1 -0
- package/dist/utils/secretDetector.js +145 -0
- package/dist/utils/secretDetector.js.map +1 -0
- package/dist/utils/stampignore.d.ts +49 -0
- package/dist/utils/stampignore.d.ts.map +1 -0
- package/dist/utils/stampignore.js +189 -0
- package/dist/utils/stampignore.js.map +1 -0
- package/package.json +1 -1
- package/schema/logicstamp.context.schema.json +26 -1
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for managing .stampignore files
|
|
3
|
+
* Similar to .gitignore, but for LogicStamp context generation
|
|
4
|
+
*/
|
|
5
|
+
import { readFile, writeFile, access, unlink } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { debugError } from './debug.js';
|
|
8
|
+
import { normalizeEntryId } from './fsx.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default .stampignore filename
|
|
11
|
+
*/
|
|
12
|
+
export const STAMPIGNORE_FILENAME = '.stampignore';
|
|
13
|
+
/**
|
|
14
|
+
* Check if .stampignore exists in the given directory
|
|
15
|
+
*/
|
|
16
|
+
export async function stampignoreExists(targetDir) {
|
|
17
|
+
try {
|
|
18
|
+
await access(join(targetDir, STAMPIGNORE_FILENAME));
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Read .stampignore content
|
|
27
|
+
*/
|
|
28
|
+
export async function readStampignore(targetDir) {
|
|
29
|
+
const stampignorePath = join(targetDir, STAMPIGNORE_FILENAME);
|
|
30
|
+
try {
|
|
31
|
+
const content = await readFile(stampignorePath, 'utf-8');
|
|
32
|
+
const config = JSON.parse(content);
|
|
33
|
+
// Validate structure
|
|
34
|
+
if (!config || typeof config !== 'object') {
|
|
35
|
+
debugError('stampignore', 'readStampignore', {
|
|
36
|
+
stampignorePath,
|
|
37
|
+
message: 'Invalid config structure',
|
|
38
|
+
});
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (!Array.isArray(config.ignore)) {
|
|
42
|
+
debugError('stampignore', 'readStampignore', {
|
|
43
|
+
stampignorePath,
|
|
44
|
+
message: 'Config.ignore must be an array',
|
|
45
|
+
});
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return config;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const err = error;
|
|
52
|
+
if (err.code === 'ENOENT') {
|
|
53
|
+
// File doesn't exist - that's fine, return null
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
debugError('stampignore', 'readStampignore', {
|
|
57
|
+
stampignorePath,
|
|
58
|
+
message: err.message,
|
|
59
|
+
code: err.code,
|
|
60
|
+
});
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Write .stampignore content
|
|
66
|
+
*/
|
|
67
|
+
export async function writeStampignore(targetDir, config) {
|
|
68
|
+
const stampignorePath = join(targetDir, STAMPIGNORE_FILENAME);
|
|
69
|
+
try {
|
|
70
|
+
const content = JSON.stringify(config, null, 2);
|
|
71
|
+
await writeFile(stampignorePath, content, 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const err = error;
|
|
75
|
+
debugError('stampignore', 'writeStampignore', {
|
|
76
|
+
stampignorePath,
|
|
77
|
+
targetDir,
|
|
78
|
+
message: err.message,
|
|
79
|
+
code: err.code,
|
|
80
|
+
});
|
|
81
|
+
let userMessage;
|
|
82
|
+
switch (err.code) {
|
|
83
|
+
case 'ENOENT':
|
|
84
|
+
userMessage = `Parent directory not found for: "${stampignorePath}"`;
|
|
85
|
+
break;
|
|
86
|
+
case 'EACCES':
|
|
87
|
+
userMessage = `Permission denied writing to: "${stampignorePath}"`;
|
|
88
|
+
break;
|
|
89
|
+
case 'ENOSPC':
|
|
90
|
+
userMessage = `No space left on device. Cannot write: "${stampignorePath}"`;
|
|
91
|
+
break;
|
|
92
|
+
default:
|
|
93
|
+
userMessage = `Failed to write .stampignore file "${stampignorePath}": ${err.message}`;
|
|
94
|
+
}
|
|
95
|
+
throw new Error(userMessage);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Add paths to .stampignore
|
|
100
|
+
* Creates the file if it doesn't exist
|
|
101
|
+
*/
|
|
102
|
+
export async function addToStampignore(targetDir, pathsToAdd) {
|
|
103
|
+
const exists = await stampignoreExists(targetDir);
|
|
104
|
+
const config = await readStampignore(targetDir);
|
|
105
|
+
const currentIgnore = config?.ignore || [];
|
|
106
|
+
const normalizedCurrent = currentIgnore.map(p => normalizeEntryId(p));
|
|
107
|
+
// Normalize paths to add and filter out duplicates
|
|
108
|
+
const normalizedToAdd = pathsToAdd
|
|
109
|
+
.map(p => normalizeEntryId(p))
|
|
110
|
+
.filter(p => !normalizedCurrent.includes(p));
|
|
111
|
+
if (normalizedToAdd.length === 0) {
|
|
112
|
+
return { added: false, created: false };
|
|
113
|
+
}
|
|
114
|
+
const newConfig = {
|
|
115
|
+
ignore: [...currentIgnore, ...normalizedToAdd],
|
|
116
|
+
};
|
|
117
|
+
await writeStampignore(targetDir, newConfig);
|
|
118
|
+
return { added: true, created: !exists };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check if a file path matches any ignore pattern
|
|
122
|
+
* Supports glob patterns and exact paths
|
|
123
|
+
*/
|
|
124
|
+
export function matchesIgnorePattern(filePath, patterns, projectRoot) {
|
|
125
|
+
const normalizedPath = normalizeEntryId(filePath);
|
|
126
|
+
const normalizedRoot = normalizeEntryId(projectRoot);
|
|
127
|
+
// Make path relative to project root for matching
|
|
128
|
+
let relativePath = normalizedPath;
|
|
129
|
+
if (normalizedPath.startsWith(normalizedRoot)) {
|
|
130
|
+
relativePath = normalizedPath.slice(normalizedRoot.length).replace(/^\//, '');
|
|
131
|
+
}
|
|
132
|
+
for (const pattern of patterns) {
|
|
133
|
+
const normalizedPattern = normalizeEntryId(pattern);
|
|
134
|
+
// Exact match
|
|
135
|
+
if (normalizedPattern === relativePath || normalizedPattern === normalizedPath) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
// Glob pattern matching (simple implementation)
|
|
139
|
+
// Convert glob to regex
|
|
140
|
+
const regexPattern = normalizedPattern
|
|
141
|
+
.replace(/\./g, '\\.')
|
|
142
|
+
.replace(/\*\*/g, '.*')
|
|
143
|
+
.replace(/\*/g, '[^/]*')
|
|
144
|
+
.replace(/\?/g, '.');
|
|
145
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
146
|
+
// Check against relative path
|
|
147
|
+
if (regex.test(relativePath)) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
// Also check against full normalized path
|
|
151
|
+
if (regex.test(normalizedPath)) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Filter files based on .stampignore patterns
|
|
159
|
+
*/
|
|
160
|
+
export function filterIgnoredFiles(files, patterns, projectRoot) {
|
|
161
|
+
if (patterns.length === 0) {
|
|
162
|
+
return files;
|
|
163
|
+
}
|
|
164
|
+
return files.filter(file => !matchesIgnorePattern(file, patterns, projectRoot));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Delete .stampignore file
|
|
168
|
+
*/
|
|
169
|
+
export async function deleteStampignore(targetDir) {
|
|
170
|
+
const stampignorePath = join(targetDir, STAMPIGNORE_FILENAME);
|
|
171
|
+
try {
|
|
172
|
+
await unlink(stampignorePath);
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const err = error;
|
|
177
|
+
if (err.code === 'ENOENT') {
|
|
178
|
+
// File doesn't exist - that's fine, return false
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
debugError('stampignore', 'deleteStampignore', {
|
|
182
|
+
stampignorePath,
|
|
183
|
+
message: err.message,
|
|
184
|
+
code: err.code,
|
|
185
|
+
});
|
|
186
|
+
throw new Error(`Failed to delete .stampignore: ${err.message}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=stampignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stampignore.js","sourceRoot":"","sources":["../../src/utils/stampignore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"source": {
|
|
118
118
|
"type": "string",
|
|
119
119
|
"pattern": "^logicstamp-context@\\d+\\.\\d+\\.\\d+$",
|
|
120
|
-
"description": "Generator identifier with version (e.g., 'logicstamp-context@0.2.
|
|
120
|
+
"description": "Generator identifier with version (e.g., 'logicstamp-context@0.2.7'). Used for compatibility tracking and debugging."
|
|
121
121
|
}
|
|
122
122
|
},
|
|
123
123
|
"additionalProperties": false
|
|
@@ -199,6 +199,31 @@
|
|
|
199
199
|
"$ref": "#/definitions/StyleMetadata",
|
|
200
200
|
"description": "Optional style metadata (only when --include-style is used)"
|
|
201
201
|
},
|
|
202
|
+
"exports": {
|
|
203
|
+
"oneOf": [
|
|
204
|
+
{
|
|
205
|
+
"type": "string",
|
|
206
|
+
"enum": ["default", "named"],
|
|
207
|
+
"description": "Export type: 'default' for default export, 'named' for single named export"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"type": "object",
|
|
211
|
+
"required": ["named"],
|
|
212
|
+
"properties": {
|
|
213
|
+
"named": {
|
|
214
|
+
"type": "array",
|
|
215
|
+
"items": {
|
|
216
|
+
"type": "string"
|
|
217
|
+
},
|
|
218
|
+
"description": "Array of named export names (for multiple named exports)"
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"additionalProperties": false,
|
|
222
|
+
"description": "Multiple named exports with explicit list"
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"description": "Optional export metadata: export type and exported names"
|
|
226
|
+
},
|
|
202
227
|
"semanticHash": {
|
|
203
228
|
"type": "string",
|
|
204
229
|
"pattern": "^uif:[a-f0-9]{24}$",
|