@truenorth-it/dataverse-client 1.0.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.
@@ -0,0 +1,116 @@
1
+ /** Error thrown when the API returns a non-OK response */
2
+ export class ApiError extends Error {
3
+ status;
4
+ statusText;
5
+ body;
6
+ constructor(status, statusText, body) {
7
+ super(body?.message ?? `HTTP ${status} ${statusText}`);
8
+ this.name = "ApiError";
9
+ this.status = status;
10
+ this.statusText = statusText;
11
+ this.body = body;
12
+ }
13
+ }
14
+ function buildQueryString(options) {
15
+ const params = new URLSearchParams();
16
+ if (options.select?.length)
17
+ params.set("select", options.select.join(","));
18
+ if (options.top != null)
19
+ params.set("top", String(options.top));
20
+ if (options.skip != null)
21
+ params.set("skip", String(options.skip));
22
+ if (options.orderBy)
23
+ params.set("orderBy", options.orderBy);
24
+ if (options.expand)
25
+ params.set("expand", options.expand);
26
+ if (options.search)
27
+ params.set("search", options.search);
28
+ if (options.filterLogic && options.filterLogic !== "and") {
29
+ params.set("filterLogic", options.filterLogic);
30
+ }
31
+ if (options.filter) {
32
+ const filters = Array.isArray(options.filter)
33
+ ? options.filter
34
+ : [options.filter];
35
+ for (const f of filters) {
36
+ params.append("filter", f);
37
+ }
38
+ }
39
+ const qs = params.toString();
40
+ return qs ? `?${qs}` : "";
41
+ }
42
+ async function request(config, method, path, body) {
43
+ const token = await config.getToken();
44
+ const base = config.baseUrl.replace(/\/+$/, "");
45
+ const apiBase = config.apiBase ?? "/api/v2";
46
+ const url = `${base}${apiBase}${path}`;
47
+ const headers = {
48
+ Authorization: `Bearer ${token}`,
49
+ };
50
+ const init = { method, headers };
51
+ if (body !== undefined) {
52
+ headers["Content-Type"] = "application/json";
53
+ init.body = JSON.stringify(body);
54
+ }
55
+ const res = await fetch(url, init);
56
+ if (!res.ok) {
57
+ const errorBody = (await res.json().catch(() => null));
58
+ throw new ApiError(res.status, res.statusText, errorBody);
59
+ }
60
+ // Some endpoints (e.g. POST) may return no body
61
+ const text = await res.text();
62
+ if (!text)
63
+ return undefined;
64
+ return JSON.parse(text);
65
+ }
66
+ function createScopeClient(config, scope) {
67
+ return {
68
+ list(table, options = {}) {
69
+ return request(config, "GET", `/${scope}/${table}${buildQueryString(options)}`);
70
+ },
71
+ get(table, id, options = {}) {
72
+ return request(config, "GET", `/${scope}/${table}/${id}${buildQueryString(options)}`);
73
+ },
74
+ update(table, id, data) {
75
+ return request(config, "PATCH", `/${scope}/${table}/${id}`, data);
76
+ },
77
+ lookup(table, options = {}) {
78
+ return request(config, "GET", `/${scope}/lookup/${table}${buildQueryString(options)}`);
79
+ },
80
+ };
81
+ }
82
+ function createMeScopeClient(config) {
83
+ const base = createScopeClient(config, "me");
84
+ return {
85
+ ...base,
86
+ create(table, data) {
87
+ return request(config, "POST", `/me/${table}`, data);
88
+ },
89
+ whoami() {
90
+ return request(config, "GET", "/me/whoami");
91
+ },
92
+ };
93
+ }
94
+ /** Create a configured API client instance */
95
+ export function createClient(config) {
96
+ return {
97
+ me: createMeScopeClient(config),
98
+ team: createScopeClient(config, "team"),
99
+ all: createScopeClient(config, "all"),
100
+ choices(table, field) {
101
+ const path = field
102
+ ? `/choices/${table}/${field}`
103
+ : `/choices/${table}`;
104
+ return field
105
+ ? request(config, "GET", path)
106
+ : request(config, "GET", path);
107
+ },
108
+ schema(table) {
109
+ const qs = table ? `?table=${encodeURIComponent(table)}` : "";
110
+ return table
111
+ ? request(config, "GET", `/schema${qs}`)
112
+ : request(config, "GET", `/schema${qs}`);
113
+ },
114
+ };
115
+ }
116
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SDK type generator — produces TypeScript interfaces and choice enums
3
+ * from a schema response.
4
+ *
5
+ * Can be used:
6
+ * - By the CLI: `npx dataverse-client generate --url https://...`
7
+ * - Programmatically: `import { generateTableTypes } from "@truenorth-it/dataverse-client"`
8
+ *
9
+ * The schema data comes from `GET /api/v2/schema` (public, no auth required).
10
+ * Choice values come from `GET /api/v2/choices/:table` (public by default).
11
+ */
12
+ import type { SchemaField, ExpandSchema } from "./types.js";
13
+ /** Input shape for a single table — matches the /api/v2/schema response */
14
+ export interface SchemaTableInput {
15
+ name: string;
16
+ aliases?: string[];
17
+ fields: SchemaField[];
18
+ expands?: ExpandSchema[];
19
+ }
20
+ /** Input shape — matches the full /api/v2/schema response */
21
+ export interface SchemaResponse {
22
+ tables: SchemaTableInput[];
23
+ }
24
+ /** Choice values for a table's fields — matches GET /api/v2/choices/:table */
25
+ export interface TableChoicesInput {
26
+ table: string;
27
+ fields: Record<string, {
28
+ value: number;
29
+ label: string;
30
+ }[]>;
31
+ }
32
+ /**
33
+ * Generate TypeScript source code with per-table interfaces, choice
34
+ * value constants, and a TableName union from a schema response.
35
+ *
36
+ * @param schema - The schema response object (or just `{ tables: [...] }`)
37
+ * @param choices - Optional choice values per table (from /api/v2/choices/:table)
38
+ * @returns TypeScript source code as a string
39
+ */
40
+ export declare function generateTableTypes(schema: SchemaResponse, choices?: TableChoicesInput[]): string;
41
+ //# sourceMappingURL=codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CAC5D;AAsHD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,EAAE,GAC5B,MAAM,CA0CR"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * SDK type generator — produces TypeScript interfaces and choice enums
3
+ * from a schema response.
4
+ *
5
+ * Can be used:
6
+ * - By the CLI: `npx dataverse-client generate --url https://...`
7
+ * - Programmatically: `import { generateTableTypes } from "@truenorth-it/dataverse-client"`
8
+ *
9
+ * The schema data comes from `GET /api/v2/schema` (public, no auth required).
10
+ * Choice values come from `GET /api/v2/choices/:table` (public by default).
11
+ */
12
+ // ── Type mapping ──────────────────────────────────────────────────────
13
+ function mapFieldToTs(type) {
14
+ switch (type) {
15
+ case "string": return "string";
16
+ case "number": return "number";
17
+ case "datetime": return "string";
18
+ case "boolean": return "boolean";
19
+ case "lookup": return "string";
20
+ case "choice": return "number";
21
+ default: return "unknown";
22
+ }
23
+ }
24
+ // ── Naming helpers ────────────────────────────────────────────────────
25
+ function pascalCase(name) {
26
+ return name
27
+ .split(/[_\-\s]+/)
28
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
29
+ .join("");
30
+ }
31
+ /** Convert a choice label like "In Progress" to a safe enum key like "InProgress" */
32
+ function toEnumKey(label) {
33
+ // Remove anything that's not alphanumeric or space/underscore
34
+ const cleaned = label.replace(/[^a-zA-Z0-9\s_-]/g, "");
35
+ const pascal = pascalCase(cleaned);
36
+ // If the result starts with a digit, prefix with underscore
37
+ if (/^\d/.test(pascal))
38
+ return `_${pascal}`;
39
+ return pascal || "_Unknown";
40
+ }
41
+ // ── Interface builder ─────────────────────────────────────────────────
42
+ function buildInterface(table) {
43
+ const name = pascalCase(table.name);
44
+ const lines = [];
45
+ // Build a lookup map from expands for resolving related table names
46
+ const expandMap = new Map();
47
+ if (table.expands) {
48
+ for (const e of table.expands) {
49
+ expandMap.set(e.lookupField, e.relatedTable);
50
+ }
51
+ }
52
+ lines.push(`/** Fields for the \`${table.name}\` table */`);
53
+ lines.push(`export interface ${name} {`);
54
+ for (const field of table.fields) {
55
+ if (field.description) {
56
+ lines.push(` /** ${field.description} */`);
57
+ }
58
+ lines.push(` ${field.name}?: ${mapFieldToTs(field.type)};`);
59
+ // Choice fields get a _label sibling
60
+ if (field.type === "choice") {
61
+ lines.push(` /** Display label for ${field.name} */`);
62
+ lines.push(` ${field.name}_label?: string;`);
63
+ }
64
+ // Lookup fields get a _value sibling (the GUID returned by OData)
65
+ if (field.type === "lookup") {
66
+ const related = field.lookupTable ?? expandMap.get(field.name) ?? "record";
67
+ lines.push(` /** GUID of the related ${related} */`);
68
+ lines.push(` _${field.name}_value?: string;`);
69
+ }
70
+ }
71
+ lines.push("}");
72
+ return lines.join("\n");
73
+ }
74
+ // ── Choice enum builder ──────────────────────────────────────────────
75
+ function buildChoiceEnums(table, choices) {
76
+ const tablePascal = pascalCase(table.name);
77
+ const enums = [];
78
+ for (const field of table.fields) {
79
+ if (field.type !== "choice")
80
+ continue;
81
+ const values = choices.fields[field.name];
82
+ if (!values || values.length === 0)
83
+ continue;
84
+ const enumName = `${tablePascal}${pascalCase(field.name)}`;
85
+ const lines = [];
86
+ lines.push(`/** Choice values for \`${table.name}.${field.name}\` */`);
87
+ lines.push(`export const ${enumName} = {`);
88
+ // Deduplicate enum keys (some Dataverse option sets have duplicate labels)
89
+ const usedKeys = new Set();
90
+ for (const { value, label } of values) {
91
+ let key = toEnumKey(label);
92
+ if (usedKeys.has(key)) {
93
+ key = `${key}_${value}`;
94
+ }
95
+ usedKeys.add(key);
96
+ lines.push(` /** ${label} */`);
97
+ lines.push(` ${key}: ${value},`);
98
+ }
99
+ lines.push("} as const;");
100
+ lines.push(`export type ${enumName} = typeof ${enumName}[keyof typeof ${enumName}];`);
101
+ enums.push(lines.join("\n"));
102
+ }
103
+ return enums;
104
+ }
105
+ // ── Main generator ────────────────────────────────────────────────────
106
+ /**
107
+ * Generate TypeScript source code with per-table interfaces, choice
108
+ * value constants, and a TableName union from a schema response.
109
+ *
110
+ * @param schema - The schema response object (or just `{ tables: [...] }`)
111
+ * @param choices - Optional choice values per table (from /api/v2/choices/:table)
112
+ * @returns TypeScript source code as a string
113
+ */
114
+ export function generateTableTypes(schema, choices) {
115
+ const choicesByTable = new Map();
116
+ if (choices) {
117
+ for (const c of choices) {
118
+ choicesByTable.set(c.table, c);
119
+ }
120
+ }
121
+ const blocks = [];
122
+ for (const table of schema.tables) {
123
+ blocks.push(buildInterface(table));
124
+ // Generate choice enums if choice data is available for this table
125
+ const tableChoices = choicesByTable.get(table.name);
126
+ if (tableChoices) {
127
+ const enums = buildChoiceEnums(table, tableChoices);
128
+ if (enums.length > 0) {
129
+ blocks.push(enums.join("\n\n"));
130
+ }
131
+ }
132
+ }
133
+ // Build TableName union from route names + aliases
134
+ const tableNames = schema.tables.map((t) => `"${t.name}"`);
135
+ const aliasNames = schema.tables.flatMap((t) => (t.aliases ?? []).map((a) => `"${a}"`));
136
+ const allNames = [...tableNames, ...aliasNames];
137
+ return [
138
+ "/* eslint-disable */",
139
+ "// ┌──────────────────────────────────────────────────────────────────────┐",
140
+ "// │ AUTO-GENERATED by `npx dataverse-client generate` │",
141
+ "// │ DO NOT EDIT — regenerate with the CLI when your schema changes. │",
142
+ "// └──────────────────────────────────────────────────────────────────────┘",
143
+ "",
144
+ ...blocks.map((b) => b + "\n"),
145
+ `/** All valid table names accepted by the API */`,
146
+ `export type TableName = ${allNames.join(" | ")};`,
147
+ "",
148
+ ].join("\n");
149
+ }
150
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { createClient, ApiError } from "./client.js";
2
+ export type { DataverseClient, ScopeClient, MeScopeClient, } from "./client.js";
3
+ export type { ClientConfig, QueryOptions, LookupOptions, PaginatedResponse, SingleResponse, WhoamiResponse, TableSchema, SchemaField, ExpandSchema, Choice, FieldChoicesResponse, TableChoicesResponse, ApiErrorBody, } from "./types.js";
4
+ export { generateTableTypes } from "./codegen.js";
5
+ export type { SchemaTableInput, SchemaResponse, TableChoicesInput } from "./codegen.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EACV,eAAe,EACf,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createClient, ApiError } from "./client.js";
2
+ // Codegen — generate TypeScript interfaces from a schema response
3
+ export { generateTableTypes } from "./codegen.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAsBrD,kEAAkE;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}