@pasosdejesus/m 0.21.0 → 0.22.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.
- package/dist/m.js +37 -5
- package/dist/m.js.map +1 -1
- package/dist/tasks/context-git.d.ts +27 -0
- package/dist/tasks/context-git.d.ts.map +1 -0
- package/dist/tasks/context-git.js +96 -0
- package/dist/tasks/context-git.js.map +1 -0
- package/dist/tasks/context-ignore.d.ts +18 -0
- package/dist/tasks/context-ignore.d.ts.map +1 -0
- package/dist/tasks/context-ignore.js +63 -0
- package/dist/tasks/context-ignore.js.map +1 -0
- package/dist/tasks/context-profiles.d.ts +42 -0
- package/dist/tasks/context-profiles.d.ts.map +1 -0
- package/dist/tasks/context-profiles.js +295 -0
- package/dist/tasks/context-profiles.js.map +1 -0
- package/dist/tasks/context-render.d.ts +37 -0
- package/dist/tasks/context-render.d.ts.map +1 -0
- package/dist/tasks/context-render.js +162 -0
- package/dist/tasks/context-render.js.map +1 -0
- package/dist/tasks/context-reqs.d.ts +20 -0
- package/dist/tasks/context-reqs.d.ts.map +1 -0
- package/dist/tasks/context-reqs.js +74 -0
- package/dist/tasks/context-reqs.js.map +1 -0
- package/dist/tasks/context-workspaces.d.ts +22 -0
- package/dist/tasks/context-workspaces.d.ts.map +1 -0
- package/dist/tasks/context-workspaces.js +116 -0
- package/dist/tasks/context-workspaces.js.map +1 -0
- package/dist/tasks/context.d.ts +39 -3
- package/dist/tasks/context.d.ts.map +1 -1
- package/dist/tasks/context.js +254 -262
- package/dist/tasks/context.js.map +1 -1
- package/dist/util/cli-parser.d.ts +3 -3
- package/dist/util/cli-parser.d.ts.map +1 -1
- package/dist/util/cli-parser.js +8 -1
- package/dist/util/cli-parser.js.map +1 -1
- package/dist/util/fs-walk.d.ts +11 -0
- package/dist/util/fs-walk.d.ts.map +1 -0
- package/dist/util/fs-walk.js +39 -0
- package/dist/util/fs-walk.js.map +1 -0
- package/dist/util/glob-match.d.ts +8 -0
- package/dist/util/glob-match.d.ts.map +1 -0
- package/dist/util/glob-match.js +79 -0
- package/dist/util/glob-match.js.map +1 -0
- package/package.json +2 -2
- package/src/tasks/README.md +7 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface FlagDef {
|
|
2
|
-
/** 'string' (consumes next arg), 'boolean' (no value),
|
|
3
|
-
type: 'string' | 'boolean' | 'number';
|
|
2
|
+
/** 'string' (consumes next arg), 'boolean' (no value), 'number' (parseInt next arg), or 'array' (repeatable string) */
|
|
3
|
+
type: 'string' | 'boolean' | 'number' | 'array';
|
|
4
4
|
/** Alternate flag name (e.g. -n for --dry-run) */
|
|
5
5
|
alias?: string;
|
|
6
6
|
}
|
|
@@ -14,7 +14,7 @@ export interface FlagDef {
|
|
|
14
14
|
* @returns { options, positional }
|
|
15
15
|
*/
|
|
16
16
|
export declare function parseFlags(argv: string[], flags: Record<string, FlagDef>): {
|
|
17
|
-
options: Record<string, boolean | string | number | undefined>;
|
|
17
|
+
options: Record<string, boolean | string | number | string[] | undefined>;
|
|
18
18
|
positional: string[];
|
|
19
19
|
};
|
|
20
20
|
//# sourceMappingURL=cli-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../src/util/cli-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,
|
|
1
|
+
{"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../src/util/cli-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,uHAAuH;IACvH,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChD,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAsCrG"}
|
package/dist/util/cli-parser.js
CHANGED
|
@@ -31,7 +31,14 @@ export function parseFlags(argv, flags) {
|
|
|
31
31
|
}
|
|
32
32
|
else if (i + 1 < argv.length) {
|
|
33
33
|
i++;
|
|
34
|
-
|
|
34
|
+
if (def.type === 'array') {
|
|
35
|
+
const values = Array.isArray(options[defKey]) ? options[defKey] : [];
|
|
36
|
+
values.push(argv[i]);
|
|
37
|
+
options[defKey] = values;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
options[defKey] = def.type === 'number' ? parseInt(argv[i], 10) : argv[i];
|
|
41
|
+
}
|
|
35
42
|
}
|
|
36
43
|
}
|
|
37
44
|
return { options, positional };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../src/util/cli-parser.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,IAAc,EACd,KAA8B;IAE9B,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../src/util/cli-parser.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,IAAc,EACd,KAA8B;IAE9B,MAAM,OAAO,GAAqE,EAAE,CAAC;IACrF,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,0CAA0C;QAC1C,IAAI,GAAwB,CAAC;QAC7B,IAAI,MAA0B,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,GAAG,GAAG,CAAC,CAAC;gBACR,MAAM,GAAG,CAAC,CAAC;gBACX,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAO,CAAC,GAAG,IAAI,CAAC;QAC1B,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC,EAAE,CAAC;YACJ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,MAAO,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,MAAO,CAAC,GAAG,MAAM,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAO,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface WalkResult {
|
|
2
|
+
files: string[];
|
|
3
|
+
dirs: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface WalkOptions {
|
|
6
|
+
maxDepth?: number;
|
|
7
|
+
ignoreDirs?: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare const WALK_IGNORE_DIRS: string[];
|
|
10
|
+
export declare function walkEntries(root: string, options?: WalkOptions): Promise<WalkResult>;
|
|
11
|
+
//# sourceMappingURL=fs-walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-walk.d.ts","sourceRoot":"","sources":["../../src/util/fs-walk.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6B9F"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readdir } from 'node:fs/promises';
|
|
2
|
+
import { join, posix } from 'node:path';
|
|
3
|
+
export const WALK_IGNORE_DIRS = [
|
|
4
|
+
'node_modules', '.git', 'dist', 'build', 'coverage', '.next', '__pycache__',
|
|
5
|
+
'tmp', 'vendor', '.cache', '.turbo', 'target',
|
|
6
|
+
];
|
|
7
|
+
export async function walkEntries(root, options = {}) {
|
|
8
|
+
const maxDepth = options.maxDepth ?? 3;
|
|
9
|
+
const ignoreDirs = new Set(options.ignoreDirs ?? WALK_IGNORE_DIRS);
|
|
10
|
+
const files = [];
|
|
11
|
+
const dirs = [];
|
|
12
|
+
async function visit(relative, depth) {
|
|
13
|
+
let entries;
|
|
14
|
+
try {
|
|
15
|
+
entries = await readdir(relative ? join(root, relative) : root, { withFileTypes: true });
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const child = relative ? posix.join(relative, entry.name) : entry.name;
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
if (ignoreDirs.has(entry.name))
|
|
24
|
+
continue;
|
|
25
|
+
dirs.push(child);
|
|
26
|
+
if (depth + 1 < maxDepth)
|
|
27
|
+
await visit(child, depth + 1);
|
|
28
|
+
}
|
|
29
|
+
else if (entry.isFile()) {
|
|
30
|
+
files.push(child);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
await visit('', 0);
|
|
35
|
+
files.sort();
|
|
36
|
+
dirs.sort();
|
|
37
|
+
return { files, dirs };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=fs-walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-walk.js","sourceRoot":"","sources":["../../src/util/fs-walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAYxC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa;IAC3E,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;CAC9C,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,UAAuB,EAAE;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,UAAU,KAAK,CAAC,QAAgB,EAAE,KAAa;QAClD,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YACvE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ;oBAAE,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,EAAE,CAAC;IACb,IAAI,CAAC,IAAI,EAAE,CAAC;IACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function normalizeGlobPath(value: string): string;
|
|
2
|
+
export declare function globToRegExp(pattern: string): RegExp;
|
|
3
|
+
export declare function matchesGlob(filePath: string, pattern: string): boolean;
|
|
4
|
+
export declare function matchesAnyGlob(filePath: string, patterns: readonly string[]): boolean;
|
|
5
|
+
export declare function hasGlobChars(pattern: string): boolean;
|
|
6
|
+
export declare function matchesSegmentName(filePath: string, name: string): boolean;
|
|
7
|
+
export declare function matchesPathOrBasename(filePath: string, pattern: string): boolean;
|
|
8
|
+
//# sourceMappingURL=glob-match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-match.d.ts","sourceRoot":"","sources":["../../src/util/glob-match.ts"],"names":[],"mappings":"AA8BA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAepD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAGrF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAWhF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const REGEX_SPECIALS = /[.+^$()|[\]\\]/g;
|
|
2
|
+
function escapeLiteral(text) {
|
|
3
|
+
return text.replace(REGEX_SPECIALS, '\\$&');
|
|
4
|
+
}
|
|
5
|
+
function segmentToRegex(segment) {
|
|
6
|
+
let out = '';
|
|
7
|
+
for (let i = 0; i < segment.length; i++) {
|
|
8
|
+
const ch = segment[i];
|
|
9
|
+
if (ch === '*') {
|
|
10
|
+
out += '[^/]*';
|
|
11
|
+
}
|
|
12
|
+
else if (ch === '?') {
|
|
13
|
+
out += '[^/]';
|
|
14
|
+
}
|
|
15
|
+
else if (ch === '{') {
|
|
16
|
+
const end = segment.indexOf('}', i);
|
|
17
|
+
if (end === -1) {
|
|
18
|
+
out += '\\{';
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const options = segment.slice(i + 1, end).split(',');
|
|
22
|
+
out += '(?:' + options.map(escapeLiteral).join('|') + ')';
|
|
23
|
+
i = end;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
out += escapeLiteral(ch);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
export function normalizeGlobPath(value) {
|
|
33
|
+
return value.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\/+$/, '');
|
|
34
|
+
}
|
|
35
|
+
export function globToRegExp(pattern) {
|
|
36
|
+
const normalized = normalizeGlobPath(pattern);
|
|
37
|
+
const segments = normalized.split('/');
|
|
38
|
+
let source = '';
|
|
39
|
+
for (let i = 0; i < segments.length; i++) {
|
|
40
|
+
const segment = segments[i];
|
|
41
|
+
const isLast = i === segments.length - 1;
|
|
42
|
+
if (segment === '**') {
|
|
43
|
+
source += isLast ? '.*' : '(?:[^/]+/)*';
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
source += segmentToRegex(segment);
|
|
47
|
+
if (!isLast)
|
|
48
|
+
source += '/';
|
|
49
|
+
}
|
|
50
|
+
return new RegExp('^' + source + '$');
|
|
51
|
+
}
|
|
52
|
+
export function matchesGlob(filePath, pattern) {
|
|
53
|
+
return globToRegExp(pattern).test(normalizeGlobPath(filePath));
|
|
54
|
+
}
|
|
55
|
+
export function matchesAnyGlob(filePath, patterns) {
|
|
56
|
+
const target = normalizeGlobPath(filePath);
|
|
57
|
+
return patterns.some((pattern) => globToRegExp(pattern).test(target));
|
|
58
|
+
}
|
|
59
|
+
export function hasGlobChars(pattern) {
|
|
60
|
+
return /[*?{[]/.test(pattern);
|
|
61
|
+
}
|
|
62
|
+
export function matchesSegmentName(filePath, name) {
|
|
63
|
+
const segments = normalizeGlobPath(filePath).split('/');
|
|
64
|
+
return segments.includes(name);
|
|
65
|
+
}
|
|
66
|
+
export function matchesPathOrBasename(filePath, pattern) {
|
|
67
|
+
const target = normalizeGlobPath(filePath);
|
|
68
|
+
if (hasGlobChars(pattern) || pattern.includes('/')) {
|
|
69
|
+
if (globToRegExp(pattern).test(target))
|
|
70
|
+
return true;
|
|
71
|
+
if (!pattern.includes('/')) {
|
|
72
|
+
const base = target.split('/').pop() ?? '';
|
|
73
|
+
return globToRegExp(pattern).test(base);
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return matchesSegmentName(target, pattern) || target === pattern;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=glob-match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-match.js","sourceRoot":"","sources":["../../src/util/glob-match.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pasosdejesus/m",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Motor para crear y gestionar proyectos al estilo Pasos de Jesus.",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "ISC",
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
"picocolors": "^1.1.1"
|
|
130
130
|
},
|
|
131
131
|
"optionalDependencies": {
|
|
132
|
-
"@pasosdejesus/edr": "0.1.
|
|
132
|
+
"@pasosdejesus/edr": "0.1.2",
|
|
133
133
|
"@pasosdejesus/contract-test": "0.1.4"
|
|
134
134
|
},
|
|
135
135
|
"devDependencies": {
|
package/src/tasks/README.md
CHANGED
|
@@ -12,7 +12,13 @@ Each file in this directory exports a `runXxx()` function registered in `../m.ts
|
|
|
12
12
|
|
|
13
13
|
| File | Commands | Purpose |
|
|
14
14
|
|------|----------|---------|
|
|
15
|
-
| `context.ts` | `ai:context` |
|
|
15
|
+
| `context.ts` | `ai:context` | Orchestrates the project context document (schema 1): detection, profiles, filters, budget and output |
|
|
16
|
+
| `context-workspaces.ts` | *(internal)* | Detects project types and workspace roots (`rails`, `nextjs`, `hardhat`, `monorepo`, `node`) |
|
|
17
|
+
| `context-profiles.ts` | *(internal)* | Built-in task profiles plus JSON config loading, merging and validation |
|
|
18
|
+
| `context-ignore.ts` | *(internal)* | Default exclusions, absolute secrets deny list and filter precedence |
|
|
19
|
+
| `context-git.ts` | *(internal)* | Git queries (tracked, untracked, ignored, branch, log, status) and file collection |
|
|
20
|
+
| `context-reqs.ts` | *(internal)* | Parses `REQ/*.md` and keeps only open requirements |
|
|
21
|
+
| `context-render.ts` | *(internal)* | Structure and document rendering with a hard size budget |
|
|
16
22
|
| `create.ts` | `m:create` | Scaffolds new projects from `templates/` via direct recursive copy (replaced Plop.js) |
|
|
17
23
|
| `db.ts` | `db:create`, `db:drop`, `db:super:createuser`, `db:structure:dump`, `db:structure:load`, `db:migrate`, `db:rollback`, `db:mig:make`, `db:seed`, `db:check`, `db:console`, `db:test`, `db:dump`, `db:restore` | PostgreSQL database lifecycle, migration management, schema verification, and backup/restore |
|
|
18
24
|
| `e2e.ts` | `test:e2e` | E2E tests (Puppeteer specs, axios smoke) |
|