@zigrivers/scaffold 3.5.1 → 3.5.2
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/cli/commands/complete.d.ts.map +1 -1
- package/dist/cli/commands/complete.js +5 -2
- package/dist/cli/commands/complete.js.map +1 -1
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +11 -43
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/reset.d.ts.map +1 -1
- package/dist/cli/commands/reset.js +5 -2
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/rework.d.ts.map +1 -1
- package/dist/cli/commands/rework.js +11 -44
- package/dist/cli/commands/rework.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +24 -58
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/run.test.js +55 -58
- package/dist/cli/commands/run.test.js.map +1 -1
- package/dist/cli/commands/skip.d.ts.map +1 -1
- package/dist/cli/commands/skip.js +5 -2
- package/dist/cli/commands/skip.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +13 -44
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/core/pipeline/context.d.ts +5 -0
- package/dist/core/pipeline/context.d.ts.map +1 -0
- package/dist/core/pipeline/context.js +28 -0
- package/dist/core/pipeline/context.js.map +1 -0
- package/dist/core/pipeline/context.test.d.ts +2 -0
- package/dist/core/pipeline/context.test.d.ts.map +1 -0
- package/dist/core/pipeline/context.test.js +33 -0
- package/dist/core/pipeline/context.test.js.map +1 -0
- package/dist/core/pipeline/resolver.d.ts +6 -0
- package/dist/core/pipeline/resolver.d.ts.map +1 -0
- package/dist/core/pipeline/resolver.js +56 -0
- package/dist/core/pipeline/resolver.js.map +1 -0
- package/dist/core/pipeline/resolver.test.d.ts +2 -0
- package/dist/core/pipeline/resolver.test.d.ts.map +1 -0
- package/dist/core/pipeline/resolver.test.js +67 -0
- package/dist/core/pipeline/resolver.test.js.map +1 -0
- package/dist/core/pipeline/types.d.ts +24 -0
- package/dist/core/pipeline/types.d.ts.map +1 -0
- package/dist/core/pipeline/types.js +2 -0
- package/dist/core/pipeline/types.js.map +1 -0
- package/package.json +1 -1
- package/dist/core/assembly/methodology-resolver.d.ts +0 -11
- package/dist/core/assembly/methodology-resolver.d.ts.map +0 -1
- package/dist/core/assembly/methodology-resolver.js +0 -19
- package/dist/core/assembly/methodology-resolver.js.map +0 -1
- package/dist/core/assembly/methodology-resolver.test.d.ts +0 -2
- package/dist/core/assembly/methodology-resolver.test.d.ts.map +0 -1
- package/dist/core/assembly/methodology-resolver.test.js +0 -87
- package/dist/core/assembly/methodology-resolver.test.js.map +0 -1
- package/dist/utils/eligible.d.ts +0 -9
- package/dist/utils/eligible.d.ts.map +0 -1
- package/dist/utils/eligible.js +0 -50
- package/dist/utils/eligible.js.map +0 -1
|
@@ -3,14 +3,9 @@ import path from 'node:path';
|
|
|
3
3
|
import { findProjectRoot } from '../middleware/project-root.js';
|
|
4
4
|
import { resolveOutputMode } from '../middleware/output-mode.js';
|
|
5
5
|
import { createOutputContext } from '../output/context.js';
|
|
6
|
-
import { loadConfig } from '../../config/loader.js';
|
|
7
6
|
import { StateManager } from '../../state/state-manager.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { loadAllPresets } from '../../core/assembly/preset-loader.js';
|
|
11
|
-
import { resolveOverlayState } from '../../core/assembly/overlay-state-resolver.js';
|
|
12
|
-
import { buildGraph } from '../../core/dependency/graph.js';
|
|
13
|
-
import { computeEligible } from '../../core/dependency/eligibility.js';
|
|
7
|
+
import { loadPipelineContext } from '../../core/pipeline/context.js';
|
|
8
|
+
import { resolvePipeline } from '../../core/pipeline/resolver.js';
|
|
14
9
|
import { PHASES } from '../../types/frontmatter.js';
|
|
15
10
|
/** Check if any pipeline/knowledge source is newer than its generated command. */
|
|
16
11
|
function checkCommandStaleness(projectRoot) {
|
|
@@ -87,43 +82,18 @@ const statusCommand = {
|
|
|
87
82
|
// 2. Resolve output mode and create context
|
|
88
83
|
const outputMode = resolveOutputMode(argv);
|
|
89
84
|
const output = createOutputContext(outputMode);
|
|
90
|
-
// 3.
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
// 4. Load methodology preset and apply project-type overlay
|
|
95
|
-
const methodologyDir = getPackageMethodologyDir(projectRoot);
|
|
96
|
-
const presets = loadAllPresets(methodologyDir, [...metaPrompts.keys()]);
|
|
97
|
-
const configMethodology = config?.methodology ?? 'deep';
|
|
98
|
-
const preset = configMethodology === 'mvp'
|
|
99
|
-
? presets.mvp
|
|
100
|
-
: configMethodology === 'custom'
|
|
101
|
-
? presets.custom ?? presets.deep
|
|
102
|
-
: presets.deep;
|
|
103
|
-
// Apply project-type overlay (e.g., game overlay) if configured
|
|
104
|
-
const overlayState = config
|
|
105
|
-
? resolveOverlayState({
|
|
106
|
-
config,
|
|
107
|
-
methodologyDir,
|
|
108
|
-
metaPrompts,
|
|
109
|
-
presetSteps: preset?.steps ?? {},
|
|
110
|
-
output,
|
|
111
|
-
})
|
|
112
|
-
: { steps: preset?.steps ?? {} };
|
|
113
|
-
const presetSteps = new Map(Object.entries(overlayState.steps));
|
|
114
|
-
const computeEligibleFn = (steps) => {
|
|
115
|
-
const graph = buildGraph([...metaPrompts.values()].map(m => m.frontmatter), presetSteps);
|
|
116
|
-
return computeEligible(graph, steps);
|
|
117
|
-
};
|
|
118
|
-
const stateManager = new StateManager(projectRoot, computeEligibleFn);
|
|
85
|
+
// 3. Load pipeline context and resolve overlay/graph
|
|
86
|
+
const context = loadPipelineContext(projectRoot);
|
|
87
|
+
const pipeline = resolvePipeline(context, { output });
|
|
88
|
+
const stateManager = new StateManager(projectRoot, pipeline.computeEligible);
|
|
119
89
|
// Reconcile state with current pipeline — adds any new steps that were
|
|
120
90
|
// introduced after the project was initialized (e.g., story-tests).
|
|
121
|
-
const pipelineSteps = [...metaPrompts.values()].map(m => ({
|
|
91
|
+
const pipelineSteps = [...context.metaPrompts.values()].map(m => ({
|
|
122
92
|
slug: m.frontmatter.name,
|
|
123
93
|
produces: m.frontmatter.outputs,
|
|
124
94
|
// Steps not in overlay/preset map are disabled. This requires presets to enumerate
|
|
125
95
|
// all known pipeline steps (which they do — see deep.yml/mvp.yml/custom-defaults.yml).
|
|
126
|
-
enabled:
|
|
96
|
+
enabled: pipeline.overlay.steps[m.frontmatter.name]?.enabled ?? false,
|
|
127
97
|
}));
|
|
128
98
|
stateManager.reconcileWithPipeline(pipelineSteps);
|
|
129
99
|
const state = stateManager.loadState();
|
|
@@ -135,14 +105,14 @@ const statusCommand = {
|
|
|
135
105
|
const inProgress = Object.values(steps).filter(s => s.status === 'in_progress').length;
|
|
136
106
|
const total = Object.keys(steps).length;
|
|
137
107
|
const pct = total > 0 ? Math.round((completed + skipped) / total * 100) : 0;
|
|
138
|
-
const methodology = config?.methodology?.preset ?? state.config_methodology;
|
|
108
|
+
const methodology = context.config?.methodology?.preset ?? state.config_methodology;
|
|
139
109
|
const isCompact = argv.compact === true;
|
|
140
110
|
const actionableStatuses = new Set(['pending', 'in_progress']);
|
|
141
111
|
// 6. Check command staleness
|
|
142
112
|
const staleCommandCount = checkCommandStaleness(projectRoot);
|
|
143
113
|
// Build phases array: group meta-prompts by phase with per-phase counts
|
|
144
114
|
const phasesData = PHASES.map(phaseInfo => {
|
|
145
|
-
const phaseSteps = [...metaPrompts.values()]
|
|
115
|
+
const phaseSteps = [...context.metaPrompts.values()]
|
|
146
116
|
.filter(m => m.frontmatter.phase === phaseInfo.slug)
|
|
147
117
|
.map(m => {
|
|
148
118
|
const entry = steps[m.frontmatter.name];
|
|
@@ -198,16 +168,15 @@ const statusCommand = {
|
|
|
198
168
|
for (const [slug, entry] of Object.entries(steps)) {
|
|
199
169
|
if (isCompact && !actionableStatuses.has(entry.status))
|
|
200
170
|
continue;
|
|
201
|
-
const
|
|
202
|
-
const phase =
|
|
171
|
+
const fm = pipeline.stepMeta.get(slug);
|
|
172
|
+
const phase = fm?.phase ?? '?';
|
|
203
173
|
const icon = statusIcons[entry.status] ?? '?';
|
|
204
174
|
if (argv.phase !== undefined && phase !== String(argv.phase))
|
|
205
175
|
continue;
|
|
206
176
|
output.info(` ${icon} [${entry.status}] ${slug}`);
|
|
207
177
|
}
|
|
208
178
|
// Compute eligible live (don't rely on stale cache in state.json)
|
|
209
|
-
const
|
|
210
|
-
const liveEligible = computeEligible(graph, state.steps);
|
|
179
|
+
const liveEligible = pipeline.computeEligible(state.steps);
|
|
211
180
|
const nextEligibleList = liveEligible.join(', ') || 'none';
|
|
212
181
|
output.info(`\nNext eligible: ${nextEligibleList}`);
|
|
213
182
|
if (staleCommandCount > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,GACA,eAAe,CA0BjB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { discoverMetaPrompts, discoverAllMetaPrompts } from '../assembly/meta-prompt-loader.js';
|
|
2
|
+
import { loadAllPresets } from '../assembly/preset-loader.js';
|
|
3
|
+
import { loadConfig } from '../../config/loader.js';
|
|
4
|
+
import { getPackagePipelineDir, getPackageToolsDir, getPackageMethodologyDir } from '../../utils/fs.js';
|
|
5
|
+
export function loadPipelineContext(projectRoot, options) {
|
|
6
|
+
const pipelineDir = getPackagePipelineDir(projectRoot);
|
|
7
|
+
const methodologyDir = getPackageMethodologyDir(projectRoot);
|
|
8
|
+
// Always discover pipeline steps first for config/preset validation
|
|
9
|
+
const pipelineMetaPrompts = discoverMetaPrompts(pipelineDir);
|
|
10
|
+
const pipelineStepNames = [...pipelineMetaPrompts.keys()];
|
|
11
|
+
// Optionally extend with tools for prompt lookup (run.ts needs tools)
|
|
12
|
+
const metaPrompts = options?.includeTools
|
|
13
|
+
? discoverAllMetaPrompts(pipelineDir, getPackageToolsDir(projectRoot))
|
|
14
|
+
: pipelineMetaPrompts;
|
|
15
|
+
// Validate config and presets against pipeline steps only (not tools)
|
|
16
|
+
const { config, errors: configErrors, warnings: configWarnings } = loadConfig(projectRoot, pipelineStepNames);
|
|
17
|
+
const { deep, mvp, custom } = loadAllPresets(methodologyDir, pipelineStepNames);
|
|
18
|
+
return {
|
|
19
|
+
projectRoot,
|
|
20
|
+
metaPrompts,
|
|
21
|
+
config,
|
|
22
|
+
configErrors,
|
|
23
|
+
configWarnings,
|
|
24
|
+
presets: { deep, mvp, custom },
|
|
25
|
+
methodologyDir,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/pipeline/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAGvG,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,OAEC;IAED,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;IAE5D,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAC5D,MAAM,iBAAiB,GAAG,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAA;IAEzD,sEAAsE;IACtE,MAAM,WAAW,GAAG,OAAO,EAAE,YAAY;QACvC,CAAC,CAAC,sBAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACtE,CAAC,CAAC,mBAAmB,CAAA;IAEvB,sEAAsE;IACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;IAC7G,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;IAE/E,OAAO;QACL,WAAW;QACX,WAAW;QACX,MAAM;QACN,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE;QAC9B,cAAc;KACf,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/context.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { loadPipelineContext } from './context.js';
|
|
3
|
+
describe('loadPipelineContext', () => {
|
|
4
|
+
it('returns metaPrompts map with pipeline steps', () => {
|
|
5
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
6
|
+
expect(ctx.metaPrompts.size).toBeGreaterThan(50);
|
|
7
|
+
expect(ctx.metaPrompts.has('create-prd')).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('returns presets with deep and mvp', () => {
|
|
10
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
11
|
+
expect(ctx.presets.deep).not.toBeNull();
|
|
12
|
+
expect(ctx.presets.mvp).not.toBeNull();
|
|
13
|
+
});
|
|
14
|
+
it('returns methodologyDir as a string', () => {
|
|
15
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
16
|
+
expect(typeof ctx.methodologyDir).toBe('string');
|
|
17
|
+
expect(ctx.methodologyDir).toContain('methodology');
|
|
18
|
+
});
|
|
19
|
+
it('excludes tools by default', () => {
|
|
20
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
21
|
+
expect(ctx.metaPrompts.has('release')).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
it('includes tools when includeTools is true', () => {
|
|
24
|
+
const ctx = loadPipelineContext(process.cwd(), { includeTools: true });
|
|
25
|
+
expect(ctx.metaPrompts.has('release')).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
it('config is null when project has no .scaffold/config.yml', () => {
|
|
28
|
+
const ctx = loadPipelineContext('/tmp/nonexistent-project-dir-' + Date.now());
|
|
29
|
+
expect(ctx.config).toBeNull();
|
|
30
|
+
expect(ctx.configErrors.length).toBeGreaterThan(0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../../src/core/pipeline/context.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QACvC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,GAAG,GAAG,mBAAmB,CAAC,+BAA+B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { OutputContext } from '../../cli/output/context.js';
|
|
2
|
+
import type { PipelineContext, ResolvedPipeline } from './types.js';
|
|
3
|
+
export declare function resolvePipeline(context: PipelineContext, options?: {
|
|
4
|
+
output?: OutputContext;
|
|
5
|
+
}): ResolvedPipeline;
|
|
6
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAMhE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,GACnC,gBAAgB,CA4DlB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { resolveOverlayState } from '../assembly/overlay-state-resolver.js';
|
|
2
|
+
import { buildGraph } from '../dependency/graph.js';
|
|
3
|
+
import { computeEligible } from '../dependency/eligibility.js';
|
|
4
|
+
import { createOutputContext } from '../../cli/output/context.js';
|
|
5
|
+
export function resolvePipeline(context, options) {
|
|
6
|
+
const { config, presets, metaPrompts, methodologyDir } = context;
|
|
7
|
+
const output = options?.output ?? createOutputContext('auto');
|
|
8
|
+
// 1. Select preset (fallback to deep)
|
|
9
|
+
const methodology = config?.methodology ?? 'deep';
|
|
10
|
+
const preset = (methodology === 'mvp' ? presets.mvp : methodology === 'custom' ? presets.custom : presets.deep) ??
|
|
11
|
+
presets.deep;
|
|
12
|
+
const resolvedPreset = preset ?? {
|
|
13
|
+
name: 'deep',
|
|
14
|
+
description: 'Default deep methodology',
|
|
15
|
+
default_depth: 3,
|
|
16
|
+
steps: {},
|
|
17
|
+
};
|
|
18
|
+
// 2. Apply custom enablement overrides
|
|
19
|
+
const mergedSteps = { ...resolvedPreset.steps };
|
|
20
|
+
if (config?.custom?.steps) {
|
|
21
|
+
for (const [name, customStep] of Object.entries(config.custom.steps)) {
|
|
22
|
+
if (customStep.enabled !== undefined) {
|
|
23
|
+
mergedSteps[name] = { ...(mergedSteps[name] ?? {}), enabled: customStep.enabled };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 3. Resolve overlay
|
|
28
|
+
let overlay;
|
|
29
|
+
if (config) {
|
|
30
|
+
overlay = resolveOverlayState({ config, methodologyDir, metaPrompts, presetSteps: mergedSteps, output });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const knowledge = {};
|
|
34
|
+
const reads = {};
|
|
35
|
+
const dependencies = {};
|
|
36
|
+
for (const [name, mp] of metaPrompts) {
|
|
37
|
+
knowledge[name] = [...(mp.frontmatter.knowledgeBase ?? [])];
|
|
38
|
+
reads[name] = [...(mp.frontmatter.reads ?? [])];
|
|
39
|
+
dependencies[name] = [...(mp.frontmatter.dependencies ?? [])];
|
|
40
|
+
}
|
|
41
|
+
overlay = { steps: mergedSteps, knowledge, reads, dependencies };
|
|
42
|
+
}
|
|
43
|
+
// 4. Build graph (once)
|
|
44
|
+
const frontmatters = [...metaPrompts.values()].map((mp) => mp.frontmatter);
|
|
45
|
+
const presetStepsMap = new Map(Object.entries(overlay.steps).map(([k, v]) => [k, { enabled: v.enabled }]));
|
|
46
|
+
const graph = buildGraph(frontmatters, presetStepsMap);
|
|
47
|
+
// 5. Build stepMeta
|
|
48
|
+
const stepMeta = new Map();
|
|
49
|
+
for (const [name, mp] of metaPrompts) {
|
|
50
|
+
stepMeta.set(name, mp.frontmatter);
|
|
51
|
+
}
|
|
52
|
+
// 6. Build computeEligible closure
|
|
53
|
+
const computeEligibleFn = (steps) => computeEligible(graph, steps);
|
|
54
|
+
return { graph, preset: resolvedPreset, overlay, stepMeta, computeEligible: computeEligibleFn };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/pipeline/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.test.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { resolvePipeline } from './resolver.js';
|
|
3
|
+
import { loadPipelineContext } from './context.js';
|
|
4
|
+
describe('resolvePipeline', () => {
|
|
5
|
+
it('returns a DependencyGraph with nodes', () => {
|
|
6
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
7
|
+
const pipeline = resolvePipeline(ctx);
|
|
8
|
+
expect(pipeline.graph.nodes.size).toBeGreaterThan(50);
|
|
9
|
+
});
|
|
10
|
+
it('returns a preset matching the config methodology', () => {
|
|
11
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
12
|
+
const pipeline = resolvePipeline(ctx);
|
|
13
|
+
expect(pipeline.preset).not.toBeNull();
|
|
14
|
+
expect(pipeline.preset.name).toBeDefined();
|
|
15
|
+
});
|
|
16
|
+
it('returns overlay with steps record', () => {
|
|
17
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
18
|
+
const pipeline = resolvePipeline(ctx);
|
|
19
|
+
expect(typeof pipeline.overlay.steps).toBe('object');
|
|
20
|
+
expect(Object.keys(pipeline.overlay.steps).length).toBeGreaterThan(50);
|
|
21
|
+
});
|
|
22
|
+
it('returns stepMeta map keyed by step name', () => {
|
|
23
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
24
|
+
const pipeline = resolvePipeline(ctx);
|
|
25
|
+
expect(pipeline.stepMeta.has('create-prd')).toBe(true);
|
|
26
|
+
expect(pipeline.stepMeta.get('create-prd')?.phase).toBe('pre');
|
|
27
|
+
});
|
|
28
|
+
it('returns computeEligible that accepts steps and returns string[]', () => {
|
|
29
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
30
|
+
const pipeline = resolvePipeline(ctx);
|
|
31
|
+
const eligible = pipeline.computeEligible({});
|
|
32
|
+
expect(Array.isArray(eligible)).toBe(true);
|
|
33
|
+
expect(eligible.length).toBeGreaterThan(0);
|
|
34
|
+
});
|
|
35
|
+
it('applies custom enablement overrides when config has custom steps', () => {
|
|
36
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
37
|
+
if (ctx.config) {
|
|
38
|
+
ctx.config.custom = {
|
|
39
|
+
steps: { 'create-prd': { enabled: false } },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const pipeline = resolvePipeline(ctx);
|
|
43
|
+
const prdNode = pipeline.graph.nodes.get('create-prd');
|
|
44
|
+
expect(prdNode?.enabled).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
it('custom-enables a step absent from preset (e.g., mvp + custom enable review-prd)', () => {
|
|
47
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
48
|
+
if (ctx.config) {
|
|
49
|
+
ctx.config.methodology = 'mvp';
|
|
50
|
+
ctx.config.custom = {
|
|
51
|
+
steps: { 'review-prd': { enabled: true } },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const pipeline = resolvePipeline(ctx);
|
|
55
|
+
const node = pipeline.graph.nodes.get('review-prd');
|
|
56
|
+
expect(node?.enabled).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it('handles null config gracefully (fallback to deep, frontmatter maps preserved)', () => {
|
|
59
|
+
const ctx = loadPipelineContext(process.cwd());
|
|
60
|
+
ctx.config = null;
|
|
61
|
+
const pipeline = resolvePipeline(ctx);
|
|
62
|
+
expect(pipeline.preset).not.toBeNull();
|
|
63
|
+
expect(pipeline.graph.nodes.size).toBeGreaterThan(50);
|
|
64
|
+
expect(Object.keys(pipeline.overlay.knowledge).length).toBeGreaterThan(0);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.test.js","sourceRoot":"","sources":["../../../src/core/pipeline/resolver.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MetaPromptFile, MetaPromptFrontmatter } from '../../types/frontmatter.js';
|
|
2
|
+
import type { ScaffoldConfig, MethodologyPreset, DependencyGraph, ScaffoldError, ScaffoldWarning, StepStateEntry } from '../../types/index.js';
|
|
3
|
+
import type { OverlayState } from '../assembly/overlay-state-resolver.js';
|
|
4
|
+
export interface PipelineContext {
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
metaPrompts: Map<string, MetaPromptFile>;
|
|
7
|
+
config: ScaffoldConfig | null;
|
|
8
|
+
configErrors: ScaffoldError[];
|
|
9
|
+
configWarnings: ScaffoldWarning[];
|
|
10
|
+
presets: {
|
|
11
|
+
mvp: MethodologyPreset | null;
|
|
12
|
+
deep: MethodologyPreset | null;
|
|
13
|
+
custom: MethodologyPreset | null;
|
|
14
|
+
};
|
|
15
|
+
methodologyDir: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ResolvedPipeline {
|
|
18
|
+
graph: DependencyGraph;
|
|
19
|
+
preset: MethodologyPreset;
|
|
20
|
+
overlay: OverlayState;
|
|
21
|
+
stepMeta: Map<string, MetaPromptFrontmatter>;
|
|
22
|
+
computeEligible: (steps: Record<string, StepStateEntry>) => string[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvF,OAAO,KAAK,EACV,cAAc,EAAE,iBAAiB,EACjC,eAAe,EAAE,aAAa,EAAE,eAAe,EAC/C,cAAc,EACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEzE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,cAAc,EAAE,eAAe,EAAE,CAAA;IACjC,OAAO,EAAE;QACP,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAA;QAC7B,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;QAC9B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;KACjC,CAAA;IACD,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,MAAM,EAAE,CAAA;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/pipeline/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ScaffoldConfig, MethodologyPreset } from '../../types/index.js';
|
|
2
|
-
export type EnablementProvenance = 'custom-override' | 'conditional-detection' | 'preset-default';
|
|
3
|
-
/**
|
|
4
|
-
* Resolve whether a step is enabled using precedence:
|
|
5
|
-
* custom-override > preset-default
|
|
6
|
-
*/
|
|
7
|
-
export declare function resolveEnablement(step: string, config: ScaffoldConfig, preset: MethodologyPreset): {
|
|
8
|
-
enabled: boolean;
|
|
9
|
-
provenance: EnablementProvenance;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=methodology-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methodology-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7E,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,gBAAgB,CAAA;AAEjG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,iBAAiB,GACxB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,oBAAoB,CAAA;CAAE,CAexD"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolve whether a step is enabled using precedence:
|
|
3
|
-
* custom-override > preset-default
|
|
4
|
-
*/
|
|
5
|
-
export function resolveEnablement(step, config, preset) {
|
|
6
|
-
// 1. Custom override in config
|
|
7
|
-
const customStep = config.custom?.steps?.[step];
|
|
8
|
-
if (customStep?.enabled !== undefined) {
|
|
9
|
-
return { enabled: customStep.enabled, provenance: 'custom-override' };
|
|
10
|
-
}
|
|
11
|
-
// 2. Preset default
|
|
12
|
-
const presetStep = preset.steps[step];
|
|
13
|
-
if (presetStep !== undefined) {
|
|
14
|
-
return { enabled: presetStep.enabled, provenance: 'preset-default' };
|
|
15
|
-
}
|
|
16
|
-
// 3. Not in preset — assume disabled
|
|
17
|
-
return { enabled: false, provenance: 'preset-default' };
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=methodology-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methodology-resolver.js","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,MAAsB,EACtB,MAAyB;IAEzB,+BAA+B;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,UAAU,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA;IACvE,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;IACtE,CAAC;IAED,qCAAqC;IACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;AACzD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methodology-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { resolveEnablement } from './methodology-resolver.js';
|
|
5
|
-
import { loadPreset } from './preset-loader.js';
|
|
6
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const fixtureDir = path.resolve(__dirname, '../../../tests/fixtures/methodology');
|
|
8
|
-
function makeConfig(overrides = {}) {
|
|
9
|
-
return {
|
|
10
|
-
version: 2,
|
|
11
|
-
methodology: 'deep',
|
|
12
|
-
platforms: ['claude-code'],
|
|
13
|
-
...overrides,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function loadFixturePreset(name) {
|
|
17
|
-
const { preset } = loadPreset(path.join(fixtureDir, `${name}.yml`), []);
|
|
18
|
-
if (!preset)
|
|
19
|
-
throw new Error(`Failed to load preset: ${name}`);
|
|
20
|
-
return preset;
|
|
21
|
-
}
|
|
22
|
-
describe('resolveEnablement', () => {
|
|
23
|
-
it('preset-default returns enabled from preset', () => {
|
|
24
|
-
const preset = loadFixturePreset('deep');
|
|
25
|
-
const config = makeConfig();
|
|
26
|
-
const result = resolveEnablement('create-prd', config, preset);
|
|
27
|
-
expect(result.enabled).toBe(true);
|
|
28
|
-
expect(result.provenance).toBe('preset-default');
|
|
29
|
-
});
|
|
30
|
-
it('custom-override takes precedence over preset', () => {
|
|
31
|
-
const preset = loadFixturePreset('deep');
|
|
32
|
-
const config = makeConfig({
|
|
33
|
-
custom: {
|
|
34
|
-
steps: { 'create-prd': { enabled: false } },
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
const result = resolveEnablement('create-prd', config, preset);
|
|
38
|
-
expect(result.enabled).toBe(false);
|
|
39
|
-
expect(result.provenance).toBe('custom-override');
|
|
40
|
-
});
|
|
41
|
-
it('custom-override can enable a step', () => {
|
|
42
|
-
// Use a step that doesn't exist in mvp preset, then enable via custom
|
|
43
|
-
const preset = loadFixturePreset('mvp');
|
|
44
|
-
const config = makeConfig({
|
|
45
|
-
methodology: 'mvp',
|
|
46
|
-
custom: {
|
|
47
|
-
steps: { 'review-prd': { enabled: true } },
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
const result = resolveEnablement('review-prd', config, preset);
|
|
51
|
-
expect(result.enabled).toBe(true);
|
|
52
|
-
expect(result.provenance).toBe('custom-override');
|
|
53
|
-
});
|
|
54
|
-
it('step not in preset returns enabled=false', () => {
|
|
55
|
-
const preset = loadFixturePreset('mvp');
|
|
56
|
-
const config = makeConfig({ methodology: 'mvp' });
|
|
57
|
-
// 'domain-modeling' not in mvp.yml fixture
|
|
58
|
-
const result = resolveEnablement('domain-modeling', config, preset);
|
|
59
|
-
expect(result.enabled).toBe(false);
|
|
60
|
-
expect(result.provenance).toBe('preset-default');
|
|
61
|
-
});
|
|
62
|
-
it('MVP preset: create-prd enabled, domain-modeling disabled', () => {
|
|
63
|
-
const preset = loadFixturePreset('mvp');
|
|
64
|
-
const config = makeConfig({ methodology: 'mvp' });
|
|
65
|
-
const createPrdResult = resolveEnablement('create-prd', config, preset);
|
|
66
|
-
expect(createPrdResult.enabled).toBe(true);
|
|
67
|
-
expect(createPrdResult.provenance).toBe('preset-default');
|
|
68
|
-
const domainModelingResult = resolveEnablement('domain-modeling', config, preset);
|
|
69
|
-
expect(domainModelingResult.enabled).toBe(false);
|
|
70
|
-
expect(domainModelingResult.provenance).toBe('preset-default');
|
|
71
|
-
});
|
|
72
|
-
it('review-prd is enabled in deep preset', () => {
|
|
73
|
-
const preset = loadFixturePreset('deep');
|
|
74
|
-
const config = makeConfig();
|
|
75
|
-
const result = resolveEnablement('review-prd', config, preset);
|
|
76
|
-
expect(result.enabled).toBe(true);
|
|
77
|
-
expect(result.provenance).toBe('preset-default');
|
|
78
|
-
});
|
|
79
|
-
it('step not in any preset returns enabled=false with preset-default provenance', () => {
|
|
80
|
-
const preset = loadFixturePreset('deep');
|
|
81
|
-
const config = makeConfig();
|
|
82
|
-
const result = resolveEnablement('nonexistent-step', config, preset);
|
|
83
|
-
expect(result.enabled).toBe(false);
|
|
84
|
-
expect(result.provenance).toBe('preset-default');
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=methodology-resolver.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"methodology-resolver.test.js","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/eligible.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { StepStateEntry } from '../types/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* Build a computeEligibleFn for the given project root.
|
|
4
|
-
* Discovers meta-prompts, loads the methodology preset, applies project-type
|
|
5
|
-
* overlay, and returns a function that computes next-eligible steps from
|
|
6
|
-
* current state.steps.
|
|
7
|
-
*/
|
|
8
|
-
export declare function buildComputeEligibleFn(projectRoot: string): (steps: Record<string, StepStateEntry>) => string[];
|
|
9
|
-
//# sourceMappingURL=eligible.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eligible.d.ts","sourceRoot":"","sources":["../../src/utils/eligible.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAClB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,MAAM,EAAE,CAmCrD"}
|