@pikku/addon-console 0.12.10 → 0.12.12
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/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
- package/dist/.pikku/addon/pikku-package.gen.js +1 -1
- package/dist/.pikku/agent/pikku-agent-map.gen.d.ts +1 -1
- package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.d.ts +1 -1
- package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/function/pikku-functions-meta.gen.json +11 -11
- package/dist/.pikku/function/pikku-functions.gen.js +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
- package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
- package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/pikku-services.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.d.ts +1 -1
- package/dist/.pikku/pikku-types.gen.js +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
- package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +1 -1
- package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
- package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
- package/dist/.pikku/schemas/register.gen.js +1 -1
- package/dist/.pikku/schemas/schemas/AddonPackageInfo.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/AllMeta.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/GetAddonMetaOutput.schema.json +1 -1
- package/dist/.pikku/schemas/schemas/GetFunctionsMetaOutput.schema.json +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-map.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
- package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/src/functions/run-function-tests.function.d.ts.map +1 -1
- package/dist/src/functions/run-function-tests.function.js +9 -6
- package/dist/src/functions/run-function-tests.function.js.map +1 -1
- package/dist/src/services/db-schema.service.d.ts +1 -26
- package/dist/src/services/db-schema.service.d.ts.map +1 -1
- package/dist/src/services/db-schema.service.js +35 -233
- package/dist/src/services/db-schema.service.js.map +1 -1
- package/dist/src/services.d.ts.map +1 -1
- package/dist/src/services.js +2 -21
- package/dist/src/services.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-function-tests.function.d.ts","sourceRoot":"","sources":["../../../src/functions/run-function-tests.function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-function-tests.function.d.ts","sourceRoot":"","sources":["../../../src/functions/run-function-tests.function.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAcjF,eAAO,MAAM,gBAAgB,sWAyD3B,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { spawn } from 'node:child_process';
|
|
4
4
|
import { pikkuSessionlessFunc } from '#pikku';
|
|
5
|
+
import { NotFoundError } from '@pikku/core';
|
|
5
6
|
function findBin(name, searchFrom) {
|
|
6
7
|
let dir = searchFrom;
|
|
7
8
|
for (let i = 0; i < 6; i++) {
|
|
@@ -21,12 +22,14 @@ export const runFunctionTests = pikkuSessionlessFunc({
|
|
|
21
22
|
expose: true,
|
|
22
23
|
auth: false,
|
|
23
24
|
func: async ({ metaService }) => {
|
|
24
|
-
if (!metaService?.basePath)
|
|
25
|
-
|
|
25
|
+
if (!metaService?.basePath) {
|
|
26
|
+
throw new Error('Meta service is not configured. Ensure the console addon is set up with a MetaService.');
|
|
27
|
+
}
|
|
26
28
|
const functionsDir = join(metaService.basePath, '..');
|
|
27
|
-
const ftestDir = join(functionsDir, '
|
|
28
|
-
if (!existsSync(ftestDir))
|
|
29
|
-
|
|
29
|
+
const ftestDir = join(functionsDir, 'tests');
|
|
30
|
+
if (!existsSync(ftestDir)) {
|
|
31
|
+
throw new NotFoundError('No tests found. Add a tests directory to your project first — see the test-harness template for an example.');
|
|
32
|
+
}
|
|
30
33
|
const pikku = findBin('pikku', functionsDir);
|
|
31
34
|
const spawnEnv = { ...process.env };
|
|
32
35
|
const envFile = join(ftestDir, '.env.test');
|
|
@@ -55,7 +58,7 @@ export const runFunctionTests = pikkuSessionlessFunc({
|
|
|
55
58
|
: reject(new Error(`tests failed (exit ${code})`)));
|
|
56
59
|
proc.on('error', reject);
|
|
57
60
|
});
|
|
58
|
-
const outFile = join(ftestDir, 'coverage', 'function-coverage.json');
|
|
61
|
+
const outFile = join(ftestDir, '.coverage', 'function-coverage.json');
|
|
59
62
|
if (!existsSync(outFile))
|
|
60
63
|
return null;
|
|
61
64
|
return JSON.parse(readFileSync(outFile, 'utf-8'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-function-tests.function.js","sourceRoot":"","sources":["../../../src/functions/run-function-tests.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"run-function-tests.function.js","sourceRoot":"","sources":["../../../src/functions/run-function-tests.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,SAAS,OAAO,CAAC,IAAY,EAAE,UAAkB;IAC/C,IAAI,GAAG,GAAG,UAAU,CAAA;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACzD,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAK;QACzB,GAAG,GAAG,MAAM,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAGlD;IACA,KAAK,EAAE,oBAAoB;IAC3B,WAAW,EACT,iFAAiF;IACnF,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;QAC3G,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,aAAa,CACrB,6GAA6G,CAC9G,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAE5C,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;QAC3C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAQ;gBACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC/B,IAAI,EAAE,GAAG,CAAC;oBAAE,SAAQ;gBACpB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;qBAC5C,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;qBACb,IAAI,EAAE;qBACN,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE;gBACjE,GAAG,EAAE,YAAY;gBACjB,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAA;YACF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,KAAK,CAAC;gBACR,CAAC,CAAC,OAAO,EAAE;gBACX,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,IAAI,GAAG,CAAC,CAAC,CACrD,CAAA;YACD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAA;QACrE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAA2B,CAAA;IAC7E,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -26,34 +26,9 @@ export interface DbSchema {
|
|
|
26
26
|
tables: DbTable[];
|
|
27
27
|
enums: DbEnum[];
|
|
28
28
|
}
|
|
29
|
-
interface SyncSqliteStatement {
|
|
30
|
-
all(...params: unknown[]): unknown[];
|
|
31
|
-
}
|
|
32
|
-
interface SyncSqliteDatabase {
|
|
33
|
-
prepare(sql: string): SyncSqliteStatement;
|
|
34
|
-
close(): void;
|
|
35
|
-
}
|
|
36
|
-
export type OpenDbFn = (filename: string) => SyncSqliteDatabase;
|
|
37
|
-
interface PgPool {
|
|
38
|
-
query<T>(sql: string, params?: unknown[]): Promise<{
|
|
39
|
-
rows: T[];
|
|
40
|
-
}>;
|
|
41
|
-
end(): Promise<void>;
|
|
42
|
-
}
|
|
43
|
-
export type PgPoolCtor = new (opts: {
|
|
44
|
-
connectionString: string;
|
|
45
|
-
max: number;
|
|
46
|
-
connectionTimeoutMillis?: number;
|
|
47
|
-
idleTimeoutMillis?: number;
|
|
48
|
-
}) => PgPool;
|
|
49
29
|
export declare class DbSchemaService {
|
|
50
|
-
private readonly projectRoot;
|
|
51
|
-
private readonly openDb;
|
|
52
|
-
private readonly PgPool;
|
|
53
30
|
private readonly metaService;
|
|
54
|
-
constructor(
|
|
31
|
+
constructor(metaService: MetaService);
|
|
55
32
|
getSchema(): Promise<DbSchema | null>;
|
|
56
|
-
private buildEnvPostgresUrl;
|
|
57
33
|
}
|
|
58
|
-
export {};
|
|
59
34
|
//# sourceMappingURL=db-schema.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-schema.service.d.ts","sourceRoot":"","sources":["../../../src/services/db-schema.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db-schema.service.d.ts","sourceRoot":"","sources":["../../../src/services/db-schema.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEpE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,QAAQ,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAsED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAE/C,SAAS,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CA6B5C"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
1
|
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
4
|
-
const SKIP_TABLES = new Set([
|
|
5
|
-
'sqlite_sequence',
|
|
6
|
-
'sql_migrations',
|
|
7
|
-
'migrations',
|
|
8
|
-
'pgmigrations',
|
|
9
|
-
]);
|
|
10
|
-
const SKIP_SCHEMAS = new Set(['pgboss', 'pgboss_tenant']);
|
|
11
2
|
function classificationFor(visibility) {
|
|
12
3
|
if (visibility === 'public' ||
|
|
13
4
|
visibility === 'private' ||
|
|
@@ -16,6 +7,13 @@ function classificationFor(visibility) {
|
|
|
16
7
|
return visibility;
|
|
17
8
|
return 'private';
|
|
18
9
|
}
|
|
10
|
+
function camelToSnake(s) {
|
|
11
|
+
return s.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
12
|
+
}
|
|
13
|
+
function bareTableName(name) {
|
|
14
|
+
const dot = name.indexOf('.');
|
|
15
|
+
return dot >= 0 ? name.slice(dot + 1) : name;
|
|
16
|
+
}
|
|
19
17
|
async function loadAnnotations(metaService) {
|
|
20
18
|
const raw = await metaService.readFile('db/annotations.gen.json');
|
|
21
19
|
if (!raw)
|
|
@@ -26,240 +24,44 @@ async function loadAnnotations(metaService) {
|
|
|
26
24
|
const key = camelToSnake(bareTableName(tableName));
|
|
27
25
|
result[key] = {};
|
|
28
26
|
for (const [col, entry] of Object.entries(cols)) {
|
|
29
|
-
result[key][camelToSnake(col)] =
|
|
30
|
-
visibility: entry.visibility,
|
|
31
|
-
description: entry.description,
|
|
32
|
-
};
|
|
27
|
+
result[key][camelToSnake(col)] = entry;
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
return result;
|
|
36
31
|
}
|
|
37
|
-
function bareTableName(name) {
|
|
38
|
-
const dot = name.indexOf('.');
|
|
39
|
-
return dot >= 0 ? name.slice(dot + 1) : name;
|
|
40
|
-
}
|
|
41
|
-
function camelToSnake(s) {
|
|
42
|
-
return s.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
43
|
-
}
|
|
44
|
-
// ── SQLite introspector ───────────────────────────────────────────────────────
|
|
45
|
-
async function introspectSqlite(dbFile, annotations, openDb) {
|
|
46
|
-
const db = openDb(dbFile);
|
|
47
|
-
const tables = [];
|
|
48
|
-
try {
|
|
49
|
-
const tableRows = db
|
|
50
|
-
.prepare(`SELECT name FROM sqlite_master
|
|
51
|
-
WHERE type = 'table'
|
|
52
|
-
AND name NOT LIKE 'sqlite\\_%' ESCAPE '\\'
|
|
53
|
-
ORDER BY name`)
|
|
54
|
-
.all();
|
|
55
|
-
for (const { name: tableName } of tableRows) {
|
|
56
|
-
if (SKIP_TABLES.has(tableName))
|
|
57
|
-
continue;
|
|
58
|
-
const tableAnns = annotations[tableName] ?? {};
|
|
59
|
-
const fkRows = db
|
|
60
|
-
.prepare(`PRAGMA foreign_key_list("${tableName.replace(/"/g, '""')}")`)
|
|
61
|
-
.all();
|
|
62
|
-
const fkMap = new Map(fkRows.map((fk) => [fk.from, { table: fk.table, column: fk.to }]));
|
|
63
|
-
const colRows = db
|
|
64
|
-
.prepare(`PRAGMA table_xinfo("${tableName.replace(/"/g, '""')}")`)
|
|
65
|
-
.all();
|
|
66
|
-
const columns = colRows
|
|
67
|
-
.filter((c) => c.hidden !== 1)
|
|
68
|
-
.map((c) => {
|
|
69
|
-
const ann = tableAnns[c.name];
|
|
70
|
-
const col = {
|
|
71
|
-
name: c.name,
|
|
72
|
-
type: c.type,
|
|
73
|
-
nullable: !Boolean(c.notnull) && c.pk === 0,
|
|
74
|
-
isPrimaryKey: c.pk > 0,
|
|
75
|
-
classification: classificationFor(ann?.visibility),
|
|
76
|
-
};
|
|
77
|
-
if (ann?.description)
|
|
78
|
-
col.description = ann.description;
|
|
79
|
-
const fk = fkMap.get(c.name);
|
|
80
|
-
if (fk)
|
|
81
|
-
col.foreignKey = fk;
|
|
82
|
-
return col;
|
|
83
|
-
});
|
|
84
|
-
tables.push({ name: tableName, columns });
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
db.close();
|
|
89
|
-
}
|
|
90
|
-
return tables;
|
|
91
|
-
}
|
|
92
|
-
// ── Postgres introspector ─────────────────────────────────────────────────────
|
|
93
|
-
async function introspectPostgresEnums(pool) {
|
|
94
|
-
const result = await pool.query(`SELECT t.typname AS enum_name,
|
|
95
|
-
t.typnamespace::regnamespace::text AS schema_name,
|
|
96
|
-
json_agg(e.enumlabel ORDER BY e.enumsortorder) AS values
|
|
97
|
-
FROM pg_type t
|
|
98
|
-
JOIN pg_enum e ON e.enumtypid = t.oid
|
|
99
|
-
WHERE t.typtype = 'e'
|
|
100
|
-
GROUP BY t.typname, t.typnamespace
|
|
101
|
-
ORDER BY schema_name, enum_name`);
|
|
102
|
-
return result.rows.map((r) => ({
|
|
103
|
-
name: r.enum_name,
|
|
104
|
-
schema: r.schema_name,
|
|
105
|
-
values: r.values,
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
async function introspectPostgres(connectionString, annotations, Pool) {
|
|
109
|
-
const pool = new Pool({
|
|
110
|
-
connectionString,
|
|
111
|
-
max: 3,
|
|
112
|
-
connectionTimeoutMillis: 5000,
|
|
113
|
-
idleTimeoutMillis: 5000,
|
|
114
|
-
});
|
|
115
|
-
try {
|
|
116
|
-
const [tablesResult, colsResult, fkResult] = await Promise.all([
|
|
117
|
-
pool.query(`SELECT table_schema, table_name
|
|
118
|
-
FROM information_schema.tables
|
|
119
|
-
WHERE table_schema NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
|
|
120
|
-
AND table_schema NOT LIKE 'pg_temp_%'
|
|
121
|
-
AND table_type = 'BASE TABLE'
|
|
122
|
-
ORDER BY table_schema, table_name`),
|
|
123
|
-
pool.query(`SELECT
|
|
124
|
-
c.table_schema,
|
|
125
|
-
c.table_name,
|
|
126
|
-
c.column_name,
|
|
127
|
-
c.data_type,
|
|
128
|
-
c.udt_name,
|
|
129
|
-
c.is_nullable,
|
|
130
|
-
EXISTS(
|
|
131
|
-
SELECT 1
|
|
132
|
-
FROM information_schema.table_constraints tc
|
|
133
|
-
JOIN information_schema.key_column_usage kcu
|
|
134
|
-
ON tc.constraint_name = kcu.constraint_name
|
|
135
|
-
AND tc.table_schema = kcu.table_schema
|
|
136
|
-
AND tc.table_name = kcu.table_name
|
|
137
|
-
WHERE tc.constraint_type = 'PRIMARY KEY'
|
|
138
|
-
AND tc.table_schema = c.table_schema
|
|
139
|
-
AND tc.table_name = c.table_name
|
|
140
|
-
AND kcu.column_name = c.column_name
|
|
141
|
-
) AS is_pk
|
|
142
|
-
FROM information_schema.columns c
|
|
143
|
-
WHERE c.table_schema NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
|
|
144
|
-
AND c.table_schema NOT LIKE 'pg_temp_%'
|
|
145
|
-
ORDER BY c.table_schema, c.table_name, c.ordinal_position`),
|
|
146
|
-
pool.query(`SELECT kcu.table_schema,
|
|
147
|
-
kcu.table_name,
|
|
148
|
-
kcu.column_name,
|
|
149
|
-
kcu2.table_schema AS foreign_table_schema,
|
|
150
|
-
kcu2.table_name AS foreign_table_name,
|
|
151
|
-
kcu2.column_name AS foreign_column_name
|
|
152
|
-
FROM information_schema.referential_constraints rc
|
|
153
|
-
JOIN information_schema.key_column_usage kcu
|
|
154
|
-
ON kcu.constraint_catalog = rc.constraint_catalog
|
|
155
|
-
AND kcu.constraint_schema = rc.constraint_schema
|
|
156
|
-
AND kcu.constraint_name = rc.constraint_name
|
|
157
|
-
JOIN information_schema.key_column_usage kcu2
|
|
158
|
-
ON kcu2.constraint_catalog = rc.unique_constraint_catalog
|
|
159
|
-
AND kcu2.constraint_schema = rc.unique_constraint_schema
|
|
160
|
-
AND kcu2.constraint_name = rc.unique_constraint_name
|
|
161
|
-
AND kcu2.ordinal_position = kcu.ordinal_position
|
|
162
|
-
ORDER BY kcu.table_schema, kcu.table_name, kcu.ordinal_position`),
|
|
163
|
-
]);
|
|
164
|
-
const fkIndex = new Map();
|
|
165
|
-
for (const r of fkResult.rows) {
|
|
166
|
-
const refTable = r.foreign_table_schema === 'public'
|
|
167
|
-
? r.foreign_table_name
|
|
168
|
-
: `${r.foreign_table_schema}.${r.foreign_table_name}`;
|
|
169
|
-
fkIndex.set(`${r.table_schema}.${r.table_name}.${r.column_name}`, {
|
|
170
|
-
table: refTable,
|
|
171
|
-
column: r.foreign_column_name,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
const colIndex = new Map();
|
|
175
|
-
for (const r of colsResult.rows) {
|
|
176
|
-
const key = `${r.table_schema}.${r.table_name}`;
|
|
177
|
-
let arr = colIndex.get(key);
|
|
178
|
-
if (!arr) {
|
|
179
|
-
arr = [];
|
|
180
|
-
colIndex.set(key, arr);
|
|
181
|
-
}
|
|
182
|
-
arr.push(r);
|
|
183
|
-
}
|
|
184
|
-
const tables = [];
|
|
185
|
-
for (const { table_schema: schema, table_name: tableName, } of tablesResult.rows) {
|
|
186
|
-
if (SKIP_SCHEMAS.has(schema))
|
|
187
|
-
continue;
|
|
188
|
-
if (SKIP_TABLES.has(tableName))
|
|
189
|
-
continue;
|
|
190
|
-
const qualifiedName = schema === 'public' ? tableName : `${schema}.${tableName}`;
|
|
191
|
-
const tableAnns = annotations[bareTableName(qualifiedName)] ?? {};
|
|
192
|
-
const colRows = colIndex.get(`${schema}.${tableName}`) ?? [];
|
|
193
|
-
const columns = colRows.map((r) => {
|
|
194
|
-
const isUserDefined = r.data_type === 'USER-DEFINED';
|
|
195
|
-
const ann = tableAnns[r.column_name];
|
|
196
|
-
const col = {
|
|
197
|
-
name: r.column_name,
|
|
198
|
-
type: isUserDefined ? r.udt_name : r.data_type,
|
|
199
|
-
nullable: r.is_nullable === 'YES',
|
|
200
|
-
isPrimaryKey: Boolean(r.is_pk),
|
|
201
|
-
classification: classificationFor(ann?.visibility),
|
|
202
|
-
};
|
|
203
|
-
if (isUserDefined)
|
|
204
|
-
col.enumType = r.udt_name;
|
|
205
|
-
if (ann?.description)
|
|
206
|
-
col.description = ann.description;
|
|
207
|
-
const fk = fkIndex.get(`${schema}.${tableName}.${r.column_name}`);
|
|
208
|
-
if (fk)
|
|
209
|
-
col.foreignKey = fk;
|
|
210
|
-
return col;
|
|
211
|
-
});
|
|
212
|
-
tables.push({ name: qualifiedName, columns });
|
|
213
|
-
}
|
|
214
|
-
const enums = await introspectPostgresEnums(pool);
|
|
215
|
-
return { tables, enums };
|
|
216
|
-
}
|
|
217
|
-
finally {
|
|
218
|
-
await pool.end();
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
32
|
// ── Service ───────────────────────────────────────────────────────────────────
|
|
222
33
|
export class DbSchemaService {
|
|
223
|
-
constructor(
|
|
224
|
-
this.projectRoot = projectRoot;
|
|
225
|
-
this.openDb = openDb;
|
|
226
|
-
this.PgPool = PgPool;
|
|
34
|
+
constructor(metaService) {
|
|
227
35
|
this.metaService = metaService;
|
|
228
36
|
}
|
|
229
37
|
async getSchema() {
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
if (this.openDb) {
|
|
233
|
-
const candidates = [
|
|
234
|
-
join(this.projectRoot, '.pikku-runtime', 'dev.db'),
|
|
235
|
-
join(this.projectRoot, 'dev.db'),
|
|
236
|
-
];
|
|
237
|
-
const dbFile = candidates.find((f) => existsSync(f));
|
|
238
|
-
if (dbFile) {
|
|
239
|
-
const tables = await introspectSqlite(dbFile, annotations, this.openDb);
|
|
240
|
-
return { tables, enums: [] };
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// Postgres: explicit env vars only — no config file sniffing
|
|
244
|
-
const postgresUrl = process.env.DATABASE_URL ??
|
|
245
|
-
process.env.POSTGRES_URL ??
|
|
246
|
-
this.buildEnvPostgresUrl();
|
|
247
|
-
if (postgresUrl && this.PgPool) {
|
|
248
|
-
return await introspectPostgres(postgresUrl, annotations, this.PgPool);
|
|
249
|
-
}
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
buildEnvPostgresUrl() {
|
|
253
|
-
const dbName = process.env.DB_NAME;
|
|
254
|
-
if (!dbName)
|
|
38
|
+
const raw = await this.metaService.readFile('db/pikku-db-schema.gen.json');
|
|
39
|
+
if (!raw)
|
|
255
40
|
return null;
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
41
|
+
const parsed = JSON.parse(raw);
|
|
42
|
+
const annotations = await loadAnnotations(this.metaService);
|
|
43
|
+
const tables = parsed.tables.map((t) => {
|
|
44
|
+
const tableAnns = annotations[bareTableName(t.name)] ?? {};
|
|
45
|
+
return {
|
|
46
|
+
name: t.name,
|
|
47
|
+
columns: t.columns.map((c) => {
|
|
48
|
+
const ann = tableAnns[c.name];
|
|
49
|
+
const col = {
|
|
50
|
+
name: c.name,
|
|
51
|
+
type: c.type,
|
|
52
|
+
nullable: c.nullable,
|
|
53
|
+
isPrimaryKey: c.isPrimaryKey,
|
|
54
|
+
classification: classificationFor(ann?.visibility),
|
|
55
|
+
};
|
|
56
|
+
if (ann?.description)
|
|
57
|
+
col.description = ann.description;
|
|
58
|
+
if (c.foreignKey)
|
|
59
|
+
col.foreignKey = c.foreignKey;
|
|
60
|
+
return col;
|
|
61
|
+
}),
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
return { tables, enums: parsed.enums };
|
|
263
65
|
}
|
|
264
66
|
}
|
|
265
67
|
//# sourceMappingURL=db-schema.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-schema.service.js","sourceRoot":"","sources":["../../../src/services/db-schema.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db-schema.service.js","sourceRoot":"","sources":["../../../src/services/db-schema.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uBAAuB,0MAiEnC,CAAA"}
|
package/dist/src/services.js
CHANGED
|
@@ -3,7 +3,7 @@ import { WiringService } from './services/wiring.service.js';
|
|
|
3
3
|
import { AddonService } from './services/addon.service.js';
|
|
4
4
|
import { OAuthService } from './services/oauth.service.js';
|
|
5
5
|
import { StateDiffService } from './services/state-diff.service.js';
|
|
6
|
-
import { DbSchemaService
|
|
6
|
+
import { DbSchemaService } from './services/db-schema.service.js';
|
|
7
7
|
export const createSingletonServices = pikkuAddonServices(async (_config, { variables, metaService: existingMetaService, aiAgentRunner, schedulerService, agentRunService, workflowService, workflowRunService, aiStorage, aiRunState, deploymentService, credentialService, }) => {
|
|
8
8
|
if (!existingMetaService) {
|
|
9
9
|
throw new Error('metaService is required for the console addon. Set it in your createSingletonServices using PikkuMetaService from #pikku/pikku-meta-service.gen.js');
|
|
@@ -25,26 +25,7 @@ export const createSingletonServices = pikkuAddonServices(async (_config, { vari
|
|
|
25
25
|
const projectRoot = dirname(metaBasePath);
|
|
26
26
|
codeEditService = new CodeEditService(projectRoot);
|
|
27
27
|
stateDiffService = new StateDiffService(projectRoot);
|
|
28
|
-
|
|
29
|
-
let PgPool = null;
|
|
30
|
-
try {
|
|
31
|
-
// node:sqlite is built into Node 22+; cast to any to avoid missing @types
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
-
const sqliteMod = await import('node:sqlite');
|
|
34
|
-
openDb = (filename) => new sqliteMod.DatabaseSync(filename);
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
// Node < 22 — SQLite unavailable
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
-
const pgMod = await import('pg');
|
|
42
|
-
PgPool = pgMod.Pool ?? pgMod.default?.Pool ?? null;
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
// pg not installed — Postgres unavailable
|
|
46
|
-
}
|
|
47
|
-
dbSchemaService = new DbSchemaService(projectRoot, openDb, PgPool, metaService);
|
|
28
|
+
dbSchemaService = new DbSchemaService(metaService);
|
|
48
29
|
}
|
|
49
30
|
return {
|
|
50
31
|
metaService,
|
package/dist/src/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,kBAAkB,CACvD,KAAK,EACH,OAAO,EACP,EACE,SAAS,EACT,WAAW,EAAE,mBAAmB,EAChC,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GAClB,EACD,EAAE;IACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,oJAAoJ,CACrJ,CAAA;IACH,CAAC;IACD,MAAM,WAAW,GAAG,mBAAmB,CAAA;IACvC,MAAM,WAAW,GACf,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,gCAAgC,CAAA;IAE3E,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;IACzB,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;IAEvC,MAAM,YAAY,GAAG,mBAAmB,EAAE,QAAQ,CAAA;IAClD,IAAI,eAAe,GAA2B,IAAI,CAAA;IAClD,IAAI,gBAAgB,GAA4B,IAAI,CAAA;IACpD,IAAI,eAAe,GAA2B,IAAI,CAAA;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;QAC7C,MAAM,YAAY,GAAG,iCAAiC,CAAA;QACtD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QACzC,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;QAClD,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAA;QAEpD,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAA;IACpD,CAAC;IAED,OAAO;QACL,WAAW;QACX,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,eAAe;QACf,kBAAkB;QAClB,eAAe;QACf,SAAS;QACT,UAAU;QACV,iBAAiB;QACjB,aAAa;QACb,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;QACf,gBAAgB;QAChB,eAAe;KAChB,CAAA;AACH,CAAC,CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/addon-console",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"imports": {
|
|
6
6
|
"#pikku": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@pikku/core": "^0.12.27"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@pikku/cli": "^0.12.
|
|
43
|
+
"@pikku/cli": "^0.12.30",
|
|
44
44
|
"@pikku/core": "^0.12.27",
|
|
45
45
|
"oauth2-mock-server": "^7.1.1",
|
|
46
46
|
"typescript": "^5.9"
|