@rawsql-ts/ztd-cli 0.19.0 → 0.20.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/LICENSE +21 -0
- package/README.md +4 -4
- package/dist/commands/agents.d.ts +2 -0
- package/dist/commands/agents.js +68 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/checkContract.d.ts +46 -0
- package/dist/commands/checkContract.js +359 -0
- package/dist/commands/checkContract.js.map +1 -0
- package/dist/commands/connectionOptions.d.ts +12 -0
- package/dist/commands/connectionOptions.js +22 -0
- package/dist/commands/connectionOptions.js.map +1 -0
- package/dist/commands/ddl.d.ts +7 -0
- package/dist/commands/ddl.js +145 -0
- package/dist/commands/ddl.js.map +1 -0
- package/dist/commands/describe.d.ts +23 -0
- package/dist/commands/describe.js +399 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/diff.d.ts +24 -0
- package/dist/commands/diff.js +73 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/genEntities.d.ts +14 -0
- package/dist/commands/genEntities.js +58 -0
- package/dist/commands/genEntities.js.map +1 -0
- package/dist/commands/init.d.ts +104 -0
- package/dist/commands/init.js +1480 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +89 -0
- package/dist/commands/lint.js +501 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/modelGen.d.ts +60 -0
- package/dist/commands/modelGen.js +572 -0
- package/dist/commands/modelGen.js.map +1 -0
- package/dist/commands/options.d.ts +9 -0
- package/dist/commands/options.js +48 -0
- package/dist/commands/options.js.map +1 -0
- package/dist/commands/perf.d.ts +9 -0
- package/dist/commands/perf.js +374 -0
- package/dist/commands/perf.js.map +1 -0
- package/dist/commands/pull.d.ts +21 -0
- package/dist/commands/pull.js +115 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/query.d.ts +9 -0
- package/dist/commands/query.js +377 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/testEvidence.d.ts +237 -0
- package/dist/commands/testEvidence.js +1220 -0
- package/dist/commands/testEvidence.js.map +1 -0
- package/dist/commands/ztdConfig.d.ts +30 -0
- package/dist/commands/ztdConfig.js +224 -0
- package/dist/commands/ztdConfig.js.map +1 -0
- package/dist/commands/ztdConfigCommand.d.ts +18 -0
- package/dist/commands/ztdConfigCommand.js +268 -0
- package/dist/commands/ztdConfigCommand.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +127 -0
- package/dist/index.js.map +1 -0
- package/dist/perf/benchmark.d.ts +277 -0
- package/dist/perf/benchmark.js +2186 -0
- package/dist/perf/benchmark.js.map +1 -0
- package/dist/perf/sandbox.d.ts +73 -0
- package/dist/perf/sandbox.js +492 -0
- package/dist/perf/sandbox.js.map +1 -0
- package/dist/query/analysis.d.ts +20 -0
- package/dist/query/analysis.js +192 -0
- package/dist/query/analysis.js.map +1 -0
- package/dist/query/analyzeColumnUsage.d.ts +10 -0
- package/dist/query/analyzeColumnUsage.js +451 -0
- package/dist/query/analyzeColumnUsage.js.map +1 -0
- package/dist/query/analyzeTableUsage.d.ts +10 -0
- package/dist/query/analyzeTableUsage.js +318 -0
- package/dist/query/analyzeTableUsage.js.map +1 -0
- package/dist/query/execute.d.ts +40 -0
- package/dist/query/execute.js +784 -0
- package/dist/query/execute.js.map +1 -0
- package/dist/query/format.d.ts +1 -0
- package/dist/query/format.js +9 -0
- package/dist/query/format.js.map +1 -0
- package/dist/query/lint.d.ts +29 -0
- package/dist/query/lint.js +340 -0
- package/dist/query/lint.js.map +1 -0
- package/dist/query/location.d.ts +18 -0
- package/dist/query/location.js +204 -0
- package/dist/query/location.js.map +1 -0
- package/dist/query/patch.d.ts +21 -0
- package/dist/query/patch.js +151 -0
- package/dist/query/patch.js.map +1 -0
- package/dist/query/planner.d.ts +31 -0
- package/dist/query/planner.js +134 -0
- package/dist/query/planner.js.map +1 -0
- package/dist/query/report.d.ts +7 -0
- package/dist/query/report.js +19 -0
- package/dist/query/report.js.map +1 -0
- package/dist/query/scalarFilterAnalysis.d.ts +6 -0
- package/dist/query/scalarFilterAnalysis.js +212 -0
- package/dist/query/scalarFilterAnalysis.js.map +1 -0
- package/dist/query/slice.d.ts +17 -0
- package/dist/query/slice.js +204 -0
- package/dist/query/slice.js.map +1 -0
- package/dist/query/structure.d.ts +24 -0
- package/dist/query/structure.js +135 -0
- package/dist/query/structure.js.map +1 -0
- package/dist/query/targets.d.ts +2 -0
- package/dist/query/targets.js +6 -0
- package/dist/query/targets.js.map +1 -0
- package/dist/query/types.d.ts +97 -0
- package/dist/query/types.js +3 -0
- package/dist/query/types.js.map +1 -0
- package/dist/specs/sql/activeOrders.catalog.d.ts +12 -0
- package/dist/specs/sql/activeOrders.catalog.js +36 -0
- package/dist/specs/sql/activeOrders.catalog.js.map +1 -0
- package/dist/specs/sql/usersList.catalog.d.ts +8 -0
- package/dist/specs/sql/usersList.catalog.js +14 -0
- package/dist/specs/sql/usersList.catalog.js.map +1 -0
- package/dist/specs/sqlCatalogDefinition.d.ts +20 -0
- package/dist/specs/sqlCatalogDefinition.js +10 -0
- package/dist/specs/sqlCatalogDefinition.js.map +1 -0
- package/dist/utils/agentCli.d.ts +23 -0
- package/dist/utils/agentCli.js +84 -0
- package/dist/utils/agentCli.js.map +1 -0
- package/dist/utils/agentSafety.d.ts +4 -0
- package/dist/utils/agentSafety.js +50 -0
- package/dist/utils/agentSafety.js.map +1 -0
- package/dist/utils/agents.d.ts +31 -0
- package/dist/utils/agents.js +362 -0
- package/dist/utils/agents.js.map +1 -0
- package/dist/utils/collectSqlFiles.d.ts +9 -0
- package/dist/utils/collectSqlFiles.js +58 -0
- package/dist/utils/collectSqlFiles.js.map +1 -0
- package/dist/utils/connectionSummary.d.ts +3 -0
- package/dist/utils/connectionSummary.js +29 -0
- package/dist/utils/connectionSummary.js.map +1 -0
- package/dist/utils/dbConnection.d.ts +31 -0
- package/dist/utils/dbConnection.js +151 -0
- package/dist/utils/dbConnection.js.map +1 -0
- package/dist/utils/fs.d.ts +1 -0
- package/dist/utils/fs.js +12 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/modelGenBinder.d.ts +8 -0
- package/dist/utils/modelGenBinder.js +31 -0
- package/dist/utils/modelGenBinder.js.map +1 -0
- package/dist/utils/modelGenRender.d.ts +29 -0
- package/dist/utils/modelGenRender.js +158 -0
- package/dist/utils/modelGenRender.js.map +1 -0
- package/dist/utils/modelGenScanner.d.ts +24 -0
- package/dist/utils/modelGenScanner.js +196 -0
- package/dist/utils/modelGenScanner.js.map +1 -0
- package/dist/utils/modelProbe.d.ts +14 -0
- package/dist/utils/modelProbe.js +121 -0
- package/dist/utils/modelProbe.js.map +1 -0
- package/dist/utils/normalizePulledSchema.d.ts +12 -0
- package/dist/utils/normalizePulledSchema.js +213 -0
- package/dist/utils/normalizePulledSchema.js.map +1 -0
- package/dist/utils/optionalDependencies.d.ts +43 -0
- package/dist/utils/optionalDependencies.js +134 -0
- package/dist/utils/optionalDependencies.js.map +1 -0
- package/dist/utils/pgDump.d.ts +12 -0
- package/dist/utils/pgDump.js +58 -0
- package/dist/utils/pgDump.js.map +1 -0
- package/dist/utils/queryFingerprint.d.ts +14 -0
- package/dist/utils/queryFingerprint.js +34 -0
- package/dist/utils/queryFingerprint.js.map +1 -0
- package/dist/utils/sqlCatalogDiscovery.d.ts +44 -0
- package/dist/utils/sqlCatalogDiscovery.js +166 -0
- package/dist/utils/sqlCatalogDiscovery.js.map +1 -0
- package/dist/utils/sqlCatalogStatements.d.ts +20 -0
- package/dist/utils/sqlCatalogStatements.js +23 -0
- package/dist/utils/sqlCatalogStatements.js.map +1 -0
- package/dist/utils/sqlLintHelpers.d.ts +18 -0
- package/dist/utils/sqlLintHelpers.js +270 -0
- package/dist/utils/sqlLintHelpers.js.map +1 -0
- package/dist/utils/telemetry.d.ts +71 -0
- package/dist/utils/telemetry.js +597 -0
- package/dist/utils/telemetry.js.map +1 -0
- package/dist/utils/typeMapper.d.ts +4 -0
- package/dist/utils/typeMapper.js +79 -0
- package/dist/utils/typeMapper.js.map +1 -0
- package/dist/utils/ztdProjectConfig.d.ts +41 -0
- package/dist/utils/ztdProjectConfig.js +182 -0
- package/dist/utils/ztdProjectConfig.js.map +1 -0
- package/package.json +19 -20
- package/templates/README.md +1 -1
- package/templates/README.webapi.md +1 -1
- package/templates/src/catalog/runtime/_coercions.local-source.ts +0 -30
- package/templates/src/local/sql-contract.ts +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 MSugiura
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ How to read that layout:
|
|
|
111
111
|
* `src/domain`, `src/application`, and `src/presentation/http` are where generic WebAPI work should begin.
|
|
112
112
|
* `src/infrastructure/persistence`, `src/sql`, `src/catalog`, and `ztd/ddl` are the ZTD-owned persistence side.
|
|
113
113
|
* `tests/generated` is generated output. Recreate it with `ztd ztd-config` instead of editing it manually.
|
|
114
|
-
*
|
|
114
|
+
* Optional AI guidance files can be generated when you explicitly request them, but the default scaffold stays focused on consumer-facing project files.
|
|
115
115
|
|
|
116
116
|
## Choose The Right Happy Path
|
|
117
117
|
|
|
@@ -158,8 +158,6 @@ After `ztd init` you should see:
|
|
|
158
158
|
| `tests/smoke.validation.test.ts` | Validator integration smoke test |
|
|
159
159
|
| `tests/support/testkit-client.ts` | Driver wiring placeholder |
|
|
160
160
|
| `src/catalog/specs/` | Spec and runtime files for the smoke contract |
|
|
161
|
-
| `CONTEXT.md` | Agent-focused project invariants and recommended command usage |
|
|
162
|
-
| `.ztd/agents/manifest.json` | Managed AI guidance index with security notices and entrypoints |
|
|
163
161
|
|
|
164
162
|
```bash
|
|
165
163
|
# 4. Generate test types from the demo DDL
|
|
@@ -184,6 +182,7 @@ All smoke tests should pass. You now have a working ZTD project.
|
|
|
184
182
|
|
|
185
183
|
* Replace the demo DDL with your own schema, or inspect an explicit target with `npx ztd ddl pull --url <target>`
|
|
186
184
|
* Re-run `npx ztd ztd-config` whenever DDL changes (or use `--watch`)
|
|
185
|
+
* Add AI guidance files only if you want them in the repo: `npx ztd init --with-ai-guidance`
|
|
187
186
|
* Install visible AGENTS files only if you want them in the repo: `npx ztd agents install`
|
|
188
187
|
* Wire a real driver in `tests/support/testkit-client.ts` (see [adapter-node-pg](../adapters/adapter-node-pg) for Postgres)
|
|
189
188
|
* Write domain tests against generated `TestRowMap` types
|
|
@@ -214,6 +213,7 @@ mkdir /tmp/my-ztd-dogfood && cd /tmp/my-ztd-dogfood
|
|
|
214
213
|
node "<LOCAL_SOURCE_ROOT>/packages/ztd-cli/dist/index.js" init \
|
|
215
214
|
--workflow empty \
|
|
216
215
|
--validator zod \
|
|
216
|
+
--with-ai-guidance \
|
|
217
217
|
--local-source-root "<LOCAL_SOURCE_ROOT>"
|
|
218
218
|
|
|
219
219
|
# 4. Install the scaffolded dependencies
|
|
@@ -314,7 +314,7 @@ Most write-capable commands support `--dry-run` and `--json <payload>` for autom
|
|
|
314
314
|
|
|
315
315
|
| Command | Description |
|
|
316
316
|
|---------|-------------|
|
|
317
|
-
| `ztd init` | Create a ZTD-ready project layout (DDL folder, config, test stubs). Flags: `--yes`, `--workflow <pg_dump\|empty\|demo>`, `--validator <zod\|arktype>`, `--with-sqlclient`, `--with-app-interface`, `--local-source-root <path>` |
|
|
317
|
+
| `ztd init` | Create a ZTD-ready project layout (DDL folder, config, test stubs). Flags: `--yes`, `--workflow <pg_dump\|empty\|demo>`, `--validator <zod\|arktype>`, `--with-ai-guidance`, `--with-sqlclient`, `--with-app-interface`, `--local-source-root <path>` |
|
|
318
318
|
| `ztd agents install` | Materialize visible `AGENTS.md` files from the managed templates |
|
|
319
319
|
| `ztd agents status` | Report internal/visible AGENTS state and drift signals |
|
|
320
320
|
| `ztd ztd-config` | Generate `TestRowMap` and layout from DDL files. Flags: `--watch`, `--quiet` |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAgentsCommand = registerAgentsCommand;
|
|
4
|
+
const agents_1 = require("../utils/agents");
|
|
5
|
+
const agentCli_1 = require("../utils/agentCli");
|
|
6
|
+
function registerAgentsCommand(program) {
|
|
7
|
+
const agents = program.command('agents').description('Manage internal and visible AGENTS guidance for ztd projects');
|
|
8
|
+
agents
|
|
9
|
+
.command('install')
|
|
10
|
+
.description('Install visible AGENTS.md files from the managed templates')
|
|
11
|
+
.action(() => {
|
|
12
|
+
const plannedPaths = (0, agents_1.getVisibleAgentsInstallPaths)(process.cwd());
|
|
13
|
+
const lines = ['About to create:'];
|
|
14
|
+
if (plannedPaths.length === 0) {
|
|
15
|
+
lines.push(' - (none)');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
for (const targetPath of plannedPaths) {
|
|
19
|
+
lines.push(` - ${targetPath}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
lines.push('No files will be overwritten.');
|
|
23
|
+
lines.push('Disable with: skip `ztd agents install` (visible AGENTS are disabled by default).');
|
|
24
|
+
const written = (0, agents_1.installVisibleAgents)(process.cwd());
|
|
25
|
+
if ((0, agentCli_1.isJsonOutput)()) {
|
|
26
|
+
(0, agentCli_1.writeCommandEnvelope)('agents install', {
|
|
27
|
+
schemaVersion: 1,
|
|
28
|
+
plannedPaths,
|
|
29
|
+
createdPaths: written.map((summary) => summary.relativePath),
|
|
30
|
+
messageLines: lines
|
|
31
|
+
});
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const finalLines = [...lines];
|
|
35
|
+
if (written.length === 0) {
|
|
36
|
+
finalLines.push('Visible AGENTS guidance is already installed or intentionally preserved.');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
finalLines.push('Installed visible AGENTS guidance:');
|
|
40
|
+
for (const summary of written) {
|
|
41
|
+
finalLines.push(` - ${summary.relativePath}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
process.stdout.write(`${finalLines.join('\n')}\n`);
|
|
45
|
+
});
|
|
46
|
+
agents
|
|
47
|
+
.command('status')
|
|
48
|
+
.description('Report managed AGENTS guidance state and drift signals')
|
|
49
|
+
.action(() => {
|
|
50
|
+
var _a;
|
|
51
|
+
const report = (0, agents_1.getAgentsStatus)(process.cwd());
|
|
52
|
+
if ((0, agentCli_1.isJsonOutput)()) {
|
|
53
|
+
(0, agentCli_1.writeCommandEnvelope)('agents status', {
|
|
54
|
+
schemaVersion: 1,
|
|
55
|
+
targets: report.targets,
|
|
56
|
+
recommended_actions: report.recommendedActions
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const lines = ['AGENTS status:'];
|
|
61
|
+
for (const target of report.targets) {
|
|
62
|
+
lines.push(`- ${target.path}: installed=${target.installed} managed=${target.managed} installed_version=${(_a = target.installedVersion) !== null && _a !== void 0 ? _a : 'null'} template_version=${target.templateVersion} drift=${target.drift}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push(`recommended_actions: ${report.recommendedActions.length > 0 ? report.recommendedActions.join(', ') : '(none)'}`);
|
|
65
|
+
process.stdout.write(`${lines.join('\n')}\n`);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export type CheckFormat = 'human' | 'json';
|
|
3
|
+
export type ViolationSeverity = 'error' | 'warning';
|
|
4
|
+
/** A single deterministic contract-check violation/warning item. */
|
|
5
|
+
export interface ContractViolation {
|
|
6
|
+
rule: 'duplicate-spec-id' | 'unresolved-sql-file' | 'params-shape-mismatch' | 'mapping-invalid-entry' | 'mapping-duplicate-entry' | 'safety-select-star' | 'safety-missing-where' | 'sql-parse-error';
|
|
7
|
+
severity: ViolationSeverity;
|
|
8
|
+
specId: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CheckContractResult {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
violations: ContractViolation[];
|
|
15
|
+
filesChecked: number;
|
|
16
|
+
specsChecked: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Resolve command exit code for contract checks.
|
|
20
|
+
* @param args.result Completed check result when execution succeeded.
|
|
21
|
+
* @param args.error Error thrown while running checks.
|
|
22
|
+
* @returns 0 when result is ok, 1 when violations exist or non-runtime errors occur, 2 for runtime/config errors.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveCheckContractExitCode(args: {
|
|
25
|
+
result?: CheckContractResult;
|
|
26
|
+
error?: unknown;
|
|
27
|
+
}): 0 | 1 | 2;
|
|
28
|
+
/** Runtime/configuration error for contract check command (maps to exit code 2). */
|
|
29
|
+
export declare class CheckContractRuntimeError extends Error {
|
|
30
|
+
readonly exitCode = 2;
|
|
31
|
+
}
|
|
32
|
+
/** Register `ztd check contract` command on the CLI root program. */
|
|
33
|
+
export declare function registerCheckContractCommand(program: Command): void;
|
|
34
|
+
/**
|
|
35
|
+
* Run deterministic contract checks for catalog specs under a project root.
|
|
36
|
+
* @param options.strict Treat safety checks as errors when true, warnings otherwise.
|
|
37
|
+
* @param options.rootDir Optional project root override.
|
|
38
|
+
* @param options.specsDir Optional specs directory override (relative to rootDir).
|
|
39
|
+
*/
|
|
40
|
+
export declare function runCheckContract(options: {
|
|
41
|
+
strict: boolean;
|
|
42
|
+
rootDir?: string;
|
|
43
|
+
specsDir?: string;
|
|
44
|
+
}): CheckContractResult;
|
|
45
|
+
/** Format check results into human text or deterministic JSON text. */
|
|
46
|
+
export declare function formatOutput(result: CheckContractResult, format: CheckFormat): string;
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CheckContractRuntimeError = void 0;
|
|
7
|
+
exports.resolveCheckContractExitCode = resolveCheckContractExitCode;
|
|
8
|
+
exports.registerCheckContractCommand = registerCheckContractCommand;
|
|
9
|
+
exports.runCheckContract = runCheckContract;
|
|
10
|
+
exports.formatOutput = formatOutput;
|
|
11
|
+
const node_fs_1 = require("node:fs");
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
const rawsql_ts_1 = require("rawsql-ts");
|
|
14
|
+
const sqlCatalogDiscovery_1 = require("../utils/sqlCatalogDiscovery");
|
|
15
|
+
const agentCli_1 = require("../utils/agentCli");
|
|
16
|
+
/**
|
|
17
|
+
* Resolve command exit code for contract checks.
|
|
18
|
+
* @param args.result Completed check result when execution succeeded.
|
|
19
|
+
* @param args.error Error thrown while running checks.
|
|
20
|
+
* @returns 0 when result is ok, 1 when violations exist or non-runtime errors occur, 2 for runtime/config errors.
|
|
21
|
+
*/
|
|
22
|
+
function resolveCheckContractExitCode(args) {
|
|
23
|
+
if (args.error) {
|
|
24
|
+
return args.error instanceof CheckContractRuntimeError ? 2 : 1;
|
|
25
|
+
}
|
|
26
|
+
if (!args.result) {
|
|
27
|
+
return 2;
|
|
28
|
+
}
|
|
29
|
+
return args.result.ok ? 0 : 1;
|
|
30
|
+
}
|
|
31
|
+
/** Runtime/configuration error for contract check command (maps to exit code 2). */
|
|
32
|
+
class CheckContractRuntimeError extends Error {
|
|
33
|
+
constructor() {
|
|
34
|
+
super(...arguments);
|
|
35
|
+
this.exitCode = 2;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.CheckContractRuntimeError = CheckContractRuntimeError;
|
|
39
|
+
/** Register `ztd check contract` command on the CLI root program. */
|
|
40
|
+
function registerCheckContractCommand(program) {
|
|
41
|
+
const check = program.command('check').description('Contract validation workflows');
|
|
42
|
+
check
|
|
43
|
+
.command('contract')
|
|
44
|
+
.description('Check SQL contract specs deterministically')
|
|
45
|
+
.option('--format <format>', 'Output format (human|json)')
|
|
46
|
+
.option('--out <path>', 'Write output to file')
|
|
47
|
+
.option('--strict', 'Treat safety warnings as violations')
|
|
48
|
+
.option('--specs-dir <path>', 'Override specs directory (default: src/catalog/specs)')
|
|
49
|
+
.option('--json <payload>', 'Pass command options as a JSON object')
|
|
50
|
+
.action(async (options) => {
|
|
51
|
+
try {
|
|
52
|
+
const merged = options.json ? { ...options, ...(0, agentCli_1.parseJsonPayload)(options.json, '--json') } : options;
|
|
53
|
+
const format = resolveCheckOutputFormat(merged.format);
|
|
54
|
+
const result = runCheckContract({
|
|
55
|
+
strict: normalizeBooleanOption(merged.strict),
|
|
56
|
+
rootDir: process.env.ZTD_PROJECT_ROOT,
|
|
57
|
+
specsDir: normalizeStringOption(merged.specsDir)
|
|
58
|
+
});
|
|
59
|
+
const text = formatOutput(result, format);
|
|
60
|
+
const outPath = normalizeStringOption(merged.out);
|
|
61
|
+
if (outPath) {
|
|
62
|
+
const absolute = node_path_1.default.resolve(process.cwd(), outPath);
|
|
63
|
+
(0, node_fs_1.mkdirSync)(node_path_1.default.dirname(absolute), { recursive: true });
|
|
64
|
+
(0, node_fs_1.writeFileSync)(absolute, text, 'utf8');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const writer = result.ok ? console.log : console.error;
|
|
68
|
+
writer(text);
|
|
69
|
+
}
|
|
70
|
+
process.exitCode = resolveCheckContractExitCode({ result });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
process.exitCode = resolveCheckContractExitCode({ error });
|
|
74
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function normalizeFormat(format) {
|
|
79
|
+
const normalized = format.trim().toLowerCase();
|
|
80
|
+
if (normalized === 'human') {
|
|
81
|
+
return 'human';
|
|
82
|
+
}
|
|
83
|
+
if (normalized === 'json') {
|
|
84
|
+
return 'json';
|
|
85
|
+
}
|
|
86
|
+
throw new CheckContractRuntimeError(`Unsupported format: ${format}`);
|
|
87
|
+
}
|
|
88
|
+
function resolveCheckOutputFormat(value) {
|
|
89
|
+
const explicitFormat = normalizeStringOption(value);
|
|
90
|
+
if (explicitFormat) {
|
|
91
|
+
return normalizeFormat(explicitFormat);
|
|
92
|
+
}
|
|
93
|
+
// Map the global CLI output mode onto the contract command's local format names.
|
|
94
|
+
return (0, agentCli_1.getAgentOutputFormat)() === 'json' ? 'json' : 'human';
|
|
95
|
+
}
|
|
96
|
+
function normalizeStringOption(value) {
|
|
97
|
+
if (value === undefined || value === null || value === '') {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
if (typeof value !== 'string') {
|
|
101
|
+
throw new CheckContractRuntimeError(`Expected a string option but received ${typeof value}.`);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
function normalizeBooleanOption(value) {
|
|
106
|
+
if (value === undefined) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (typeof value !== 'boolean') {
|
|
110
|
+
throw new CheckContractRuntimeError(`Expected a boolean option but received ${typeof value}.`);
|
|
111
|
+
}
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Run deterministic contract checks for catalog specs under a project root.
|
|
116
|
+
* @param options.strict Treat safety checks as errors when true, warnings otherwise.
|
|
117
|
+
* @param options.rootDir Optional project root override.
|
|
118
|
+
* @param options.specsDir Optional specs directory override (relative to rootDir).
|
|
119
|
+
*/
|
|
120
|
+
function runCheckContract(options) {
|
|
121
|
+
var _a, _b, _c, _d, _e;
|
|
122
|
+
const root = node_path_1.default.resolve((_a = options.rootDir) !== null && _a !== void 0 ? _a : process.cwd());
|
|
123
|
+
const specsDir = options.specsDir ? node_path_1.default.resolve(root, options.specsDir) : node_path_1.default.resolve(root, 'src', 'catalog', 'specs');
|
|
124
|
+
if (!(0, node_fs_1.existsSync)(specsDir)) {
|
|
125
|
+
throw new CheckContractRuntimeError(`Spec directory not found: ${specsDir}`);
|
|
126
|
+
}
|
|
127
|
+
const specFiles = (0, sqlCatalogDiscovery_1.walkSqlCatalogSpecFiles)(specsDir, { excludeTestFiles: true });
|
|
128
|
+
const loadedSpecs = specFiles.flatMap((filePath) => (0, sqlCatalogDiscovery_1.loadSqlCatalogSpecsFromFile)(filePath, (message) => new CheckContractRuntimeError(message)));
|
|
129
|
+
const violations = [];
|
|
130
|
+
const duplicateMap = new Map();
|
|
131
|
+
for (const loaded of loadedSpecs) {
|
|
132
|
+
const id = typeof loaded.spec.id === 'string' ? loaded.spec.id.trim() : '';
|
|
133
|
+
if (!id) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const list = (_b = duplicateMap.get(id)) !== null && _b !== void 0 ? _b : [];
|
|
137
|
+
list.push(loaded);
|
|
138
|
+
duplicateMap.set(id, list);
|
|
139
|
+
}
|
|
140
|
+
for (const [id, entries] of Array.from(duplicateMap.entries()).sort((a, b) => a[0].localeCompare(b[0]))) {
|
|
141
|
+
if (entries.length < 2) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
for (const entry of entries.sort((a, b) => a.filePath.localeCompare(b.filePath))) {
|
|
145
|
+
violations.push({
|
|
146
|
+
rule: 'duplicate-spec-id',
|
|
147
|
+
severity: 'error',
|
|
148
|
+
specId: id,
|
|
149
|
+
filePath: entry.filePath,
|
|
150
|
+
message: `Duplicate spec.id "${id}" detected.`
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
for (const loaded of loadedSpecs.sort((a, b) => {
|
|
155
|
+
const idA = typeof a.spec.id === 'string' ? a.spec.id : '';
|
|
156
|
+
const idB = typeof b.spec.id === 'string' ? b.spec.id : '';
|
|
157
|
+
return idA.localeCompare(idB) || a.filePath.localeCompare(b.filePath);
|
|
158
|
+
})) {
|
|
159
|
+
const specId = typeof loaded.spec.id === 'string' && loaded.spec.id.trim().length > 0
|
|
160
|
+
? loaded.spec.id.trim()
|
|
161
|
+
: '<missing-id>';
|
|
162
|
+
if (typeof loaded.spec.sqlFile !== 'string' || loaded.spec.sqlFile.trim().length === 0) {
|
|
163
|
+
violations.push({
|
|
164
|
+
rule: 'unresolved-sql-file',
|
|
165
|
+
severity: 'error',
|
|
166
|
+
specId,
|
|
167
|
+
filePath: loaded.filePath,
|
|
168
|
+
message: 'spec.sqlFile must be a non-empty string.'
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
const sqlPath = node_path_1.default.resolve(node_path_1.default.dirname(loaded.filePath), loaded.spec.sqlFile);
|
|
173
|
+
if (!(0, node_fs_1.existsSync)(sqlPath)) {
|
|
174
|
+
violations.push({
|
|
175
|
+
rule: 'unresolved-sql-file',
|
|
176
|
+
severity: 'error',
|
|
177
|
+
specId,
|
|
178
|
+
filePath: loaded.filePath,
|
|
179
|
+
message: `SQL file does not exist: ${loaded.spec.sqlFile}`
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
applySafetyChecks(sqlPath, specId, loaded.filePath, options.strict, violations);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const shape = (_c = loaded.spec.params) === null || _c === void 0 ? void 0 : _c.shape;
|
|
187
|
+
const example = (_d = loaded.spec.params) === null || _d === void 0 ? void 0 : _d.example;
|
|
188
|
+
if (shape === 'positional' && !Array.isArray(example)) {
|
|
189
|
+
violations.push({
|
|
190
|
+
rule: 'params-shape-mismatch',
|
|
191
|
+
severity: 'error',
|
|
192
|
+
specId,
|
|
193
|
+
filePath: loaded.filePath,
|
|
194
|
+
message: 'params.shape="positional" requires params.example to be an array.'
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
else if (shape === 'named' && !(0, sqlCatalogDiscovery_1.isPlainObject)(example)) {
|
|
198
|
+
violations.push({
|
|
199
|
+
rule: 'params-shape-mismatch',
|
|
200
|
+
severity: 'error',
|
|
201
|
+
specId,
|
|
202
|
+
filePath: loaded.filePath,
|
|
203
|
+
message: 'params.shape="named" requires params.example to be an object.'
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
const mapping = (_e = loaded.spec.output) === null || _e === void 0 ? void 0 : _e.mapping;
|
|
207
|
+
if (mapping) {
|
|
208
|
+
validateMapping(specId, loaded.filePath, mapping, violations);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const sorted = violations.sort((a, b) => a.rule.localeCompare(b.rule) ||
|
|
212
|
+
a.specId.localeCompare(b.specId) ||
|
|
213
|
+
a.filePath.localeCompare(b.filePath) ||
|
|
214
|
+
a.message.localeCompare(b.message));
|
|
215
|
+
return {
|
|
216
|
+
ok: sorted.length === 0 || sorted.every((item) => item.severity === 'warning'),
|
|
217
|
+
violations: sorted,
|
|
218
|
+
filesChecked: specFiles.length,
|
|
219
|
+
specsChecked: loadedSpecs.length
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function applySafetyChecks(sqlPath, specId, specFilePath, strict, violations) {
|
|
223
|
+
const sql = (0, node_fs_1.readFileSync)(sqlPath, 'utf8');
|
|
224
|
+
const chunks = rawsql_ts_1.MultiQuerySplitter.split(sql).queries.filter((item) => !item.isEmpty);
|
|
225
|
+
for (const chunk of chunks) {
|
|
226
|
+
const statement = chunk.sql.trim();
|
|
227
|
+
if (!statement) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
let parsed;
|
|
231
|
+
try {
|
|
232
|
+
parsed = rawsql_ts_1.SqlParser.parse(statement);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
violations.push({
|
|
236
|
+
rule: 'sql-parse-error',
|
|
237
|
+
severity: 'warning',
|
|
238
|
+
specId,
|
|
239
|
+
filePath: specFilePath,
|
|
240
|
+
message: `SQL parse failed in safety check: ${error instanceof Error ? error.message : String(error)}`
|
|
241
|
+
});
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const severity = strict ? 'error' : 'warning';
|
|
245
|
+
if (parsed instanceof rawsql_ts_1.UpdateQuery || parsed instanceof rawsql_ts_1.DeleteQuery) {
|
|
246
|
+
if (!parsed.whereClause) {
|
|
247
|
+
violations.push({
|
|
248
|
+
rule: 'safety-missing-where',
|
|
249
|
+
severity,
|
|
250
|
+
specId,
|
|
251
|
+
filePath: specFilePath,
|
|
252
|
+
message: 'UPDATE/DELETE statement without WHERE detected.'
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (hasRootLevelSelectWildcard(parsed)) {
|
|
258
|
+
violations.push({
|
|
259
|
+
rule: 'safety-select-star',
|
|
260
|
+
severity,
|
|
261
|
+
specId,
|
|
262
|
+
filePath: specFilePath,
|
|
263
|
+
message: 'SELECT * detected at root query level.'
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function hasRootLevelSelectWildcard(parsed) {
|
|
269
|
+
if (parsed instanceof rawsql_ts_1.SimpleSelectQuery) {
|
|
270
|
+
return parsed.selectClause.items.some((item) => isWildcardSelectItem(item.value));
|
|
271
|
+
}
|
|
272
|
+
if (parsed instanceof rawsql_ts_1.BinarySelectQuery) {
|
|
273
|
+
return hasRootLevelSelectWildcard(parsed.left) || hasRootLevelSelectWildcard(parsed.right);
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
function isWildcardSelectItem(value) {
|
|
278
|
+
return value instanceof rawsql_ts_1.ColumnReference && value.column.name === '*';
|
|
279
|
+
}
|
|
280
|
+
function validateMapping(specId, filePath, mapping, violations) {
|
|
281
|
+
const hasPrefix = typeof mapping.prefix === 'string' && mapping.prefix.trim().length > 0;
|
|
282
|
+
if (!hasPrefix && mapping.columnMap === undefined) {
|
|
283
|
+
violations.push({
|
|
284
|
+
rule: 'mapping-invalid-entry',
|
|
285
|
+
severity: 'error',
|
|
286
|
+
specId,
|
|
287
|
+
filePath,
|
|
288
|
+
message: 'output.mapping must provide prefix or columnMap.'
|
|
289
|
+
});
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
if (mapping.columnMap === undefined) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (!(0, sqlCatalogDiscovery_1.isPlainObject)(mapping.columnMap)) {
|
|
296
|
+
violations.push({
|
|
297
|
+
rule: 'mapping-invalid-entry',
|
|
298
|
+
severity: 'error',
|
|
299
|
+
specId,
|
|
300
|
+
filePath,
|
|
301
|
+
message: 'output.mapping.columnMap must be an object when provided.'
|
|
302
|
+
});
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const seenColumns = new Map();
|
|
306
|
+
for (const key of Object.keys(mapping.columnMap).sort()) {
|
|
307
|
+
const value = mapping.columnMap[key];
|
|
308
|
+
if (!key.trim()) {
|
|
309
|
+
violations.push({
|
|
310
|
+
rule: 'mapping-invalid-entry',
|
|
311
|
+
severity: 'error',
|
|
312
|
+
specId,
|
|
313
|
+
filePath,
|
|
314
|
+
message: 'output.mapping.columnMap keys must be non-empty strings.'
|
|
315
|
+
});
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
319
|
+
violations.push({
|
|
320
|
+
rule: 'mapping-invalid-entry',
|
|
321
|
+
severity: 'error',
|
|
322
|
+
specId,
|
|
323
|
+
filePath,
|
|
324
|
+
message: `output.mapping.columnMap["${key}"] must be a non-empty string.`
|
|
325
|
+
});
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
const normalized = value.trim();
|
|
329
|
+
const prev = seenColumns.get(normalized);
|
|
330
|
+
if (prev) {
|
|
331
|
+
violations.push({
|
|
332
|
+
rule: 'mapping-duplicate-entry',
|
|
333
|
+
severity: 'error',
|
|
334
|
+
specId,
|
|
335
|
+
filePath,
|
|
336
|
+
message: `Duplicate mapped column "${normalized}" for keys "${prev}" and "${key}".`
|
|
337
|
+
});
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
seenColumns.set(normalized, key);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** Format check results into human text or deterministic JSON text. */
|
|
344
|
+
function formatOutput(result, format) {
|
|
345
|
+
if (format === 'json') {
|
|
346
|
+
return `${JSON.stringify(result, null, 2)}\n`;
|
|
347
|
+
}
|
|
348
|
+
if (result.violations.length === 0) {
|
|
349
|
+
return `contract check passed (${result.specsChecked} specs in ${result.filesChecked} files)`;
|
|
350
|
+
}
|
|
351
|
+
const lines = [];
|
|
352
|
+
lines.push(`contract check found ${result.violations.length} violation(s)`);
|
|
353
|
+
for (const item of result.violations) {
|
|
354
|
+
lines.push(`- [${item.severity}] ${item.rule} ${item.specId} @ ${item.filePath}`);
|
|
355
|
+
lines.push(` ${item.message}`);
|
|
356
|
+
}
|
|
357
|
+
return lines.join('\n');
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=checkContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkContract.js","sourceRoot":"","sources":["../../src/commands/checkContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DbConnectionFlags, ResolvedDatabaseConnection } from '../utils/dbConnection';
|
|
2
|
+
export interface ConnectionCliOptions {
|
|
3
|
+
url?: string;
|
|
4
|
+
dbHost?: string;
|
|
5
|
+
dbPort?: string;
|
|
6
|
+
dbUser?: string;
|
|
7
|
+
dbPassword?: string;
|
|
8
|
+
dbName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveExplicitCliConnection(options: ConnectionCliOptions): ResolvedDatabaseConnection;
|
|
11
|
+
export declare function resolveZtdOwnedCliConnection(): ResolvedDatabaseConnection;
|
|
12
|
+
export declare function buildFlagSet(options: ConnectionCliOptions): DbConnectionFlags;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveExplicitCliConnection = resolveExplicitCliConnection;
|
|
4
|
+
exports.resolveZtdOwnedCliConnection = resolveZtdOwnedCliConnection;
|
|
5
|
+
exports.buildFlagSet = buildFlagSet;
|
|
6
|
+
const dbConnection_1 = require("../utils/dbConnection");
|
|
7
|
+
function resolveExplicitCliConnection(options) {
|
|
8
|
+
return (0, dbConnection_1.resolveExplicitTargetConnection)(buildFlagSet(options), options.url);
|
|
9
|
+
}
|
|
10
|
+
function resolveZtdOwnedCliConnection() {
|
|
11
|
+
return (0, dbConnection_1.resolveZtdOwnedTestConnection)();
|
|
12
|
+
}
|
|
13
|
+
function buildFlagSet(options) {
|
|
14
|
+
return {
|
|
15
|
+
host: options.dbHost,
|
|
16
|
+
port: options.dbPort,
|
|
17
|
+
user: options.dbUser,
|
|
18
|
+
password: options.dbPassword,
|
|
19
|
+
database: options.dbName
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=connectionOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionOptions.js","sourceRoot":"","sources":["../../src/commands/connectionOptions.ts"],"names":[],"mappings":";;AAeA,oEAEC;AAED,oEAEC;AAED,oCAQC;AA/BD,wDAG+B;AAY/B,SAAgB,4BAA4B,CAAC,OAA6B;IACxE,OAAO,IAAA,8CAA+B,EAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,4BAA4B;IAC1C,OAAO,IAAA,4CAA6B,GAAE,CAAC;AACzC,CAAC;AAED,SAAgB,YAAY,CAAC,OAA6B;IACxD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,IAAI,EAAE,OAAO,CAAC,MAAM;QACpB,QAAQ,EAAE,OAAO,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers all DDL-related commands (`pull`, `gen-entities`, `diff`) on the top-level CLI program.
|
|
4
|
+
* @param program - The Commander program instance to extend.
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerDdlCommands(program: Command): void;
|
|
7
|
+
export { collectDirectories, parseExtensions, DEFAULT_EXTENSIONS, DEFAULT_DDL_DIRECTORY } from './options';
|