@neupgroup/mapper 1.1.0 → 1.2.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.
package/config.js DELETED
@@ -1,49 +0,0 @@
1
- import { createApiClient } from "./api";
2
- import { createDb } from "./db";
3
- /** Helper to define config with proper type inference */
4
- export function defineConfig(config) {
5
- return config;
6
- }
7
- /** Create a registry of named API/DB maps from configuration */
8
- export function createRegistry(config) {
9
- const entries = new Map();
10
- for (const m of config.maps) {
11
- if (!m.name)
12
- throw new Error("Map config requires a unique 'name'");
13
- if (entries.has(m.name))
14
- throw new Error(`Duplicate map name '${m.name}'`);
15
- if (m.kind === "api") {
16
- const client = createApiClient(m.baseUrl ?? "", m.adapter, m.defaultHeaders);
17
- entries.set(m.name, { kind: "api", value: client });
18
- }
19
- else if (m.kind === "db") {
20
- const db = createDb(m.adapter);
21
- // Optional: pre-connect using provided connection config.
22
- // Consumers may choose to call db.connect() themselves.
23
- // if (m.connection) await db.connect(m.connection);
24
- entries.set(m.name, { kind: "db", value: db });
25
- }
26
- }
27
- const getApi = (name) => {
28
- const entry = entries.get(name);
29
- if (!entry || entry.kind !== "api")
30
- throw new Error(`API map '${name}' not found`);
31
- return entry.value;
32
- };
33
- const getDb = (name) => {
34
- const entry = entries.get(name);
35
- if (!entry || entry.kind !== "db")
36
- throw new Error(`DB map '${name}' not found`);
37
- return entry.value;
38
- };
39
- const get = (name) => {
40
- const entry = entries.get(name);
41
- if (!entry)
42
- throw new Error(`Map '${name}' not found`);
43
- return entry.value;
44
- };
45
- const list = () => Array.from(entries.entries()).map(([name, e]) => ({ name, kind: e.kind }));
46
- return { api: getApi, db: getDb, get, list };
47
- }
48
- /** alias */
49
- export const loadConfig = createRegistry;
package/db.d.ts DELETED
@@ -1,19 +0,0 @@
1
- export type QueryParams = unknown[] | Record<string, unknown> | undefined;
2
- export interface DbAdapter {
3
- connect(config: Record<string, unknown>): Promise<void>;
4
- query<T = unknown>(sql: string, params?: QueryParams): Promise<T[]>;
5
- execute?(sql: string, params?: QueryParams): Promise<{
6
- affectedRows?: number;
7
- }>;
8
- close(): Promise<void>;
9
- }
10
- export interface Db {
11
- connect: (config: Record<string, unknown>) => Promise<void>;
12
- query: <T = unknown>(sql: string, params?: QueryParams) => Promise<T[]>;
13
- execute: (sql: string, params?: QueryParams) => Promise<{
14
- affectedRows?: number;
15
- }>;
16
- close: () => Promise<void>;
17
- }
18
- export declare function createDb(adapter: DbAdapter): Db;
19
- export type { DbAdapter as IDbAdapter };
package/db.js DELETED
@@ -1,15 +0,0 @@
1
- export function createDb(adapter) {
2
- const ensure = (fn) => fn();
3
- return {
4
- connect: (config) => ensure(() => adapter.connect(config)),
5
- query: (sql, params) => ensure(() => adapter.query(sql, params)),
6
- execute: (sql, params) => ensure(async () => {
7
- if (typeof adapter.execute === "function") {
8
- return adapter.execute(sql, params);
9
- }
10
- await adapter.query(sql, params);
11
- return { affectedRows: undefined };
12
- }),
13
- close: () => ensure(() => adapter.close()),
14
- };
15
- }
package/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from "./db";
2
- export * from "./api";
3
- export * from "./config";
4
- export * from "./mapper";
package/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./db";
2
- export * from "./api";
3
- export * from "./config";
4
- export * from "./mapper";
package/mapper.d.ts DELETED
@@ -1,59 +0,0 @@
1
- import { type ApiAdapter, type ApiClient } from "./api";
2
- import { type DbAdapter, type Db, type QueryParams } from "./db";
3
- import type { MapKind, MapperConfig } from "./config";
4
- export declare function useConfig(config: MapperConfig): void;
5
- export declare function list(): {
6
- name: string;
7
- kind: MapKind;
8
- }[];
9
- export interface ApiPath {
10
- get<T = unknown>(headers?: Record<string, string>): Promise<{
11
- status: number;
12
- headers?: Record<string, string>;
13
- data?: T;
14
- }>;
15
- post<T = unknown>(body?: unknown, headers?: Record<string, string>): Promise<{
16
- status: number;
17
- headers?: Record<string, string>;
18
- data?: T;
19
- }>;
20
- put<T = unknown>(body?: unknown, headers?: Record<string, string>): Promise<{
21
- status: number;
22
- headers?: Record<string, string>;
23
- data?: T;
24
- }>;
25
- delete<T = unknown>(headers?: Record<string, string>): Promise<{
26
- status: number;
27
- headers?: Record<string, string>;
28
- data?: T;
29
- }>;
30
- }
31
- export interface DbTable {
32
- selectAll<T = unknown>(): Promise<T[]>;
33
- query<T = unknown>(sqlSuffix?: string, params?: QueryParams): Promise<T[]>;
34
- }
35
- export interface MapperHandle {
36
- name(): string;
37
- kind(): MapKind;
38
- client(): ApiClient | Db;
39
- table(name: string): DbTable;
40
- path(p: string): ApiPath;
41
- }
42
- export interface MapperBuilderStart {
43
- create(name: string, kind: MapKind): MapperBuilder;
44
- }
45
- export interface MapperBuilder {
46
- adapter(adapter: ApiAdapter | DbAdapter): MapperBuilder;
47
- save(): MapperHandle;
48
- baseUrl(url: string): MapperBuilder;
49
- headers(headers: Record<string, string>): MapperBuilder;
50
- header(key: string, value: string): MapperBuilder;
51
- host(host: string): MapperBuilder;
52
- dbname(name: string): MapperBuilder;
53
- user(user: string): MapperBuilder;
54
- pass(pass: string): MapperBuilder;
55
- port(port: number): MapperBuilder;
56
- option(key: string, value: unknown): MapperBuilder;
57
- }
58
- export declare function mapper(): MapperBuilderStart;
59
- export declare function mapper(name: string): MapperHandle;
package/mapper.js DELETED
@@ -1,117 +0,0 @@
1
- import { createApiClient } from "./api";
2
- import { createDb } from "./db";
3
- const registry = new Map();
4
- function ensureUnique(name) {
5
- if (registry.has(name))
6
- throw new Error(`Duplicate map name '${name}'`);
7
- }
8
- export function useConfig(config) {
9
- for (const m of config.maps) {
10
- ensureUnique(m.name);
11
- if (m.kind === "api") {
12
- const client = createApiClient(m.baseUrl ?? "", m.adapter, m.defaultHeaders);
13
- registry.set(m.name, { kind: "api", value: client });
14
- }
15
- else {
16
- const db = createDb(m.adapter);
17
- registry.set(m.name, { kind: "db", value: db });
18
- }
19
- }
20
- }
21
- export function list() {
22
- return Array.from(registry.entries()).map(([name, e]) => ({ name, kind: e.kind }));
23
- }
24
- function asHandle(name, entry) {
25
- const base = {
26
- name: () => name,
27
- kind: () => entry.kind,
28
- client: () => entry.value,
29
- };
30
- const table = (t) => {
31
- if (entry.kind !== "db")
32
- throw new Error(`Map '${name}' is not a DB. Use path() for API.`);
33
- const db = entry.value;
34
- return {
35
- selectAll: () => db.query(`SELECT * FROM ${t}`),
36
- query: (suffix, params) => {
37
- const sql = suffix ? `SELECT * FROM ${t} ${suffix}` : `SELECT * FROM ${t}`;
38
- return db.query(sql, params);
39
- },
40
- };
41
- };
42
- const path = (p) => {
43
- if (entry.kind !== "api")
44
- throw new Error(`Map '${name}' is not an API. Use table() for DB.`);
45
- const api = entry.value;
46
- const normalized = p.startsWith("/") ? p : `/${p}`;
47
- return {
48
- get: (headers) => api.get(normalized, headers),
49
- post: (body, headers) => api.post(normalized, body, headers),
50
- put: (body, headers) => api.put(normalized, body, headers),
51
- delete: (headers) => api.delete(normalized, headers),
52
- };
53
- };
54
- return { ...base, table, path };
55
- }
56
- class Builder {
57
- constructor() {
58
- this.conf = {};
59
- }
60
- create(name, kind) {
61
- this.conf.name = name;
62
- this.conf.kind = kind;
63
- return this;
64
- }
65
- adapter(adapter) {
66
- this.conf.adapter = adapter;
67
- return this;
68
- }
69
- // API
70
- baseUrl(url) { var _a; (_a = this.conf).api ?? (_a.api = {}); this.conf.api.baseUrl = url; return this; }
71
- headers(headers) {
72
- var _a;
73
- (_a = this.conf).api ?? (_a.api = {});
74
- const current = this.conf.api.defaultHeaders ?? {};
75
- this.conf.api.defaultHeaders = { ...current, ...headers };
76
- return this;
77
- }
78
- header(key, value) { return this.headers({ [key]: value }); }
79
- // DB
80
- ensureConn() {
81
- var _a;
82
- (_a = this.conf).db ?? (_a.db = {});
83
- if (!this.conf.db.connection)
84
- this.conf.db.connection = {};
85
- }
86
- host(host) { this.ensureConn(); this.conf.db.connection.host = host; return this; }
87
- dbname(name) { this.ensureConn(); this.conf.db.connection.dbname = name; return this; }
88
- user(user) { this.ensureConn(); this.conf.db.connection.user = user; return this; }
89
- pass(pass) { this.ensureConn(); this.conf.db.connection.pass = pass; return this; }
90
- port(port) { this.ensureConn(); this.conf.db.connection.port = port; return this; }
91
- option(key, value) { this.ensureConn(); this.conf.db.connection[key] = value; return this; }
92
- save() {
93
- const name = this.conf.name;
94
- const kind = this.conf.kind;
95
- const adapter = this.conf.adapter;
96
- if (!name || !kind || !adapter)
97
- throw new Error("Builder requires name, kind, and adapter before save()");
98
- ensureUnique(name);
99
- if (kind === "api") {
100
- const client = createApiClient(this.conf.api?.baseUrl ?? "", adapter, this.conf.api?.defaultHeaders);
101
- registry.set(name, { kind: "api", value: client });
102
- return asHandle(name, registry.get(name));
103
- }
104
- const db = createDb(adapter);
105
- registry.set(name, { kind: "db", value: db });
106
- return asHandle(name, registry.get(name));
107
- }
108
- }
109
- export function mapper(name) {
110
- if (typeof name === "string") {
111
- const entry = registry.get(name);
112
- if (!entry)
113
- throw new Error(`Map '${name}' not found. Register with useConfig() or builder.`);
114
- return asHandle(name, entry);
115
- }
116
- return new Builder();
117
- }