geotechcli 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ export interface ChartSpec {
2
+ id: string;
3
+ title: string;
4
+ xLabel: string;
5
+ yLabel: string;
6
+ xValues: number[];
7
+ series: number[][];
8
+ labels: string[];
9
+ note?: string;
10
+ }
11
+ export interface VisualizationSource {
12
+ sourceType: 'json' | 'csv' | 'xlsx';
13
+ sourceName: string;
14
+ charts: ChartSpec[];
15
+ }
16
+ interface TableChartOptions {
17
+ sourceName: string;
18
+ titlePrefix?: string;
19
+ xColumn?: string;
20
+ yColumns?: string[];
21
+ }
22
+ type TableRow = Record<string, string | number | boolean | null>;
23
+ export declare function buildChartsFromTable(rows: TableRow[], options: TableChartOptions): ChartSpec[];
24
+ export declare function buildChartsFromJson(data: unknown, sourceName: string): ChartSpec[];
25
+ export declare function loadVisualizationSource(filePath: string, options?: {
26
+ sheetName?: string;
27
+ xColumn?: string;
28
+ yColumns?: string[];
29
+ }): Promise<VisualizationSource>;
30
+ export {};
31
+ //# sourceMappingURL=viz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.d.ts","sourceRoot":"","sources":["../../src/util/viz.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAmJjE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EAAE,CA0E9F;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAuGlF;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACtE,OAAO,CAAC,mBAAmB,CAAC,CAqD9B"}
@@ -0,0 +1,320 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { basename, extname } from 'node:path';
3
+ import ExcelJS from 'exceljs';
4
+ function isRecord(value) {
5
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
6
+ }
7
+ function slugify(value) {
8
+ return value
9
+ .toLowerCase()
10
+ .replace(/[^a-z0-9]+/g, '-')
11
+ .replace(/^-+|-+$/g, '')
12
+ .slice(0, 80);
13
+ }
14
+ function humanizeKey(value) {
15
+ return value
16
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
17
+ .replace(/[_-]+/g, ' ')
18
+ .replace(/\s+/g, ' ')
19
+ .trim()
20
+ .replace(/^./, (match) => match.toUpperCase());
21
+ }
22
+ function toFiniteNumber(value) {
23
+ if (typeof value === 'number' && Number.isFinite(value)) {
24
+ return value;
25
+ }
26
+ if (typeof value === 'string') {
27
+ const normalized = value.trim().replace(/,/g, '');
28
+ if (normalized.length === 0) {
29
+ return null;
30
+ }
31
+ const parsed = Number(normalized);
32
+ return Number.isFinite(parsed) ? parsed : null;
33
+ }
34
+ return null;
35
+ }
36
+ function parseCsvLine(line) {
37
+ const cells = [];
38
+ let current = '';
39
+ let inQuotes = false;
40
+ for (let index = 0; index < line.length; index += 1) {
41
+ const char = line[index];
42
+ if (char === '"') {
43
+ if (inQuotes && line[index + 1] === '"') {
44
+ current += '"';
45
+ index += 1;
46
+ }
47
+ else {
48
+ inQuotes = !inQuotes;
49
+ }
50
+ continue;
51
+ }
52
+ if (char === ',' && !inQuotes) {
53
+ cells.push(current);
54
+ current = '';
55
+ continue;
56
+ }
57
+ current += char;
58
+ }
59
+ cells.push(current);
60
+ return cells.map((cell) => cell.trim());
61
+ }
62
+ function rowsFromCsv(content) {
63
+ const lines = content
64
+ .split(/\r?\n/)
65
+ .map((line) => line.trim())
66
+ .filter((line) => line.length > 0);
67
+ if (lines.length < 2) {
68
+ return [];
69
+ }
70
+ const headers = parseCsvLine(lines[0]);
71
+ return lines.slice(1).map((line) => {
72
+ const cells = parseCsvLine(line);
73
+ const row = {};
74
+ for (let index = 0; index < headers.length; index += 1) {
75
+ row[headers[index]] = cells[index] ?? '';
76
+ }
77
+ return row;
78
+ });
79
+ }
80
+ function rowsFromWorksheet(worksheet) {
81
+ const rows = [];
82
+ let headers = [];
83
+ worksheet.eachRow((row, rowNumber) => {
84
+ const values = Array.isArray(row.values) ? row.values.slice(1) : [];
85
+ if (rowNumber === 1) {
86
+ headers = values.map((value, index) => String(value ?? `Column ${index + 1}`).trim());
87
+ return;
88
+ }
89
+ const record = {};
90
+ headers.forEach((header, index) => {
91
+ const value = values[index];
92
+ if (value instanceof Date) {
93
+ record[header] = value.toISOString();
94
+ }
95
+ else if (typeof value === 'object' && value && 'text' in value) {
96
+ record[header] = String(value.text ?? '');
97
+ }
98
+ else {
99
+ record[header] = (value ?? '');
100
+ }
101
+ });
102
+ if (Object.values(record).some((value) => String(value ?? '').trim().length > 0)) {
103
+ rows.push(record);
104
+ }
105
+ });
106
+ return rows;
107
+ }
108
+ function inferNumericColumns(rows) {
109
+ if (rows.length === 0) {
110
+ return [];
111
+ }
112
+ const headers = Object.keys(rows[0]);
113
+ return headers.filter((header) => {
114
+ let numericCount = 0;
115
+ let nonEmptyCount = 0;
116
+ for (const row of rows) {
117
+ const raw = row[header];
118
+ if (raw == null || String(raw).trim() === '') {
119
+ continue;
120
+ }
121
+ nonEmptyCount += 1;
122
+ if (toFiniteNumber(raw) !== null) {
123
+ numericCount += 1;
124
+ }
125
+ }
126
+ return nonEmptyCount > 0 && numericCount === nonEmptyCount;
127
+ });
128
+ }
129
+ export function buildChartsFromTable(rows, options) {
130
+ if (rows.length === 0) {
131
+ return [];
132
+ }
133
+ const numericColumns = inferNumericColumns(rows);
134
+ if (numericColumns.length === 0) {
135
+ return [];
136
+ }
137
+ const xColumn = options.xColumn && numericColumns.includes(options.xColumn)
138
+ ? options.xColumn
139
+ : numericColumns[0];
140
+ const yColumns = (options.yColumns?.length
141
+ ? options.yColumns.filter((column) => numericColumns.includes(column) && column !== xColumn)
142
+ : numericColumns.filter((column) => column !== xColumn));
143
+ if (yColumns.length === 0) {
144
+ return [];
145
+ }
146
+ const normalizedRows = rows
147
+ .map((row, index) => {
148
+ const xValue = xColumn ? toFiniteNumber(row[xColumn]) : index + 1;
149
+ if (xValue === null) {
150
+ return null;
151
+ }
152
+ const mapped = { __rowIndex: index + 1 };
153
+ for (const key of Object.keys(row)) {
154
+ mapped[key] = row[key];
155
+ }
156
+ mapped.__x = xValue;
157
+ return mapped;
158
+ })
159
+ .filter((row) => row !== null)
160
+ .sort((left, right) => Number(left.__x) - Number(right.__x));
161
+ const xValues = normalizedRows.map((row) => Number(row.__x));
162
+ const charts = [];
163
+ const titlePrefix = options.titlePrefix ?? options.sourceName;
164
+ const combinedSeries = yColumns
165
+ .slice(0, 4)
166
+ .map((column) => normalizedRows.map((row) => toFiniteNumber(row[column]) ?? 0));
167
+ if (combinedSeries.length > 1) {
168
+ charts.push({
169
+ id: slugify(`${options.sourceName}-${xColumn}-overview`),
170
+ title: `${titlePrefix}: ${yColumns.slice(0, 4).map(humanizeKey).join(', ')} vs ${humanizeKey(xColumn)}`,
171
+ xLabel: humanizeKey(xColumn),
172
+ yLabel: 'Value',
173
+ xValues,
174
+ series: combinedSeries,
175
+ labels: yColumns.slice(0, 4).map(humanizeKey),
176
+ note: `Combined chart from ${normalizedRows.length} samples`,
177
+ });
178
+ }
179
+ for (const column of yColumns) {
180
+ const series = normalizedRows.map((row) => toFiniteNumber(row[column]) ?? 0);
181
+ charts.push({
182
+ id: slugify(`${options.sourceName}-${xColumn}-${column}`),
183
+ title: `${titlePrefix}: ${humanizeKey(column)} vs ${humanizeKey(xColumn)}`,
184
+ xLabel: humanizeKey(xColumn),
185
+ yLabel: humanizeKey(column),
186
+ xValues,
187
+ series: [series],
188
+ labels: [humanizeKey(column)],
189
+ note: `Samples: ${normalizedRows.length}`,
190
+ });
191
+ }
192
+ return charts;
193
+ }
194
+ export function buildChartsFromJson(data, sourceName) {
195
+ const charts = [];
196
+ if (!isRecord(data)) {
197
+ if (Array.isArray(data) && data.every((item) => isRecord(item))) {
198
+ return buildChartsFromTable(data, { sourceName });
199
+ }
200
+ return charts;
201
+ }
202
+ if (Array.isArray(data.timeSettlement) && data.timeSettlement.every((item) => isRecord(item))) {
203
+ const transformedRows = data.timeSettlement.map((item) => ({
204
+ timeYears: toFiniteNumber(item.timeYears) ?? 0,
205
+ settlement: toFiniteNumber(item.settlement) ?? 0,
206
+ consolidationPercent: Math.round((toFiniteNumber(item.consolidation) ?? 0) * 1000) / 10,
207
+ }));
208
+ charts.push(...buildChartsFromTable(transformedRows, {
209
+ sourceName: `${sourceName}-time-settlement`,
210
+ titlePrefix: 'Consolidation time curve',
211
+ xColumn: 'timeYears',
212
+ yColumns: ['settlement', 'consolidationPercent'],
213
+ }));
214
+ }
215
+ if (Array.isArray(data.profile) && data.profile.every((item) => isRecord(item))) {
216
+ charts.push(...buildChartsFromTable(data.profile, {
217
+ sourceName: `${sourceName}-profile`,
218
+ titlePrefix: 'Settlement profile',
219
+ xColumn: 'x',
220
+ yColumns: ['settlement'],
221
+ }));
222
+ }
223
+ if (Array.isArray(data.layers) && data.layers.every((item) => isRecord(item))) {
224
+ const layerRows = data.layers;
225
+ const firstLayer = layerRows[0];
226
+ if ('CSR' in firstLayer && 'CRR' in firstLayer && 'factorOfSafety' in firstLayer && 'depth' in firstLayer) {
227
+ charts.push(...buildChartsFromTable(layerRows, {
228
+ sourceName: `${sourceName}-liquefaction`,
229
+ titlePrefix: 'Liquefaction depth plots',
230
+ xColumn: 'depth',
231
+ yColumns: ['factorOfSafety', 'CSR', 'CRR', 'N160cs'],
232
+ }));
233
+ }
234
+ }
235
+ if (Array.isArray(data.shaftFrictionPerLayer) && data.shaftFrictionPerLayer.every((item) => isRecord(item))) {
236
+ const rows = data.shaftFrictionPerLayer.map((item, index, items) => {
237
+ const cumulative = items
238
+ .slice(0, index + 1)
239
+ .reduce((total, entry) => total + (toFiniteNumber(entry.shaftResistance) ?? 0), 0);
240
+ return {
241
+ depth: toFiniteNumber(item.depth) ?? 0,
242
+ unitShaftFriction: toFiniteNumber(item.unitShaftFriction) ?? 0,
243
+ shaftResistance: toFiniteNumber(item.shaftResistance) ?? 0,
244
+ cumulativeShaftResistance: Math.round(cumulative * 100) / 100,
245
+ };
246
+ });
247
+ charts.push(...buildChartsFromTable(rows, {
248
+ sourceName: `${sourceName}-pile`,
249
+ titlePrefix: 'Pile capacity profile',
250
+ xColumn: 'depth',
251
+ yColumns: ['unitShaftFriction', 'shaftResistance', 'cumulativeShaftResistance'],
252
+ }));
253
+ }
254
+ if (Array.isArray(data.sliceResults) && data.sliceResults.every((item) => isRecord(item))) {
255
+ charts.push(...buildChartsFromTable(data.sliceResults, {
256
+ sourceName: `${sourceName}-slope`,
257
+ titlePrefix: 'Slope slice plots',
258
+ xColumn: 'sliceNumber',
259
+ yColumns: ['shearStrength', 'normalForce', 'weight', 'baseAngle'],
260
+ }));
261
+ }
262
+ if (charts.length > 0) {
263
+ return charts;
264
+ }
265
+ for (const [key, value] of Object.entries(data)) {
266
+ if (Array.isArray(value) && value.every((item) => isRecord(item))) {
267
+ charts.push(...buildChartsFromTable(value, {
268
+ sourceName: `${sourceName}-${key}`,
269
+ titlePrefix: humanizeKey(key),
270
+ }));
271
+ }
272
+ }
273
+ return charts;
274
+ }
275
+ export async function loadVisualizationSource(filePath, options) {
276
+ const extension = extname(filePath).toLowerCase();
277
+ const sourceName = basename(filePath, extension);
278
+ if (extension === '.json') {
279
+ const parsed = JSON.parse(readFileSync(filePath, 'utf-8'));
280
+ return {
281
+ sourceType: 'json',
282
+ sourceName,
283
+ charts: buildChartsFromJson(parsed, sourceName),
284
+ };
285
+ }
286
+ if (extension === '.csv') {
287
+ return {
288
+ sourceType: 'csv',
289
+ sourceName,
290
+ charts: buildChartsFromTable(rowsFromCsv(readFileSync(filePath, 'utf-8')), {
291
+ sourceName,
292
+ xColumn: options?.xColumn,
293
+ yColumns: options?.yColumns,
294
+ }),
295
+ };
296
+ }
297
+ if (extension === '.xlsx') {
298
+ const workbook = new ExcelJS.Workbook();
299
+ await workbook.xlsx.readFile(filePath);
300
+ const worksheets = options?.sheetName
301
+ ? workbook.worksheets.filter((sheet) => sheet.name === options.sheetName)
302
+ : workbook.worksheets;
303
+ if (worksheets.length === 0) {
304
+ throw new Error(`Sheet "${options?.sheetName}" not found in ${filePath}.`);
305
+ }
306
+ const charts = worksheets.flatMap((worksheet) => buildChartsFromTable(rowsFromWorksheet(worksheet), {
307
+ sourceName: `${sourceName}-${worksheet.name}`,
308
+ titlePrefix: `${worksheet.name} sheet`,
309
+ xColumn: options?.xColumn,
310
+ yColumns: options?.yColumns,
311
+ }));
312
+ return {
313
+ sourceType: 'xlsx',
314
+ sourceName,
315
+ charts,
316
+ };
317
+ }
318
+ throw new Error(`Unsupported visualization source: ${filePath}. Use .json, .csv, or .xlsx.`);
319
+ }
320
+ //# sourceMappingURL=viz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viz.js","sourceRoot":"","sources":["../../src/util/viz.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,52 +1,54 @@
1
- {
2
- "name": "geotechcli",
3
- "version": "0.3.0",
4
- "description": "AI-native CLI for geotechnical engineering",
5
- "type": "module",
6
- "bin": {
7
- "geotech": "./dist/index.js",
8
- "geotechcli": "./dist/index.js"
9
- },
10
- "scripts": {
11
- "build": "tsc",
12
- "dev": "tsc --watch",
13
- "clean": "rm -rf dist",
14
- "test": "vitest run --passWithNoTests",
15
- "lint": "tsc --noEmit",
16
- "start": "node dist/index.js"
17
- },
18
- "dependencies": {
19
- "@geotechcli/core": "*",
20
- "chalk": "^5.4.0",
21
- "commander": "^13.1.0",
22
- "ora": "^8.2.0",
23
- "boxen": "^8.0.1",
24
- "asciichart": "^1.5.25"
25
- },
26
- "devDependencies": {
27
- "typescript": "^5.7.0",
28
- "vitest": "^3.1.0",
29
- "@types/asciichart": "^1.5.8"
30
- },
31
- "files": [
32
- "dist"
33
- ],
34
- "keywords": [
35
- "geotechnical",
36
- "engineering",
37
- "cli",
38
- "ai",
39
- "bearing-capacity",
40
- "settlement",
41
- "liquefaction",
42
- "rmr",
43
- "tunnel",
44
- "slope-stability"
45
- ],
46
- "repository": {
47
- "type": "git",
48
- "url": "https://github.com/kilickursat/geotechcli-"
49
- },
50
- "homepage": "https://beta.geotechcli.com",
51
- "license": "SEE LICENSE IN LICENSE"
52
- }
1
+ {
2
+ "name": "geotechcli",
3
+ "version": "0.4.1",
4
+ "description": "AI-native CLI for geotechnical engineering",
5
+ "type": "module",
6
+ "bin": {
7
+ "geotech": "./dist/index.js",
8
+ "geotechcli": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "clean": "rm -rf dist",
14
+ "test": "vitest run --passWithNoTests",
15
+ "lint": "tsc --noEmit",
16
+ "start": "node dist/index.js"
17
+ },
18
+ "dependencies": {
19
+ "@geotechcli/core": "*",
20
+ "asciichart": "^1.5.25",
21
+ "boxen": "^8.0.1",
22
+ "chalk": "^5.4.0",
23
+ "commander": "^13.1.0",
24
+ "exceljs": "^4.4.0",
25
+ "ora": "^8.2.0",
26
+ "pdf-lib": "^1.17.1"
27
+ },
28
+ "devDependencies": {
29
+ "@types/asciichart": "^1.5.8",
30
+ "typescript": "^5.7.0",
31
+ "vitest": "^4.1.4"
32
+ },
33
+ "files": [
34
+ "dist"
35
+ ],
36
+ "keywords": [
37
+ "geotechnical",
38
+ "engineering",
39
+ "cli",
40
+ "ai",
41
+ "bearing-capacity",
42
+ "settlement",
43
+ "liquefaction",
44
+ "rmr",
45
+ "tunnel",
46
+ "slope-stability"
47
+ ],
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/kilickursat/geotechcli-"
51
+ },
52
+ "homepage": "https://beta.geotechcli.com",
53
+ "license": "SEE LICENSE IN LICENSE"
54
+ }