open-local-audit 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +33 -4
- package/dist/cli.js +74 -7
- package/dist/cli.js.map +1 -1
- package/dist/csv.js +4 -3
- package/dist/csv.js.map +1 -1
- package/dist/discovery.d.ts +54 -0
- package/dist/discovery.js +257 -2
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/profiles.js +128 -2
- package/dist/profiles.js.map +1 -1
- package/dist/reporters.js +34 -7
- package/dist/reporters.js.map +1 -1
- package/dist/schema.d.ts +25 -4
- package/dist/schema.js +19 -1
- package/dist/schema.js.map +1 -1
- package/dist/secrets.d.ts +5 -0
- package/dist/secrets.js +31 -0
- package/dist/secrets.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,25 @@ All notable changes to Open Local Audit will be documented here.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## v0.12.0 - 2026-05-14
|
|
8
|
+
|
|
9
|
+
- Added discovery suppression lists with `--suppression-list` to skip previously reviewed leads.
|
|
10
|
+
- Added `leadKey`, `reviewStatus`, `reviewReason`, and `lastReviewedAt` columns to discovery CSV exports for local review workflows.
|
|
11
|
+
- Added `--min-opportunity-score` for filtering discovery exports to higher-value opportunities.
|
|
12
|
+
- Added `--review-csv` for merging local operator review decisions across discovery reruns.
|
|
13
|
+
- Added `--duplicates-json` for reporting duplicate lead groups.
|
|
14
|
+
- Added lawyer, clinic, gym, hotel, and auto-service industry profiles.
|
|
15
|
+
- Polished HTML reports with a branded shell, summary cards, and stronger visual hierarchy.
|
|
16
|
+
- Added Windows user-environment fallback for `GOOGLE_MAPS_API_KEY`.
|
|
17
|
+
|
|
18
|
+
## v0.11.0 - 2026-05-13
|
|
19
|
+
|
|
20
|
+
- Added discovery controls: `--limit`, `--max-audits`, and `--summary-json`.
|
|
21
|
+
- Added terminal discovery summary output for website, audit, priority, and average-score counts.
|
|
22
|
+
- Added `opportunityScore` to discovery prospect CSV exports.
|
|
23
|
+
- Added CSV formula-injection hardening for exported CSV cells.
|
|
24
|
+
- Added a Google Maps Platform billing warning when `--provider google-places` is used.
|
|
25
|
+
|
|
7
26
|
## v0.10.0 - 2026-05-12
|
|
8
27
|
|
|
9
28
|
- Added an opt-in `google-places` provider for `discover`.
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Open Local Audit is an open-source website and local presence auditor for small
|
|
|
4
4
|
|
|
5
5
|
## Current stage
|
|
6
6
|
|
|
7
|
-
Published CLI. The project can run a single URL audit, an opt-in Playwright-rendered audit with screenshot evidence, a plain-text batch URL list, or a profile-aware CSV batch file, optionally check same-origin links, and produce JSON, Markdown, HTML, or all report formats. Batch runs can use controlled concurrency, write per-site reports, add aggregate insight sections to the top-level index, and optionally export prospect CSV data for triage.
|
|
7
|
+
Published CLI. The project can run a single URL audit, an opt-in Playwright-rendered audit with screenshot evidence, a plain-text batch URL list, or a profile-aware CSV batch file, optionally check same-origin links, and produce JSON, Markdown, HTML, or all report formats. Batch runs can use controlled concurrency, write per-site reports, add aggregate insight sections to the top-level index, and optionally export prospect CSV data for triage. Discovery runs can control Google Places result counts, cap website audits, write summary JSON, merge local review CSVs, and report duplicate lead groups.
|
|
8
8
|
|
|
9
9
|
## Business purpose
|
|
10
10
|
|
|
@@ -78,6 +78,8 @@ Run with an industry profile:
|
|
|
78
78
|
open-local-audit https://example.com --profile dental --format markdown
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
Supported profiles are `generic`, `dental`, `beauty`, `restaurant`, `contractor`, `lawyer`, `clinic`, `gym`, `hotel`, and `auto-service`.
|
|
82
|
+
|
|
81
83
|
Render the page before auditing when static HTML is not enough:
|
|
82
84
|
|
|
83
85
|
```bash
|
|
@@ -168,7 +170,29 @@ Google Places lead discovery:
|
|
|
168
170
|
GOOGLE_MAPS_API_KEY=your-key open-local-audit discover "guzellik salonu Umraniye" --provider google-places --profile beauty --out-dir reports/umraniye-beauty --export-csv leads.csv
|
|
169
171
|
```
|
|
170
172
|
|
|
171
|
-
|
|
173
|
+
Control discovery cost and audit volume:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
GOOGLE_MAPS_API_KEY=your-key open-local-audit discover "dis klinigi Kadikoy" --provider google-places --limit 20 --max-audits 5 --summary-json discovery-summary.json --out-dir reports/kadikoy-dental --export-csv leads.csv
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Skip previously reviewed leads and keep only stronger opportunities:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
open-local-audit discover --input places.csv --provider manual-csv --suppression-list reviewed-leads.csv --min-opportunity-score 90 --dry-run --export-csv leads.csv
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Maintain a review queue and duplicate report across reruns:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
open-local-audit discover --input places.csv --provider manual-csv --review-csv review.csv --duplicates-json duplicates.json --dry-run --export-csv leads.csv
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
The `google-places` provider is opt-in and requires `GOOGLE_MAPS_API_KEY`. It uses the official Places Text Search API and requests only `places.id`, `places.displayName`, and `places.websiteUri`. It does not scrape Google Maps, collect reviews/photos/ratings, send outreach, or store raw Places responses. Google Maps Platform billing and quota limits apply to API use, and the CLI prints a billing warning when this provider is selected.
|
|
192
|
+
|
|
193
|
+
Discovery CSV exports include `leadKey`, `opportunityScore`, and review columns for local triage. A suppression list can reuse a prior discovery CSV or a smaller CSV with `leadKey`, `sourceId`, `websiteUrl`, or `label` plus optional `reviewStatus`, `reviewReason`, and `lastReviewedAt` columns. Rows marked `rejected`, `contacted`, `not-fit`, `do-not-contact`, or `suppressed` are skipped before audits run. `--review-csv` preserves prior operator decisions and adds new leads as `pending`. Spreadsheet formula-like cell values are neutralized before export.
|
|
194
|
+
|
|
195
|
+
See [Google Maps API key setup](./docs/operations/google-maps-api-key.md) for local environment setup.
|
|
172
196
|
|
|
173
197
|
Check same-origin links and fail CI when high-severity issues are found:
|
|
174
198
|
|
|
@@ -190,7 +214,7 @@ The first implementation milestone is a CLI that accepts one URL and outputs:
|
|
|
190
214
|
- Batch index filtering, sorting, and top-N triage controls.
|
|
191
215
|
- Controlled parallel batch audits with `--concurrency`.
|
|
192
216
|
- Batch index insights for average score, profile breakdown, segment breakdown, and frequent findings.
|
|
193
|
-
- Industry profiles for generic, dental, beauty, restaurant, and
|
|
217
|
+
- Industry profiles for generic, dental, beauty, restaurant, contractor, lawyer, clinic, gym, hotel, and auto-service audits.
|
|
194
218
|
- Profile-specific findings for dental, beauty, restaurant, and contractor conversion/trust signals.
|
|
195
219
|
- Prospect CSV export with profile, score, top finding, report path, and error columns.
|
|
196
220
|
- Optional rendered DOM audits with `--render`.
|
|
@@ -217,8 +241,13 @@ Example report artifacts are available under [`examples/reports`](./examples/rep
|
|
|
217
241
|
- `--render` requires Playwright in the calling project and a working browser runtime.
|
|
218
242
|
- `--screenshot` uses the rendered audit path, requires `--out-dir`, and also requires Playwright.
|
|
219
243
|
- Batch triage options apply to the aggregate batch index, not individual per-site report contents.
|
|
220
|
-
- `--export-csv` is
|
|
244
|
+
- `--export-csv` is supported for batch audits and discovery exports.
|
|
221
245
|
- `discover --provider google-places` requires `GOOGLE_MAPS_API_KEY` and may incur Google Maps Platform billing.
|
|
246
|
+
- `--limit` caps Google Places candidates at 50; it does not paginate beyond one Text Search request.
|
|
247
|
+
- `--max-audits` limits website audits only; all discovered candidates still appear in `leads.csv`.
|
|
248
|
+
- `--suppression-list` uses exact lead identity matching; source IDs are preferred, then normalized website URLs, then normalized labels.
|
|
249
|
+
- `--review-csv` is local operator state only; it does not send outreach or sync to a CRM.
|
|
250
|
+
- `--duplicates-json` reports exact lead-key duplicates, not fuzzy business-name matches.
|
|
222
251
|
- Batch input requires `--out-dir` and cannot be combined with a positional URL.
|
|
223
252
|
- Industry profiles are deterministic vertical heuristics, not a replacement for a human review of each business model.
|
|
224
253
|
- Higher `--concurrency` values can increase network load against audited sites; use conservative values for prospect batches.
|
package/dist/cli.js
CHANGED
|
@@ -4,10 +4,11 @@ import { mkdir, writeFile } from "node:fs/promises";
|
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { auditUrl } from "./audit.js";
|
|
6
6
|
import { readBatchInput, runBatchReports } from "./batch.js";
|
|
7
|
-
import { buildProspectRows, fetchGooglePlacesCandidates, readManualDiscoveryCsv, renderProspectRowsCsv, resolveCandidateWebsite } from "./discovery.js";
|
|
7
|
+
import { buildDiscoverySummary, buildProspectRows, findDuplicateProspectGroups, fetchGooglePlacesCandidates, filterSuppressedProspects, mergeDiscoveryReviewRows, readLeadSuppressionCsv, readLeadReviewCsv, readManualDiscoveryCsv, renderDiscoveryReviewCsv, renderProspectRowsCsv, resolveCandidateWebsite } from "./discovery.js";
|
|
8
8
|
import { shouldFailOnThreshold } from "./exit-policy.js";
|
|
9
9
|
import { writeReportOutputs } from "./output.js";
|
|
10
10
|
import { cliOptionsSchema, inputUrlSchema } from "./schema.js";
|
|
11
|
+
import { resolveGoogleMapsApiKey } from "./secrets.js";
|
|
11
12
|
import { renderTerminalSummary } from "./summary.js";
|
|
12
13
|
const program = new Command();
|
|
13
14
|
const discoveryProgram = program
|
|
@@ -19,7 +20,14 @@ const discoveryProgram = program
|
|
|
19
20
|
.option("--profile <profile>", "default industry profile for candidates", "generic")
|
|
20
21
|
.option("--out-dir <path>", "write generated audit reports to a directory")
|
|
21
22
|
.option("--export-csv <path>", "write lead discovery CSV output")
|
|
23
|
+
.option("--summary-json <path>", "write discovery summary JSON output")
|
|
24
|
+
.option("--suppression-list <path>", "read reviewed or suppressed lead identities from a CSV file")
|
|
25
|
+
.option("--review-csv <path>", "write or merge a local discovery review queue CSV")
|
|
26
|
+
.option("--duplicates-json <path>", "write duplicate lead groups as JSON")
|
|
22
27
|
.option("--dry-run", "resolve candidates and write leads without auditing websites", false)
|
|
28
|
+
.option("--limit <count>", "maximum Google Places candidates to request", "10")
|
|
29
|
+
.option("--max-audits <count>", "maximum website-present candidates to audit")
|
|
30
|
+
.option("--min-opportunity-score <score>", "export only leads at or above an opportunity score")
|
|
23
31
|
.option("--concurrency <count>", "maximum concurrent audits when dry-run is not used", "1")
|
|
24
32
|
.addHelpText("after", `
|
|
25
33
|
Discovery boundaries:
|
|
@@ -32,6 +40,32 @@ function preferredReportPath(slug, outputs) {
|
|
|
32
40
|
outputs[0];
|
|
33
41
|
return preferred?.path ? `${slug}/${preferred.path.split(/[\\/]/).pop()}` : undefined;
|
|
34
42
|
}
|
|
43
|
+
function renderDiscoverySummary(summary) {
|
|
44
|
+
return [
|
|
45
|
+
`With website: ${summary.withWebsite}`,
|
|
46
|
+
`Without website: ${summary.withoutWebsite}`,
|
|
47
|
+
`Unknown website: ${summary.unknownWebsite}`,
|
|
48
|
+
`Audited: ${summary.audited}`,
|
|
49
|
+
`Audit failed: ${summary.auditFailed}`,
|
|
50
|
+
`Not audited: ${summary.notAudited}`,
|
|
51
|
+
`Suppressed: ${summary.suppressedCandidates}`,
|
|
52
|
+
`Average score: ${summary.averageScore ?? "N/A"}`
|
|
53
|
+
].join("\n");
|
|
54
|
+
}
|
|
55
|
+
async function readOptionalReviewCsv(path) {
|
|
56
|
+
if (!path) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
return await readLeadReviewCsv(path);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error && typeof error === "object" && "code" in error && error.code === "ENOENT") {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
35
69
|
discoveryProgram.action(async (query) => {
|
|
36
70
|
try {
|
|
37
71
|
const rawDiscoveryOptions = {
|
|
@@ -46,7 +80,14 @@ discoveryProgram.action(async (query) => {
|
|
|
46
80
|
exportCsv: true,
|
|
47
81
|
dryRun: true,
|
|
48
82
|
concurrency: true,
|
|
49
|
-
provider: true
|
|
83
|
+
provider: true,
|
|
84
|
+
limit: true,
|
|
85
|
+
maxAudits: true,
|
|
86
|
+
summaryJson: true,
|
|
87
|
+
suppressionList: true,
|
|
88
|
+
reviewCsv: true,
|
|
89
|
+
duplicatesJson: true,
|
|
90
|
+
minOpportunityScore: true
|
|
50
91
|
})
|
|
51
92
|
.parse(rawDiscoveryOptions);
|
|
52
93
|
if (!options.exportCsv) {
|
|
@@ -66,23 +107,35 @@ discoveryProgram.action(async (query) => {
|
|
|
66
107
|
if (options.provider === "google-places" && options.input) {
|
|
67
108
|
throw new Error("--input is only supported when --provider manual-csv is used");
|
|
68
109
|
}
|
|
110
|
+
if (options.provider === "google-places") {
|
|
111
|
+
process.stderr.write("open-local-audit: Google Maps Platform billing may apply for --provider google-places\n");
|
|
112
|
+
}
|
|
69
113
|
const candidates = options.provider === "manual-csv"
|
|
70
114
|
? await readManualDiscoveryCsv(options.input ?? "", {
|
|
71
115
|
defaultProfile: options.profile
|
|
72
116
|
})
|
|
73
117
|
: await fetchGooglePlacesCandidates(query ?? "", {
|
|
74
|
-
apiKey:
|
|
75
|
-
defaultProfile: options.profile
|
|
118
|
+
apiKey: resolveGoogleMapsApiKey(),
|
|
119
|
+
defaultProfile: options.profile,
|
|
120
|
+
limit: options.limit
|
|
76
121
|
});
|
|
77
122
|
const resolutions = candidates.map(resolveCandidateWebsite);
|
|
78
123
|
let prospectInputs = candidates.map((candidate, index) => ({
|
|
79
124
|
candidate,
|
|
80
125
|
resolution: resolutions[index]
|
|
81
126
|
}));
|
|
127
|
+
const existingReviewRows = await readOptionalReviewCsv(options.reviewCsv);
|
|
128
|
+
const suppressionEntries = [
|
|
129
|
+
...(options.suppressionList ? await readLeadSuppressionCsv(options.suppressionList) : []),
|
|
130
|
+
...existingReviewRows
|
|
131
|
+
];
|
|
132
|
+
const suppressionResult = filterSuppressedProspects(prospectInputs, suppressionEntries);
|
|
133
|
+
prospectInputs = suppressionResult.included;
|
|
82
134
|
if (!options.dryRun) {
|
|
83
135
|
const auditable = prospectInputs
|
|
84
136
|
.map((input, index) => ({ ...input, index }))
|
|
85
|
-
.filter((input) => input.resolution.status === "resolved" && input.resolution.websiteUrl)
|
|
137
|
+
.filter((input) => input.resolution.status === "resolved" && input.resolution.websiteUrl)
|
|
138
|
+
.slice(0, options.maxAudits);
|
|
86
139
|
const auditResults = await runBatchReports(auditable.map((input) => ({
|
|
87
140
|
url: input.resolution.websiteUrl ?? "",
|
|
88
141
|
label: input.candidate.label,
|
|
@@ -122,10 +175,24 @@ discoveryProgram.action(async (query) => {
|
|
|
122
175
|
};
|
|
123
176
|
});
|
|
124
177
|
}
|
|
125
|
-
const rows = buildProspectRows(prospectInputs);
|
|
178
|
+
const rows = buildProspectRows(prospectInputs).filter((row) => options.minOpportunityScore === undefined ? true : row.opportunityScore >= options.minOpportunityScore);
|
|
126
179
|
await mkdir(dirname(options.exportCsv), { recursive: true });
|
|
127
180
|
await writeFile(options.exportCsv, renderProspectRowsCsv(rows), "utf8");
|
|
181
|
+
if (options.reviewCsv) {
|
|
182
|
+
await mkdir(dirname(options.reviewCsv), { recursive: true });
|
|
183
|
+
await writeFile(options.reviewCsv, renderDiscoveryReviewCsv(mergeDiscoveryReviewRows(rows, existingReviewRows)), "utf8");
|
|
184
|
+
}
|
|
185
|
+
if (options.duplicatesJson) {
|
|
186
|
+
await mkdir(dirname(options.duplicatesJson), { recursive: true });
|
|
187
|
+
await writeFile(options.duplicatesJson, `${JSON.stringify({ duplicateGroups: findDuplicateProspectGroups(rows) }, null, 2)}\n`, "utf8");
|
|
188
|
+
}
|
|
189
|
+
const summary = buildDiscoverySummary(rows, suppressionResult.suppressedCount);
|
|
190
|
+
if (options.summaryJson) {
|
|
191
|
+
await mkdir(dirname(options.summaryJson), { recursive: true });
|
|
192
|
+
await writeFile(options.summaryJson, `${JSON.stringify(summary, null, 2)}\n`, "utf8");
|
|
193
|
+
}
|
|
128
194
|
process.stdout.write(`Discovered ${rows.length} lead${rows.length === 1 ? "" : "s"}\n`);
|
|
195
|
+
process.stdout.write(`${renderDiscoverySummary(summary)}\n`);
|
|
129
196
|
}
|
|
130
197
|
catch (error) {
|
|
131
198
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
@@ -146,7 +213,7 @@ program
|
|
|
146
213
|
.option("--top <count>", "limit the batch index to the top N entries after filtering and sorting")
|
|
147
214
|
.option("--sort <sort>", "batch index sort: score-asc or severity-desc")
|
|
148
215
|
.option("--concurrency <count>", "maximum concurrent batch audits", "1")
|
|
149
|
-
.option("--profile <profile>", "industry profile: generic, dental, beauty, restaurant, or
|
|
216
|
+
.option("--profile <profile>", "industry profile: generic, dental, beauty, restaurant, contractor, lawyer, clinic, gym, hotel, or auto-service", "generic")
|
|
150
217
|
.option("--export-csv <path>", "write a batch prospect CSV export")
|
|
151
218
|
.option("--timeout <ms>", "request timeout in milliseconds", "10000")
|
|
152
219
|
.option("--max-redirects <count>", "maximum redirects to follow", "5")
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EAExB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,MAAM,gBAAgB,GAAG,OAAO;KAC7B,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qGAAqG,CAAC;KAClH,QAAQ,CAAC,SAAS,EAAE,mCAAmC,CAAC;KACxD,MAAM,CAAC,gBAAgB,EAAE,kDAAkD,CAAC;KAC5E,MAAM,CAAC,uBAAuB,EAAE,iDAAiD,EAAE,YAAY,CAAC;KAChG,MAAM,CAAC,qBAAqB,EAAE,yCAAyC,EAAE,SAAS,CAAC;KACnF,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;KAC1E,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;KAChE,MAAM,CAAC,WAAW,EAAE,8DAA8D,EAAE,KAAK,CAAC;KAC1F,MAAM,CAAC,uBAAuB,EAAE,oDAAoD,EAAE,GAAG,CAAC;KAC1F,WAAW,CACV,OAAO,EACP;;;;CAIH,CACE,CAAC;AAEJ,SAAS,mBAAmB,CAAC,IAAY,EAAE,OAAiD;IAC1F,MAAM,SAAS,GACb,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;QACtD,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,OAAO,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxF,CAAC;AAED,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG;YAC1B,GAAG,OAAO,CAAC,IAAI,EAAE;YACjB,GAAG,gBAAgB,CAAC,IAAI,EAAE;SAC3B,CAAC;QACF,MAAM,OAAO,GAAG,gBAAgB;aAC7B,IAAI,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC;aACD,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE9B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACtC,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAClG,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,eAAe,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,KAAK,YAAY;YAC/B,CAAC,CAAC,MAAM,sBAAsB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;gBAChD,cAAc,EAAE,OAAO,CAAC,OAAO;aAChC,CAAC;YACJ,CAAC,CAAC,MAAM,2BAA2B,CAAC,KAAK,IAAI,EAAE,EAAE;gBAC7C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBACvC,cAAc,EAAE,OAAO,CAAC,OAAO;aAChC,CAAC,CAAC;QAET,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC5D,IAAI,cAAc,GAAuB,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7E,SAAS;YACT,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,cAAc;iBAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC5C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAE5F,MAAM,YAAY,GAAG,MAAM,eAAe,CACxC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxB,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE;gBACtC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK;gBAC5B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;gBAChC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;aACjC,CAAC,CAAC,EACH;gBACE,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;gBACnC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CACF,CAAC;YAEF,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnD,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACrF,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO;wBACL,GAAG,KAAK;wBACR,KAAK,EAAE;4BACL,MAAM,EAAE,QAAQ;4BAChB,KAAK,EAAE,MAAM,CAAC,KAAK;yBACpB;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpH,OAAO;oBACL,GAAG,KAAK;oBACR,KAAK,EAAE;wBACL,MAAM,EAAE,SAAS;wBACjB,KAAK;wBACL,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK;wBAC5C,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;qBAC7D;iBACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,+EAA+E,CAAC;KAC5F,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,gBAAgB,EAAE,6CAA6C,CAAC;KACvE,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,EAAE,UAAU,CAAC;KAC1F,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;KACtE,MAAM,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;KACzE,MAAM,CAAC,qBAAqB,EAAE,qDAAqD,CAAC;KACpF,MAAM,CAAC,qBAAqB,EAAE,iEAAiE,CAAC;KAChG,MAAM,CAAC,eAAe,EAAE,wEAAwE,CAAC;KACjG,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;KACvE,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,EAAE,GAAG,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,sEAAsE,EAAE,SAAS,CAAC;KAChH,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,EAAE,OAAO,CAAC;KACpE,MAAM,CAAC,yBAAyB,EAAE,6BAA6B,EAAE,GAAG,CAAC;KACrE,MAAM,CAAC,eAAe,EAAE,mDAAmD,EAAE,KAAK,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,EAAE,IAAI,CAAC;KACzE,MAAM,CAAC,UAAU,EAAE,6DAA6D,EAAE,KAAK,CAAC;KACxF,MAAM,CAAC,cAAc,EAAE,yEAAyE,EAAE,KAAK,CAAC;KACxG,MAAM,CAAC,sBAAsB,EAAE,0EAA0E,EAAE,MAAM,CAAC;KAClH,MAAM,CAAC,UAAU,EAAE,0BAA0B,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,UAAmB,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU;YAC5C,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;QAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;gBAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE;oBACL,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB;gBACD,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACtB,QAAQ,CAAC,GAAG,EAAE;oBACZ,GAAG,YAAY;oBACf,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;oBAClG,oBAAoB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;iBAChF,CAAC;aACL,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1F,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAChG,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;gBACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE;YACjC,GAAG,YAAY;YACf,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;YAClG,oBAAoB,EAAE,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS;SAC9E,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE;YAC/C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/csv.js
CHANGED
|
@@ -31,9 +31,10 @@ export function cleanInputLines(content) {
|
|
|
31
31
|
.filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
32
32
|
}
|
|
33
33
|
export function escapeCsvCell(value) {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const safeValue = /^\s*[=+\-@]/.test(value) ? `'${value}` : value;
|
|
35
|
+
if (!/[",\r\n]/.test(safeValue)) {
|
|
36
|
+
return safeValue;
|
|
36
37
|
}
|
|
37
|
-
return `"${
|
|
38
|
+
return `"${safeValue.replace(/"/g, '""')}"`;
|
|
38
39
|
}
|
|
39
40
|
//# sourceMappingURL=csv.js.map
|
package/dist/csv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../src/csv.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,IAAI,GAAG,CAAC;YACf,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,CAAC,MAAM,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO;SACX,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../src/csv.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC3C,OAAO,IAAI,GAAG,CAAC;YACf,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,CAAC,MAAM,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3B,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,OAAO;SACX,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC9C,CAAC"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export interface ProspectRowInput {
|
|
|
29
29
|
audit?: DiscoveryAuditResult;
|
|
30
30
|
}
|
|
31
31
|
export interface ProspectExportRow {
|
|
32
|
+
leadKey: string;
|
|
32
33
|
source: string;
|
|
33
34
|
sourceId?: string;
|
|
34
35
|
label?: string;
|
|
@@ -39,21 +40,74 @@ export interface ProspectExportRow {
|
|
|
39
40
|
auditStatus?: "success" | "failed" | "not-audited";
|
|
40
41
|
score?: number;
|
|
41
42
|
topFinding?: string;
|
|
43
|
+
opportunityScore: number;
|
|
42
44
|
priority: "high" | "medium" | "low";
|
|
43
45
|
nextAction: string;
|
|
46
|
+
reviewStatus: string;
|
|
47
|
+
reviewReason?: string;
|
|
48
|
+
lastReviewedAt?: string;
|
|
44
49
|
reportPath?: string;
|
|
45
50
|
error?: string;
|
|
46
51
|
}
|
|
52
|
+
export interface LeadSuppressionEntry {
|
|
53
|
+
leadKey: string;
|
|
54
|
+
reviewStatus?: string;
|
|
55
|
+
reviewReason?: string;
|
|
56
|
+
lastReviewedAt?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface LeadReviewRow {
|
|
59
|
+
leadKey: string;
|
|
60
|
+
source: string;
|
|
61
|
+
sourceId?: string;
|
|
62
|
+
label?: string;
|
|
63
|
+
websiteUrl?: string;
|
|
64
|
+
reviewStatus: string;
|
|
65
|
+
reviewReason?: string;
|
|
66
|
+
lastReviewedAt?: string;
|
|
67
|
+
opportunityScore?: number;
|
|
68
|
+
priority?: ProspectExportRow["priority"];
|
|
69
|
+
nextAction?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface DuplicateProspectGroup {
|
|
72
|
+
leadKey: string;
|
|
73
|
+
count: number;
|
|
74
|
+
labels: string[];
|
|
75
|
+
sources: string[];
|
|
76
|
+
}
|
|
47
77
|
export interface ReadManualDiscoveryCsvOptions {
|
|
48
78
|
defaultProfile?: AuditProfile;
|
|
49
79
|
}
|
|
50
80
|
export interface FetchGooglePlacesCandidatesOptions {
|
|
51
81
|
apiKey?: string;
|
|
52
82
|
defaultProfile?: AuditProfile;
|
|
83
|
+
limit?: number;
|
|
53
84
|
fetch?: typeof fetch;
|
|
54
85
|
}
|
|
86
|
+
export interface DiscoverySummary {
|
|
87
|
+
totalCandidates: number;
|
|
88
|
+
suppressedCandidates: number;
|
|
89
|
+
withWebsite: number;
|
|
90
|
+
withoutWebsite: number;
|
|
91
|
+
unknownWebsite: number;
|
|
92
|
+
audited: number;
|
|
93
|
+
auditFailed: number;
|
|
94
|
+
notAudited: number;
|
|
95
|
+
averageScore?: number;
|
|
96
|
+
priority: Record<ProspectExportRow["priority"], number>;
|
|
97
|
+
}
|
|
55
98
|
export declare function readManualDiscoveryCsv(path: string, options?: ReadManualDiscoveryCsvOptions): Promise<PlaceCandidate[]>;
|
|
99
|
+
export declare function readLeadSuppressionCsv(path: string): Promise<LeadSuppressionEntry[]>;
|
|
100
|
+
export declare function readLeadReviewCsv(path: string): Promise<LeadReviewRow[]>;
|
|
56
101
|
export declare function fetchGooglePlacesCandidates(query: string, options?: FetchGooglePlacesCandidatesOptions): Promise<PlaceCandidate[]>;
|
|
57
102
|
export declare function resolveCandidateWebsite(candidate: Pick<PlaceCandidate, "websiteUri">): WebsiteResolution;
|
|
103
|
+
export declare function stableLeadKey(input: ProspectRowInput): string;
|
|
104
|
+
export declare function filterSuppressedProspects(inputs: ProspectRowInput[], entries: LeadSuppressionEntry[]): {
|
|
105
|
+
included: ProspectRowInput[];
|
|
106
|
+
suppressedCount: number;
|
|
107
|
+
};
|
|
108
|
+
export declare function mergeDiscoveryReviewRows(rows: ProspectExportRow[], existingRows?: LeadReviewRow[]): LeadReviewRow[];
|
|
109
|
+
export declare function findDuplicateProspectGroups(rows: ProspectExportRow[]): DuplicateProspectGroup[];
|
|
58
110
|
export declare function buildProspectRows(inputs: ProspectRowInput[]): ProspectExportRow[];
|
|
111
|
+
export declare function buildDiscoverySummary(rows: ProspectExportRow[], suppressedCandidates?: number): DiscoverySummary;
|
|
59
112
|
export declare function renderProspectRowsCsv(rows: ProspectExportRow[]): string;
|
|
113
|
+
export declare function renderDiscoveryReviewCsv(rows: LeadReviewRow[]): string;
|