@pasosdejesus/m 0.21.1 → 0.22.1

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 (130) hide show
  1. package/dist/base-model/baseline.generated.d.ts +60 -0
  2. package/dist/base-model/baseline.generated.d.ts.map +1 -0
  3. package/dist/base-model/baseline.generated.js +1110 -0
  4. package/dist/base-model/baseline.generated.js.map +1 -0
  5. package/dist/base-model/check.d.ts +6 -0
  6. package/dist/base-model/check.d.ts.map +1 -0
  7. package/dist/base-model/check.js +195 -0
  8. package/dist/base-model/check.js.map +1 -0
  9. package/dist/base-model/generate.d.ts +37 -0
  10. package/dist/base-model/generate.d.ts.map +1 -0
  11. package/dist/base-model/generate.js +184 -0
  12. package/dist/base-model/generate.js.map +1 -0
  13. package/dist/base-model/guidelines.d.ts +13 -0
  14. package/dist/base-model/guidelines.d.ts.map +1 -0
  15. package/dist/base-model/guidelines.js +61 -0
  16. package/dist/base-model/guidelines.js.map +1 -0
  17. package/dist/base-model/index.d.ts +19 -0
  18. package/dist/base-model/index.d.ts.map +1 -0
  19. package/dist/base-model/index.js +22 -0
  20. package/dist/base-model/index.js.map +1 -0
  21. package/dist/base-model/parse-structure.d.ts +4 -0
  22. package/dist/base-model/parse-structure.d.ts.map +1 -0
  23. package/dist/base-model/parse-structure.js +170 -0
  24. package/dist/base-model/parse-structure.js.map +1 -0
  25. package/dist/base-model/queries.d.ts +41 -0
  26. package/dist/base-model/queries.d.ts.map +1 -0
  27. package/dist/base-model/queries.js +157 -0
  28. package/dist/base-model/queries.js.map +1 -0
  29. package/dist/base-model/references/learn-tg.d.ts +16 -0
  30. package/dist/base-model/references/learn-tg.d.ts.map +1 -0
  31. package/dist/base-model/references/learn-tg.js +60 -0
  32. package/dist/base-model/references/learn-tg.js.map +1 -0
  33. package/dist/base-model/types.d.ts +183 -0
  34. package/dist/base-model/types.d.ts.map +1 -0
  35. package/dist/base-model/types.js +10 -0
  36. package/dist/base-model/types.js.map +1 -0
  37. package/dist/base-model/version.d.ts +12 -0
  38. package/dist/base-model/version.d.ts.map +1 -0
  39. package/dist/base-model/version.js +20 -0
  40. package/dist/base-model/version.js.map +1 -0
  41. package/dist/debug/DebugConsole.js +6 -6
  42. package/dist/debug/DebugConsole.js.map +1 -1
  43. package/dist/debug/Logger.js +2 -2
  44. package/dist/debug/Logger.js.map +1 -1
  45. package/dist/e2e/assertions.js +3 -3
  46. package/dist/e2e/assertions.js.map +1 -1
  47. package/dist/e2e/env.js +3 -3
  48. package/dist/e2e/env.js.map +1 -1
  49. package/dist/i18n/common-cli.js +2 -2
  50. package/dist/i18n/common-cli.js.map +1 -1
  51. package/dist/m.js +37 -5
  52. package/dist/m.js.map +1 -1
  53. package/dist/tasks/base-model.d.ts +3 -0
  54. package/dist/tasks/base-model.d.ts.map +1 -0
  55. package/dist/tasks/base-model.js +177 -0
  56. package/dist/tasks/base-model.js.map +1 -0
  57. package/dist/tasks/context-git.d.ts +27 -0
  58. package/dist/tasks/context-git.d.ts.map +1 -0
  59. package/dist/tasks/context-git.js +96 -0
  60. package/dist/tasks/context-git.js.map +1 -0
  61. package/dist/tasks/context-ignore.d.ts +18 -0
  62. package/dist/tasks/context-ignore.d.ts.map +1 -0
  63. package/dist/tasks/context-ignore.js +63 -0
  64. package/dist/tasks/context-ignore.js.map +1 -0
  65. package/dist/tasks/context-profiles.d.ts +42 -0
  66. package/dist/tasks/context-profiles.d.ts.map +1 -0
  67. package/dist/tasks/context-profiles.js +295 -0
  68. package/dist/tasks/context-profiles.js.map +1 -0
  69. package/dist/tasks/context-render.d.ts +37 -0
  70. package/dist/tasks/context-render.d.ts.map +1 -0
  71. package/dist/tasks/context-render.js +162 -0
  72. package/dist/tasks/context-render.js.map +1 -0
  73. package/dist/tasks/context-reqs.d.ts +20 -0
  74. package/dist/tasks/context-reqs.d.ts.map +1 -0
  75. package/dist/tasks/context-reqs.js +75 -0
  76. package/dist/tasks/context-reqs.js.map +1 -0
  77. package/dist/tasks/context-workspaces.d.ts +22 -0
  78. package/dist/tasks/context-workspaces.d.ts.map +1 -0
  79. package/dist/tasks/context-workspaces.js +116 -0
  80. package/dist/tasks/context-workspaces.js.map +1 -0
  81. package/dist/tasks/context.d.ts +39 -3
  82. package/dist/tasks/context.d.ts.map +1 -1
  83. package/dist/tasks/context.js +254 -262
  84. package/dist/tasks/context.js.map +1 -1
  85. package/dist/tasks/db.js +5 -5
  86. package/dist/tasks/db.js.map +1 -1
  87. package/dist/tasks/edit.js +44 -44
  88. package/dist/tasks/edit.js.map +1 -1
  89. package/dist/tasks/engine.js +2 -2
  90. package/dist/tasks/engine.js.map +1 -1
  91. package/dist/tasks/env-diff.js +2 -2
  92. package/dist/tasks/env-diff.js.map +1 -1
  93. package/dist/tasks/glob.js +6 -6
  94. package/dist/tasks/glob.js.map +1 -1
  95. package/dist/tasks/grep.js +9 -9
  96. package/dist/tasks/grep.js.map +1 -1
  97. package/dist/tasks/readfile.js +17 -17
  98. package/dist/tasks/readfile.js.map +1 -1
  99. package/dist/tasks/req.js +17 -17
  100. package/dist/tasks/req.js.map +1 -1
  101. package/dist/tasks/wallet.js +15 -15
  102. package/dist/tasks/wallet.js.map +1 -1
  103. package/dist/tasks/writefile.js +8 -8
  104. package/dist/tasks/writefile.js.map +1 -1
  105. package/dist/templates/AGENTS.md.hbs +2 -2
  106. package/dist/templates/ARCHITECTURE.md.hbs +2 -2
  107. package/dist/templates/CONTRIBUTING.md.hbs +2 -2
  108. package/dist/templates/apps/.env.example.hbs +1 -1
  109. package/dist/templates/apps/hardhat/package.json +1 -1
  110. package/dist/templates/apps/hardhat/scripts/verifyDeployment.ts +10 -10
  111. package/dist/templates/apps/hardhat/sync-abis.mjs +3 -3
  112. package/dist/templates/apps/nextjs/app/page.tsx.hbs +2 -2
  113. package/dist/util/cli-parser.d.ts +3 -3
  114. package/dist/util/cli-parser.d.ts.map +1 -1
  115. package/dist/util/cli-parser.js +8 -1
  116. package/dist/util/cli-parser.js.map +1 -1
  117. package/dist/util/fs-walk.d.ts +11 -0
  118. package/dist/util/fs-walk.d.ts.map +1 -0
  119. package/dist/util/fs-walk.js +39 -0
  120. package/dist/util/fs-walk.js.map +1 -0
  121. package/dist/util/glob-match.d.ts +8 -0
  122. package/dist/util/glob-match.d.ts.map +1 -0
  123. package/dist/util/glob-match.js +79 -0
  124. package/dist/util/glob-match.js.map +1 -0
  125. package/package.json +2 -2
  126. package/src/blockchain/README.md +1 -1
  127. package/src/debug/README.md +1 -1
  128. package/src/e2e/README.md +2 -2
  129. package/src/tasks/README.md +16 -10
  130. package/src/test-utils/README.md +16 -16
@@ -0,0 +1,177 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ import { createHash } from 'node:crypto';
3
+ import { spawnSync } from 'node:child_process';
4
+ import { info, success, warn, problem } from '../util/colors.js';
5
+ import { parseFlags } from '../util/cli-parser.js';
6
+ import { BASE_MODEL_VERSION } from '../base-model/version.js';
7
+ import { parseStructureSql } from '../base-model/parse-structure.js';
8
+ import { buildBaseline, buildInventory, renderGeneratedModule } from '../base-model/generate.js';
9
+ import { LEARN_TG_EXTENSIONS } from '../base-model/references/learn-tg.js';
10
+ import { BASELINE_INVENTORY } from '../base-model/baseline.generated.js';
11
+ const FLAGS = {
12
+ 'from-structure': { type: 'string' },
13
+ 'from-db': { type: 'boolean' },
14
+ 'extensions': { type: 'string' },
15
+ 'out': { type: 'string' },
16
+ 'print': { type: 'boolean' },
17
+ 'kept': { type: 'boolean' },
18
+ };
19
+ function readOptions() {
20
+ const { options } = parseFlags(process.argv.slice(3), FLAGS);
21
+ return {
22
+ fromStructure: options['from-structure'],
23
+ fromDb: Boolean(options['from-db']),
24
+ extensions: options['extensions'],
25
+ out: options['out'],
26
+ print: Boolean(options['print']),
27
+ kept: Boolean(options['kept']),
28
+ };
29
+ }
30
+ function readReference(options) {
31
+ if (options.fromStructure) {
32
+ return { sql: readFileSync(options.fromStructure, 'utf-8'), source: options.fromStructure };
33
+ }
34
+ if (options.fromDb) {
35
+ const database = process.env.PGDATABASE;
36
+ if (!database)
37
+ throw new Error('--from-db needs PGDATABASE (or use --from-structure <file>)');
38
+ const result = spawnSync('pg_dump', ['--schema-only', '--no-owner', '--no-privileges', database], {
39
+ encoding: 'utf-8',
40
+ stdio: ['ignore', 'pipe', 'pipe'],
41
+ });
42
+ if (result.status !== 0)
43
+ throw new Error(`pg_dump failed: ${(result.stderr ?? '').toString().trim()}`);
44
+ return { sql: result.stdout, source: `pg_dump ${database}` };
45
+ }
46
+ throw new Error('Missing reference: use --from-structure <structure.sql> or --from-db');
47
+ }
48
+ function readExtensions(options) {
49
+ if (!options.extensions)
50
+ return { extensions: LEARN_TG_EXTENSIONS, source: 'built-in learn-tg reference' };
51
+ return { extensions: JSON.parse(readFileSync(options.extensions, 'utf-8')), source: options.extensions };
52
+ }
53
+ function keptColumns(inventory, table) {
54
+ return Object.keys(inventory.tables[table]?.columns ?? {});
55
+ }
56
+ function diffInventories(base, other) {
57
+ const diffs = [];
58
+ for (const [table, tableSpec] of Object.entries(base.tables)) {
59
+ const otherTable = other.tables[table];
60
+ if (!otherTable) {
61
+ diffs.push({ table, onlyInBase: Object.keys(tableSpec.columns), onlyInOther: [] });
62
+ continue;
63
+ }
64
+ const baseColumns = Object.keys(tableSpec.columns);
65
+ const otherColumns = Object.keys(otherTable.columns);
66
+ const onlyInBase = baseColumns.filter((column) => !otherColumns.includes(column));
67
+ const onlyInOther = otherColumns.filter((column) => !baseColumns.includes(column));
68
+ const baseConstraints = tableSpec.constraints.map((constraint) => constraint.name);
69
+ const otherConstraints = otherTable.constraints.map((constraint) => constraint.name);
70
+ const missingConstraints = baseConstraints.filter((name) => !otherConstraints.includes(name));
71
+ const extraConstraints = otherConstraints.filter((name) => !baseConstraints.includes(name));
72
+ if (onlyInBase.length > 0 || onlyInOther.length > 0 || missingConstraints.length > 0 || extraConstraints.length > 0) {
73
+ diffs.push({
74
+ table,
75
+ onlyInBase: [...onlyInBase, ...missingConstraints.map((name) => `constraint:${name}`)],
76
+ onlyInOther: [...onlyInOther, ...extraConstraints.map((name) => `constraint:${name}`)],
77
+ });
78
+ }
79
+ }
80
+ return diffs;
81
+ }
82
+ async function runDump() {
83
+ const options = readOptions();
84
+ const say = options.print ? (message) => process.stderr.write(message + '\n') : info;
85
+ const sayWarn = options.print ? (message) => process.stderr.write(message + '\n') : warn;
86
+ const reference = readReference(options);
87
+ const { extensions, source: extensionsSource } = readExtensions(options);
88
+ const sha256 = createHash('sha256').update(reference.sql).digest('hex');
89
+ const parsed = parseStructureSql(reference.sql);
90
+ const baseline = buildBaseline({
91
+ parsed,
92
+ extensions,
93
+ version: BASE_MODEL_VERSION,
94
+ reference: { source: reference.source, sha256 },
95
+ });
96
+ for (const table of Object.keys(BASELINE_INVENTORY.tables)) {
97
+ if (!parsed.tables[table])
98
+ sayWarn(`[WARN] reference has no table "${table}"`);
99
+ }
100
+ for (const entry of extensions.columns) {
101
+ const [table, column] = entry.split('.');
102
+ if (!parsed.tables[table]?.columns.some((candidate) => candidate.name === column)) {
103
+ sayWarn(`[WARN] declared extension not in the reference: ${entry}`);
104
+ }
105
+ }
106
+ say(`Base model ${BASE_MODEL_VERSION} from ${reference.source} (sha256 ${sha256.slice(0, 12)}...)`);
107
+ say(`Extensions: ${extensionsSource} (${extensions.columns.length} columns, ${extensions.constraints.length} constraints)`);
108
+ for (const [table, counts] of Object.entries(baseline.manifest.tables)) {
109
+ say(` ${table}: ${counts.columns} base columns, ${counts.constraints} constraints, ${counts.extensions} extensions`);
110
+ }
111
+ if (options.kept) {
112
+ say('Base columns kept per table (review that none belongs to a consumer):');
113
+ for (const table of Object.keys(baseline.inventory.tables)) {
114
+ say(` ${table}: ${keptColumns(baseline.inventory, table).join(', ')}`);
115
+ }
116
+ }
117
+ if (options.print) {
118
+ process.stdout.write(baseline.sql);
119
+ return;
120
+ }
121
+ const out = options.out ?? 'packages/m/src/base-model/baseline.generated.ts';
122
+ writeFileSync(out, renderGeneratedModule(baseline), 'utf-8');
123
+ success(`[OK] wrote ${out}`);
124
+ }
125
+ async function runVerify() {
126
+ const options = readOptions();
127
+ const reference = readReference(options);
128
+ const { extensions } = readExtensions(options);
129
+ const parsed = parseStructureSql(reference.sql);
130
+ const derived = buildInventory(parsed, { parsed, extensions, version: BASE_MODEL_VERSION });
131
+ const diffs = diffInventories(BASELINE_INVENTORY, derived);
132
+ const missingExtensions = extensions.columns.filter((entry) => {
133
+ const [table, column] = entry.split('.');
134
+ return !parsed.tables[table]?.columns.some((candidate) => candidate.name === column);
135
+ });
136
+ info(`Verifying shipped base model ${BASE_MODEL_VERSION} against ${reference.source}`);
137
+ info(` base tables: ${Object.keys(BASELINE_INVENTORY.tables).length}, derived from reference: ${Object.keys(derived.tables).length}`);
138
+ info(` declared extensions: ${extensions.columns.length} columns, ${extensions.constraints.length} constraints`);
139
+ for (const entry of missingExtensions) {
140
+ problem(`[FAIL] declared extension is not in the reference: ${entry}`);
141
+ }
142
+ for (const diff of diffs) {
143
+ if (diff.onlyInBase.length > 0)
144
+ warn(`[WARN] ${diff.table}: only in the shipped baseline: ${diff.onlyInBase.join(', ')}`);
145
+ if (diff.onlyInOther.length > 0)
146
+ warn(`[WARN] ${diff.table}: only in the reference (undedared or stale): ${diff.onlyInOther.join(', ')}`);
147
+ }
148
+ if (diffs.length > 0 || missingExtensions.length > 0) {
149
+ process.exitCode = 1;
150
+ problem('[FAIL] the shipped baseline is not consistent with the reference and the declared extensions');
151
+ return;
152
+ }
153
+ success('[OK] shipped baseline matches the reference minus the declared extensions');
154
+ info('Base columns classified as base (review them when the reference changes):');
155
+ for (const table of Object.keys(BASELINE_INVENTORY.tables)) {
156
+ info(` ${table}: ${keptColumns(BASELINE_INVENTORY, table).join(', ')}`);
157
+ }
158
+ }
159
+ export async function runBaseModelDump() {
160
+ try {
161
+ await runDump();
162
+ }
163
+ catch (error) {
164
+ problem(error instanceof Error ? error.message : String(error));
165
+ process.exitCode = 1;
166
+ }
167
+ }
168
+ export async function runBaseModelVerify() {
169
+ try {
170
+ await runVerify();
171
+ }
172
+ catch (error) {
173
+ problem(error instanceof Error ? error.message : String(error));
174
+ process.exitCode = 1;
175
+ }
176
+ }
177
+ //# sourceMappingURL=base-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-model.js","sourceRoot":"","sources":["../../src/tasks/base-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type FilterOptions } from './context-ignore.js';
2
+ export interface GitResult {
3
+ status: number;
4
+ stdout: string;
5
+ }
6
+ export declare function gitRootOf(cwd: string): string | null;
7
+ export declare function gitBranch(repoRoot: string): string;
8
+ export declare function gitRemoteUrl(repoRoot: string): string;
9
+ export declare function gitTrackedFiles(repoRoot: string, branch?: string): string[];
10
+ export declare function gitUntrackedFiles(repoRoot: string): string[];
11
+ export declare function gitIgnoredPaths(repoRoot: string, paths: string[]): Set<string>;
12
+ export declare function isUnderIgnored(target: string, ignored: Set<string>): boolean;
13
+ export declare function gitLog(repoRoot: string, limit?: number, options?: {
14
+ authors?: boolean;
15
+ }): string;
16
+ export declare function gitStatusShort(repoRoot: string): string;
17
+ export declare function gitDiffStat(repoRoot: string): string;
18
+ export interface CollectOptions {
19
+ repoRoot: string;
20
+ branch?: string;
21
+ untracked?: boolean;
22
+ outputFile?: string;
23
+ filters: FilterOptions;
24
+ profileMatch?: (filePath: string) => boolean;
25
+ }
26
+ export declare function collectFiles(options: CollectOptions): string[];
27
+ //# sourceMappingURL=context-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-git.d.ts","sourceRoot":"","sources":["../../src/tasks/context-git.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI5D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAc9E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAO5E;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAM/F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CAe9D"}
@@ -0,0 +1,96 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { isPathIncluded } from './context-ignore.js';
3
+ import { normalizeGlobPath } from '../util/glob-match.js';
4
+ function git(repoRoot, args) {
5
+ const result = spawnSync('git', args, { cwd: repoRoot, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'] });
6
+ return { status: result.status ?? 1, stdout: (result.stdout ?? '').toString() };
7
+ }
8
+ export function gitRootOf(cwd) {
9
+ const result = git(cwd, ['rev-parse', '--show-toplevel']);
10
+ return result.status === 0 && result.stdout.trim() ? result.stdout.trim() : null;
11
+ }
12
+ export function gitBranch(repoRoot) {
13
+ const result = git(repoRoot, ['branch', '--show-current']);
14
+ return result.status === 0 && result.stdout.trim() ? result.stdout.trim() : 'unknown';
15
+ }
16
+ export function gitRemoteUrl(repoRoot) {
17
+ const result = git(repoRoot, ['config', '--get', 'remote.origin.url']);
18
+ if (result.status !== 0 || !result.stdout.trim())
19
+ return 'local';
20
+ return result.stdout.trim().replace(/\/\/[^@]*@/, '//');
21
+ }
22
+ export function gitTrackedFiles(repoRoot, branch) {
23
+ const ref = branch || gitBranch(repoRoot) || 'HEAD';
24
+ const result = git(repoRoot, ['ls-tree', '-r', '--name-only', ref]);
25
+ if (result.status !== 0)
26
+ return [];
27
+ return result.stdout.split('\n').map((line) => line.trim()).filter(Boolean);
28
+ }
29
+ export function gitUntrackedFiles(repoRoot) {
30
+ const result = git(repoRoot, ['ls-files', '--others', '--exclude-standard']);
31
+ if (result.status !== 0)
32
+ return [];
33
+ return result.stdout.split('\n').map((line) => line.trim()).filter(Boolean);
34
+ }
35
+ export function gitIgnoredPaths(repoRoot, paths) {
36
+ const ignored = new Set();
37
+ if (paths.length === 0)
38
+ return ignored;
39
+ const result = spawnSync('git', ['check-ignore', '--no-index', '--stdin'], {
40
+ cwd: repoRoot,
41
+ encoding: 'utf-8',
42
+ input: paths.join('\n') + '\n',
43
+ stdio: ['pipe', 'pipe', 'pipe'],
44
+ });
45
+ for (const line of (result.stdout ?? '').toString().split('\n')) {
46
+ const candidate = line.trim();
47
+ if (candidate)
48
+ ignored.add(candidate);
49
+ }
50
+ return ignored;
51
+ }
52
+ export function isUnderIgnored(target, ignored) {
53
+ if (ignored.size === 0)
54
+ return false;
55
+ const segments = normalizeGlobPath(target).split('/');
56
+ for (let i = 1; i <= segments.length; i++) {
57
+ if (ignored.has(segments.slice(0, i).join('/')))
58
+ return true;
59
+ }
60
+ return false;
61
+ }
62
+ export function gitLog(repoRoot, limit = 5, options = {}) {
63
+ const args = options.authors
64
+ ? ['log', `-${limit}`, '--format=%h %ad %an <%ae> %s', '--date=short']
65
+ : ['log', `-${limit}`, '--oneline'];
66
+ const result = git(repoRoot, args);
67
+ return result.status === 0 ? result.stdout.trim() : 'git log not available';
68
+ }
69
+ export function gitStatusShort(repoRoot) {
70
+ const result = git(repoRoot, ['status', '--short']);
71
+ return result.status === 0 ? result.stdout.trim() : '';
72
+ }
73
+ export function gitDiffStat(repoRoot) {
74
+ const result = git(repoRoot, ['diff', '--stat']);
75
+ return result.status === 0 ? result.stdout.trim() : '';
76
+ }
77
+ export function collectFiles(options) {
78
+ const candidates = new Set(gitTrackedFiles(options.repoRoot, options.branch));
79
+ if (options.untracked) {
80
+ for (const file of gitUntrackedFiles(options.repoRoot))
81
+ candidates.add(file);
82
+ }
83
+ const self = options.outputFile ? normalizeGlobPath(options.outputFile) : undefined;
84
+ const files = [];
85
+ for (const file of [...candidates].map(normalizeGlobPath).sort()) {
86
+ if (self && file === self)
87
+ continue;
88
+ if (file.startsWith('.git/'))
89
+ continue;
90
+ if (!isPathIncluded(file, options.filters, options.profileMatch))
91
+ continue;
92
+ files.push(file);
93
+ }
94
+ return files;
95
+ }
96
+ //# sourceMappingURL=context-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-git.js","sourceRoot":"","sources":["../../src/tasks/context-git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const ALWAYS_SKIP_DIRS: string[];
2
+ export declare const DEFAULT_EXCLUDES: string[];
3
+ export declare const DENY_PATTERNS: string[];
4
+ export interface FilterOptions {
5
+ include: string[];
6
+ exclude: string[];
7
+ ignoreFile: string[];
8
+ }
9
+ export type FilterDecision = 'deny' | 'exclude' | 'skip-dir' | 'include' | 'ignore' | 'default-exclude' | 'pass';
10
+ export declare function isDenied(filePath: string): boolean;
11
+ export declare function isAlwaysSkipped(filePath: string): boolean;
12
+ export declare function isDefaultExcluded(filePath: string): boolean;
13
+ export declare function matchesAnyPathOrBasename(filePath: string, patterns: readonly string[]): boolean;
14
+ export declare function loadIgnoreFile(filePath: string): string[];
15
+ export declare function decidePath(filePath: string, options: FilterOptions): FilterDecision;
16
+ export declare function isPathIncluded(filePath: string, options: FilterOptions, profileMatch?: (filePath: string) => boolean): boolean;
17
+ export declare function describeDenyList(): string;
18
+ //# sourceMappingURL=context-ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ignore.d.ts","sourceRoot":"","sources":["../../src/tasks/context-ignore.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,UAAmB,CAAC;AAEjD,eAAO,MAAM,gBAAgB,UAG5B,CAAC;AAEF,eAAO,MAAM,aAAa,UAKzB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,UAAU,GACV,SAAS,GACT,QAAQ,GACR,iBAAiB,GACjB,MAAM,CAAC;AAEX,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE/F;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAQnF;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,EACtB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAC3C,OAAO,CAMT;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
@@ -0,0 +1,63 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { matchesPathOrBasename } from '../util/glob-match.js';
3
+ import { WALK_IGNORE_DIRS } from '../util/fs-walk.js';
4
+ export const ALWAYS_SKIP_DIRS = WALK_IGNORE_DIRS;
5
+ export const DEFAULT_EXCLUDES = [
6
+ 'templates', 'tests',
7
+ '*.lock', '*.map', '*.min.js', '*.log', '*.tmp', '.DS_Store',
8
+ ];
9
+ export const DENY_PATTERNS = [
10
+ '.env', '.env.*', '**/.env', '**/.env.*',
11
+ '*.pem', '*.key', '*.p12', 'id_rsa*',
12
+ 'config/master.key', 'config/credentials.yml.enc',
13
+ '**/wallets/**', '**/.m/**', '.git/**', '**/.git/**',
14
+ ];
15
+ export function isDenied(filePath) {
16
+ return DENY_PATTERNS.some((pattern) => matchesPathOrBasename(filePath, pattern));
17
+ }
18
+ export function isAlwaysSkipped(filePath) {
19
+ return ALWAYS_SKIP_DIRS.some((name) => matchesPathOrBasename(filePath, name));
20
+ }
21
+ export function isDefaultExcluded(filePath) {
22
+ return DEFAULT_EXCLUDES.some((pattern) => matchesPathOrBasename(filePath, pattern));
23
+ }
24
+ export function matchesAnyPathOrBasename(filePath, patterns) {
25
+ return patterns.some((pattern) => matchesPathOrBasename(filePath, pattern));
26
+ }
27
+ export function loadIgnoreFile(filePath) {
28
+ if (!existsSync(filePath))
29
+ return [];
30
+ return readFileSync(filePath, 'utf-8')
31
+ .split('\n')
32
+ .map((line) => line.trim())
33
+ .filter((line) => line && !line.startsWith('#'));
34
+ }
35
+ export function decidePath(filePath, options) {
36
+ if (isDenied(filePath))
37
+ return 'deny';
38
+ if (isAlwaysSkipped(filePath))
39
+ return 'skip-dir';
40
+ if (matchesAnyPathOrBasename(filePath, options.exclude))
41
+ return 'exclude';
42
+ if (matchesAnyPathOrBasename(filePath, options.include))
43
+ return 'include';
44
+ if (matchesAnyPathOrBasename(filePath, options.ignoreFile))
45
+ return 'ignore';
46
+ if (isDefaultExcluded(filePath))
47
+ return 'default-exclude';
48
+ return 'pass';
49
+ }
50
+ export function isPathIncluded(filePath, options, profileMatch) {
51
+ const decision = decidePath(filePath, options);
52
+ if (decision === 'include')
53
+ return true;
54
+ if (decision !== 'pass')
55
+ return false;
56
+ if (profileMatch)
57
+ return profileMatch(filePath);
58
+ return true;
59
+ }
60
+ export function describeDenyList() {
61
+ return DENY_PATTERNS.join(', ');
62
+ }
63
+ //# sourceMappingURL=context-ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-ignore.js","sourceRoot":"","sources":["../../src/tasks/context-ignore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type Workspace } from './context-workspaces.js';
2
+ export interface Profile {
3
+ root?: string;
4
+ description?: string;
5
+ include: string[];
6
+ exclude?: string[];
7
+ optional?: string[];
8
+ extends?: string;
9
+ }
10
+ export interface LoadedProfiles {
11
+ profiles: Record<string, Profile>;
12
+ sources: string[];
13
+ warnings: string[];
14
+ }
15
+ export declare const BUILTIN_PROFILES: Record<string, Profile>;
16
+ export declare function configDir(): string;
17
+ export declare function configPaths(repoRoot: string): string[];
18
+ export declare function validateProfilesConfig(data: unknown, source: string): string[];
19
+ export declare function mergeProfile(base: Profile, extra: Profile): Profile;
20
+ export declare function resolveExtends(profiles: Record<string, Profile>): {
21
+ profiles: Record<string, Profile>;
22
+ warnings: string[];
23
+ };
24
+ export declare function loadProfiles(options?: {
25
+ repoRoot: string;
26
+ configDir?: string;
27
+ }): LoadedProfiles;
28
+ export declare function resolveTask(taskArg: string, workspaces: Workspace[], profiles: Record<string, Profile>): {
29
+ id: string;
30
+ root: string;
31
+ profile: Profile;
32
+ } | {
33
+ error: string;
34
+ };
35
+ export declare function listTasks(workspaces: Workspace[], profiles: Record<string, Profile>): Array<{
36
+ id: string;
37
+ root: string;
38
+ description?: string;
39
+ }>;
40
+ export declare function matchesProfilePath(repoRelativePath: string, workspaceRoot: string, glob: string): boolean;
41
+ export declare function printConfig(loaded: LoadedProfiles, extra?: Record<string, unknown>): string;
42
+ //# sourceMappingURL=context-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-profiles.d.ts","sourceRoot":"","sources":["../../src/tasks/context-profiles.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CA+EpD,CAAC;AAMF,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA+C9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAUnE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAwB3H;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAgC,GAAG,cAAc,CA6B5H;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,EAAE,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAuCpE;AAED,wBAAgB,SAAS,CACvB,UAAU,EAAE,SAAS,EAAE,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa3D;AAED,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAazG;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAY/F"}