@jigisha_ruparel/taf-client-metadata 0.1.0 → 0.2.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/dist/index.d.ts CHANGED
@@ -62,6 +62,82 @@ interface QueryDef {
62
62
  appObjectName: string;
63
63
  configurations: unknown;
64
64
  }
65
+ interface DiffEntry {
66
+ id: string;
67
+ referenceName: string;
68
+ oldValue?: unknown;
69
+ newValue?: unknown;
70
+ }
71
+ interface DiffGroup {
72
+ added: DiffEntry[];
73
+ updated: DiffEntry[];
74
+ deleted: DiffEntry[];
75
+ }
76
+ interface EnvInfo {
77
+ id: string;
78
+ name: string;
79
+ sequence: number;
80
+ releaseVersion?: string;
81
+ connectionId?: string;
82
+ }
83
+ interface MetadataDiff {
84
+ source: EnvInfo;
85
+ target: EnvInfo;
86
+ appObjects: DiffGroup;
87
+ customScripts: DiffGroup;
88
+ screens: DiffGroup;
89
+ }
90
+ interface TableDiff extends DiffGroup {
91
+ summary: {
92
+ added: number;
93
+ updated: number;
94
+ deleted: number;
95
+ totalChanges: number;
96
+ };
97
+ }
98
+ interface DataDiff {
99
+ source: EnvInfo;
100
+ target: EnvInfo;
101
+ tables: Record<string, TableDiff>;
102
+ summary: {
103
+ tablesCompared: number;
104
+ tablesWithChanges: number;
105
+ totalAdded: number;
106
+ totalUpdated: number;
107
+ totalDeleted: number;
108
+ totalChanges: number;
109
+ };
110
+ }
111
+ interface ApplyReleaseInput {
112
+ releaseId: string;
113
+ sourceEnvId: string;
114
+ targetEnvId: string;
115
+ }
116
+ interface ApplyReleaseError {
117
+ entityId: string;
118
+ entityType: string;
119
+ error: string;
120
+ }
121
+ interface ApplyReleaseResult {
122
+ success: boolean;
123
+ totalApplied: number;
124
+ totalFailed: number;
125
+ totalSkipped: number;
126
+ message: string;
127
+ errors: ApplyReleaseError[];
128
+ }
129
+ interface SyncResult {
130
+ message: string;
131
+ correlationId: string;
132
+ isFullRebuild: boolean;
133
+ }
134
+ interface CompareOptions {
135
+ sourceEnvId?: string;
136
+ targetEnvId?: string;
137
+ }
138
+ interface SubscribeOptions {
139
+ intervalMs?: number;
140
+ }
65
141
 
66
142
  interface MetadataClient {
67
143
  getEntity(nameOrId: string, version?: string): Promise<EntitySchema>;
@@ -72,6 +148,11 @@ interface MetadataClient {
72
148
  appObjectName: string;
73
149
  queryName: string;
74
150
  }, version?: string): Promise<QueryDef>;
151
+ compareMetadata(opts?: CompareOptions): Promise<MetadataDiff>;
152
+ compareData(opts?: CompareOptions): Promise<DataDiff>;
153
+ applyRelease(input: ApplyReleaseInput): Promise<ApplyReleaseResult>;
154
+ syncMetadata(full?: boolean): Promise<SyncResult>;
155
+ subscribe(onChange: () => void, opts?: SubscribeOptions): () => void;
75
156
  }
76
157
  declare function createMetadataClient(core: TafClientCore): MetadataClient;
77
158
 
@@ -81,4 +162,4 @@ declare function parseAppObject(resp: {
81
162
  appObjectJson?: string;
82
163
  }): EntitySchema;
83
164
 
84
- export { type ColumnType, type EntitySchema, type EntitySummary, type FieldConfig, type FieldSchema, type FieldTypeInfo, type LookupInfo, type MetadataClient, type QueryDef, type ScreenDef, columnTypeFor, createMetadataClient, parseAppObject };
165
+ export { type ApplyReleaseError, type ApplyReleaseInput, type ApplyReleaseResult, type ColumnType, type CompareOptions, type DataDiff, type DiffEntry, type DiffGroup, type EntitySchema, type EntitySummary, type EnvInfo, type FieldConfig, type FieldSchema, type FieldTypeInfo, type LookupInfo, type MetadataClient, type MetadataDiff, type QueryDef, type ScreenDef, type SubscribeOptions, type SyncResult, type TableDiff, columnTypeFor, createMetadataClient, parseAppObject };
package/dist/index.js CHANGED
@@ -88,6 +88,20 @@ function jsonParse(s) {
88
88
  return s;
89
89
  }
90
90
  }
91
+ function envInfo(e) {
92
+ const o = e ?? {};
93
+ return { id: String(o["id"] ?? ""), name: String(o["name"] ?? ""), sequence: Number(o["sequence"] ?? 0), releaseVersion: o["releaseVersion"] ?? void 0, connectionId: o["connectionId"] ?? void 0 };
94
+ }
95
+ function diffEntry(x) {
96
+ const o = x ?? {};
97
+ const props = o["properties"];
98
+ return { id: String(o["id"] ?? ""), referenceName: String(o["referenceName"] ?? ""), oldValue: props ? props["oldValue"] : o["oldValue"], newValue: props ? props["newValue"] : o["newValue"] };
99
+ }
100
+ function diffGroup(g) {
101
+ const o = g ?? {};
102
+ const arr = (k) => Array.isArray(o[k]) ? o[k].map(diffEntry) : [];
103
+ return { added: arr("added"), updated: arr("updated"), deleted: arr("deleted") };
104
+ }
91
105
  function createMetadataClient(core) {
92
106
  const { http } = core;
93
107
  let fieldTypes = null;
@@ -97,7 +111,7 @@ function createMetadataClient(core) {
97
111
  if (!ok) throwForError(error, res.status);
98
112
  return value;
99
113
  }
100
- return {
114
+ const client = {
101
115
  async getEntity(nameOrId, version) {
102
116
  const resp = await get(`appobject/${encodeURIComponent(nameOrId)}${q(version)}`);
103
117
  return parseAppObject(resp);
@@ -121,8 +135,106 @@ function createMetadataClient(core) {
121
135
  const path = typeof idOrName === "string" ? `query/${encodeURIComponent(idOrName)}${q(version)}` : `query?appObjectName=${encodeURIComponent(idOrName.appObjectName)}&queryName=${encodeURIComponent(idOrName.queryName)}${version ? `&version=${encodeURIComponent(version)}` : ""}`;
122
136
  const r = await get(path);
123
137
  return { queryId: String(r["queryId"] ?? ""), queryName: String(r["queryName"] ?? ""), appObjectId: String(r["appObjectId"] ?? ""), appObjectName: String(r["appObjectName"] ?? ""), configurations: jsonParse(r["configurations"]) };
138
+ },
139
+ async compareMetadata(opts) {
140
+ const p = new URLSearchParams();
141
+ if (opts?.sourceEnvId) p.set("sourceEnvironmentId", opts.sourceEnvId);
142
+ if (opts?.targetEnvId) p.set("targetEnvironmentId", opts.targetEnvId);
143
+ const qs = p.toString();
144
+ const r = await get(`release/diff/metadata${qs ? `?${qs}` : ""}`);
145
+ const md = r["metadataDiff"] ?? {};
146
+ return {
147
+ source: envInfo(r["sourceEnvironment"]),
148
+ target: envInfo(r["targetEnvironment"]),
149
+ appObjects: diffGroup(md["appObjects"]),
150
+ customScripts: diffGroup(md["customScripts"]),
151
+ screens: diffGroup(md["screens"])
152
+ };
153
+ },
154
+ async compareData(opts) {
155
+ const p = new URLSearchParams();
156
+ if (opts?.sourceEnvId) p.set("sourceEnvironmentId", opts.sourceEnvId);
157
+ if (opts?.targetEnvId) p.set("targetEnvironmentId", opts.targetEnvId);
158
+ const qs = p.toString();
159
+ const r = await get(`release/diff/data${qs ? `?${qs}` : ""}`);
160
+ const dd = r["dataDiff"] ?? {};
161
+ const tables = {};
162
+ for (const [name, raw] of Object.entries(dd)) {
163
+ const g = diffGroup(raw);
164
+ const s = raw["summary"] ?? {};
165
+ tables[name] = { ...g, summary: { added: Number(s["addedCount"] ?? 0), updated: Number(s["updatedCount"] ?? 0), deleted: Number(s["deletedCount"] ?? 0), totalChanges: Number(s["totalChanges"] ?? 0) } };
166
+ }
167
+ const sm = r["summary"] ?? {};
168
+ return {
169
+ source: envInfo(r["sourceEnvironment"]),
170
+ target: envInfo(r["targetEnvironment"]),
171
+ tables,
172
+ summary: { tablesCompared: Number(sm["tablesCompared"] ?? 0), tablesWithChanges: Number(sm["tablesWithChanges"] ?? 0), totalAdded: Number(sm["totalAdded"] ?? 0), totalUpdated: Number(sm["totalUpdated"] ?? 0), totalDeleted: Number(sm["totalDeleted"] ?? 0), totalChanges: Number(sm["totalChanges"] ?? 0) }
173
+ };
174
+ },
175
+ async applyRelease(input) {
176
+ const res = await http.request("metadata", "POST", "release/apply", { body: { releaseId: input.releaseId, sourceEnvId: input.sourceEnvId, targetEnvId: input.targetEnvId } });
177
+ const { ok, value, error } = unwrap(res.body);
178
+ if (!ok) throwForError(error, res.status);
179
+ const v = value ?? {};
180
+ const errs = Array.isArray(v["allErrors"]) ? v["allErrors"] : [];
181
+ return {
182
+ success: v["success"] === true,
183
+ totalApplied: Number(v["totalApplied"] ?? 0),
184
+ totalFailed: Number(v["totalFailed"] ?? 0),
185
+ totalSkipped: Number(v["totalSkipped"] ?? 0),
186
+ message: String(v["message"] ?? ""),
187
+ errors: errs.map((e) => ({ entityId: String(e["entityId"] ?? ""), entityType: String(e["entityType"] ?? ""), error: String(e["error"] ?? "") }))
188
+ };
189
+ },
190
+ async syncMetadata(full) {
191
+ const res = await http.request("metadata", "POST", `sync/metadata?full=${full ? "true" : "false"}`);
192
+ if (res.status >= 400) {
193
+ const { error } = unwrap(res.body);
194
+ throwForError(error, res.status);
195
+ }
196
+ const b2 = res.body ?? {};
197
+ return { message: String(b2["message"] ?? ""), correlationId: String(b2["correlationId"] ?? ""), isFullRebuild: b2["isFullRebuild"] === true };
198
+ },
199
+ subscribe(onChange, opts) {
200
+ const intervalMs = opts?.intervalMs ?? 3e4;
201
+ let marker = null;
202
+ let stopped = false;
203
+ const readMarker = async () => {
204
+ try {
205
+ const list = await client.listEntities();
206
+ return JSON.stringify(list.map((e) => e.appObjectId).sort());
207
+ } catch {
208
+ return null;
209
+ }
210
+ };
211
+ const tick = async () => {
212
+ if (stopped) return;
213
+ const next = await readMarker();
214
+ if (stopped || next === null) return;
215
+ if (marker === null) {
216
+ marker = next;
217
+ return;
218
+ }
219
+ if (next !== marker) {
220
+ marker = next;
221
+ try {
222
+ onChange();
223
+ } catch {
224
+ }
225
+ }
226
+ };
227
+ const handle = setInterval(() => {
228
+ void tick();
229
+ }, intervalMs);
230
+ void tick();
231
+ return () => {
232
+ stopped = true;
233
+ clearInterval(handle);
234
+ };
124
235
  }
125
236
  };
237
+ return client;
126
238
  }
127
239
  export {
128
240
  columnTypeFor,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/metadata.ts","../src/map.ts"],"sourcesContent":["import type { TafClientCore } from '@jigisha_ruparel/taf-client-core';\nimport { unwrap, throwForError } from '@jigisha_ruparel/taf-client-core';\nimport type { EntitySchema, EntitySummary, FieldTypeInfo, QueryDef, ScreenDef } from './types';\nimport { mapFieldTypes, parseAppObject } from './map';\n\nexport interface MetadataClient {\n getEntity(nameOrId: string, version?: string): Promise<EntitySchema>;\n listEntities(version?: string): Promise<EntitySummary[]>;\n getFieldTypes(): Promise<Map<number, FieldTypeInfo>>;\n getScreen(screenId: string): Promise<ScreenDef>;\n getQuery(idOrName: string | { appObjectName: string; queryName: string }, version?: string): Promise<QueryDef>;\n}\nconst q = (v?: string) => (v ? `?version=${encodeURIComponent(v)}` : '');\nfunction jsonParse(s: unknown): unknown { if (typeof s !== 'string') return s; try { return JSON.parse(s); } catch { return s; } }\n\nexport function createMetadataClient(core: TafClientCore): MetadataClient {\n const { http } = core;\n let fieldTypes: Map<number, FieldTypeInfo> | null = null;\n async function get<T>(path: string): Promise<T> {\n const res = await http.request<unknown>('metadata', 'GET', path);\n const { ok, value, error } = unwrap<T>(res.body);\n if (!ok) throwForError(error, res.status);\n return value as T;\n }\n return {\n async getEntity(nameOrId, version) {\n const resp = await get<{ appObjectId?: string; appObjectJson?: string }>(`appobject/${encodeURIComponent(nameOrId)}${q(version)}`);\n return parseAppObject(resp);\n },\n async listEntities(version) {\n const schema = await get<{ appObjects?: Record<string, unknown>[] }>(`metadata/schema${q(version)}`);\n return (schema.appObjects ?? []).map((a) => ({ appObjectId: String(a['appObjectId'] ?? ''), objectName: String(a['objectName'] ?? a['appObjectName'] ?? ''), displayName: String(a['displayName'] ?? a['objectName'] ?? '') }));\n },\n async getFieldTypes() {\n if (fieldTypes) return fieldTypes;\n const resp = await get<{ items?: Record<string, unknown>[] } | Record<string, unknown>[]>('metadata/field-types');\n const items = Array.isArray(resp) ? resp : (resp.items ?? []);\n fieldTypes = mapFieldTypes(items);\n return fieldTypes;\n },\n async getScreen(screenId) {\n const s = await get<Record<string, unknown>>(`screen/${encodeURIComponent(screenId)}`);\n return { screenId: String(s['screenId'] ?? screenId), screenName: String(s['screenName'] ?? ''), screenType: Number(s['screenType'] ?? 0), container: jsonParse(s['container']) };\n },\n async getQuery(idOrName, version) {\n const path = typeof idOrName === 'string'\n ? `query/${encodeURIComponent(idOrName)}${q(version)}`\n : `query?appObjectName=${encodeURIComponent(idOrName.appObjectName)}&queryName=${encodeURIComponent(idOrName.queryName)}${version ? `&version=${encodeURIComponent(version)}` : ''}`;\n const r = await get<Record<string, unknown>>(path);\n return { queryId: String(r['queryId'] ?? ''), queryName: String(r['queryName'] ?? ''), appObjectId: String(r['appObjectId'] ?? ''), appObjectName: String(r['appObjectName'] ?? ''), configurations: jsonParse(r['configurations']) };\n },\n };\n}\n","import type { ColumnType, EntitySchema, FieldSchema, FieldTypeInfo } from './types';\nexport function columnTypeFor(dataType: number, hasLookup: boolean): ColumnType {\n if (hasLookup) return 'lookup';\n switch (dataType) {\n case 1: return 'string';\n case 2: case 4: case 16: return 'number';\n case 3: return 'boolean';\n case 5: return 'date';\n case 6: return 'datetime';\n case 17: return 'lookup';\n default: return 'string';\n }\n}\nfunction dataTypeOf(ft: unknown): number {\n if (ft && typeof ft === 'object' && 'dataType' in (ft as Record<string, unknown>)) return Number((ft as { dataType: unknown }).dataType) || 0;\n return typeof ft === 'number' ? ft : 0;\n}\nfunction b(v: unknown): boolean { return v === true; }\nfunction mapField(fd: Record<string, unknown>): FieldSchema {\n const dataType = dataTypeOf(fd['fieldType']);\n const lud = fd['lookUpDetails'] as Record<string, unknown> | undefined;\n const lookup = lud ? { lookupObject: String(lud['lookupObject'] ?? ''), lookupField: String(lud['lookupField'] ?? 'Id'), displayField: String(lud['displayField'] ?? '') } : undefined;\n const cfg = fd['fieldConfiguration'] as Record<string, unknown> | undefined;\n return {\n fieldName: String(fd['fieldName'] ?? ''), displayName: String(fd['displayName'] ?? fd['fieldName'] ?? ''),\n dataType, columnType: columnTypeFor(dataType, !!lookup),\n isPrimaryKey: b(fd['isPrimaryKey']), isRequired: b(fd['isRequired']), isUnique: b(fd['isUnique']),\n isUpdatable: fd['isUpdatable'] !== false, isSearchable: b(fd['isSearchable']),\n isVisible: fd['isVisible'] !== false, isConfidential: b(fd['isConfidential']),\n isDeprecated: b(fd['isDeprecated']), isDisplayField: b(fd['isDisplayField']),\n lookup, config: cfg ? { defaultValue: cfg['defaultValue'], maxLength: cfg['maxLength'] as number|undefined, minValue: cfg['minValue'] as number|undefined, maxValue: cfg['maxValue'] as number|undefined, picklistValues: cfg['picklistValues'] as unknown[]|undefined, formatter: cfg['formatter'] as string|undefined } : undefined,\n };\n}\nexport function parseAppObject(resp: { appObjectId?: string; appObjectJson?: string }): EntitySchema {\n let ao: Record<string, unknown> = {};\n try { ao = resp.appObjectJson ? (JSON.parse(resp.appObjectJson) as Record<string, unknown>) : {}; } catch { ao = {}; }\n const fields = Array.isArray(ao['fields']) ? (ao['fields'] as Record<string, unknown>[]).map(mapField) : [];\n return {\n appObjectId: String(resp.appObjectId ?? ao['appObjectId'] ?? ''),\n objectName: String(ao['objectName'] ?? ''), displayName: String(ao['displayName'] ?? ao['objectName'] ?? ''),\n allowSoftDelete: b(ao['allowSoftDelete']), fields,\n };\n}\nexport function mapFieldTypes(items: Record<string, unknown>[]): Map<number, FieldTypeInfo> {\n const m = new Map<number, FieldTypeInfo>();\n for (const it of items ?? []) { const id = Number(it['id']); if (!Number.isNaN(id)) m.set(id, { id, name: String(it['name'] ?? ''), sqlType: String(it['canonicalSqlType'] ?? it['sqlType'] ?? '') }); }\n return m;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/metadata.ts","../src/map.ts"],"sourcesContent":["import type { TafClientCore } from '@jigisha_ruparel/taf-client-core';\nimport { unwrap, throwForError } from '@jigisha_ruparel/taf-client-core';\nimport type { EntitySchema, EntitySummary, FieldTypeInfo, QueryDef, ScreenDef, MetadataDiff, DataDiff, DiffGroup, DiffEntry, EnvInfo, TableDiff, ApplyReleaseInput, ApplyReleaseResult, SyncResult, CompareOptions, SubscribeOptions } from './types';\nimport { mapFieldTypes, parseAppObject } from './map';\n\nexport interface MetadataClient {\n getEntity(nameOrId: string, version?: string): Promise<EntitySchema>;\n listEntities(version?: string): Promise<EntitySummary[]>;\n getFieldTypes(): Promise<Map<number, FieldTypeInfo>>;\n getScreen(screenId: string): Promise<ScreenDef>;\n getQuery(idOrName: string | { appObjectName: string; queryName: string }, version?: string): Promise<QueryDef>;\n // v2: version / compare / apply / sync / subscribe\n compareMetadata(opts?: CompareOptions): Promise<MetadataDiff>;\n compareData(opts?: CompareOptions): Promise<DataDiff>;\n applyRelease(input: ApplyReleaseInput): Promise<ApplyReleaseResult>;\n syncMetadata(full?: boolean): Promise<SyncResult>;\n subscribe(onChange: () => void, opts?: SubscribeOptions): () => void;\n}\nconst q = (v?: string) => (v ? `?version=${encodeURIComponent(v)}` : '');\nfunction jsonParse(s: unknown): unknown { if (typeof s !== 'string') return s; try { return JSON.parse(s); } catch { return s; } }\n\n// ---- v2 diff mapping helpers (camelCase wire shapes, verified against the response DTOs) ---------\nfunction envInfo(e: unknown): EnvInfo {\n const o = (e ?? {}) as Record<string, unknown>;\n return { id: String(o['id'] ?? ''), name: String(o['name'] ?? ''), sequence: Number(o['sequence'] ?? 0), releaseVersion: (o['releaseVersion'] ?? undefined) as string | undefined, connectionId: (o['connectionId'] ?? undefined) as string | undefined };\n}\nfunction diffEntry(x: unknown): DiffEntry {\n const o = (x ?? {}) as Record<string, unknown>;\n // AppObject items carry oldValue/newValue under `properties`; entity/record items carry them at the top.\n const props = o['properties'] as Record<string, unknown> | undefined;\n return { id: String(o['id'] ?? ''), referenceName: String(o['referenceName'] ?? ''), oldValue: props ? props['oldValue'] : o['oldValue'], newValue: props ? props['newValue'] : o['newValue'] };\n}\nfunction diffGroup(g: unknown): DiffGroup {\n const o = (g ?? {}) as Record<string, unknown>;\n const arr = (k: string) => (Array.isArray(o[k]) ? (o[k] as unknown[]).map(diffEntry) : []);\n return { added: arr('added'), updated: arr('updated'), deleted: arr('deleted') };\n}\n\nexport function createMetadataClient(core: TafClientCore): MetadataClient {\n const { http } = core;\n let fieldTypes: Map<number, FieldTypeInfo> | null = null;\n async function get<T>(path: string): Promise<T> {\n const res = await http.request<unknown>('metadata', 'GET', path);\n const { ok, value, error } = unwrap<T>(res.body);\n if (!ok) throwForError(error, res.status);\n return value as T;\n }\n const client: MetadataClient = {\n async getEntity(nameOrId, version) {\n const resp = await get<{ appObjectId?: string; appObjectJson?: string }>(`appobject/${encodeURIComponent(nameOrId)}${q(version)}`);\n return parseAppObject(resp);\n },\n async listEntities(version) {\n const schema = await get<{ appObjects?: Record<string, unknown>[] }>(`metadata/schema${q(version)}`);\n return (schema.appObjects ?? []).map((a) => ({ appObjectId: String(a['appObjectId'] ?? ''), objectName: String(a['objectName'] ?? a['appObjectName'] ?? ''), displayName: String(a['displayName'] ?? a['objectName'] ?? '') }));\n },\n async getFieldTypes() {\n if (fieldTypes) return fieldTypes;\n const resp = await get<{ items?: Record<string, unknown>[] } | Record<string, unknown>[]>('metadata/field-types');\n const items = Array.isArray(resp) ? resp : (resp.items ?? []);\n fieldTypes = mapFieldTypes(items);\n return fieldTypes;\n },\n async getScreen(screenId) {\n const s = await get<Record<string, unknown>>(`screen/${encodeURIComponent(screenId)}`);\n return { screenId: String(s['screenId'] ?? screenId), screenName: String(s['screenName'] ?? ''), screenType: Number(s['screenType'] ?? 0), container: jsonParse(s['container']) };\n },\n async getQuery(idOrName, version) {\n const path = typeof idOrName === 'string'\n ? `query/${encodeURIComponent(idOrName)}${q(version)}`\n : `query?appObjectName=${encodeURIComponent(idOrName.appObjectName)}&queryName=${encodeURIComponent(idOrName.queryName)}${version ? `&version=${encodeURIComponent(version)}` : ''}`;\n const r = await get<Record<string, unknown>>(path);\n return { queryId: String(r['queryId'] ?? ''), queryName: String(r['queryName'] ?? ''), appObjectId: String(r['appObjectId'] ?? ''), appObjectName: String(r['appObjectName'] ?? ''), configurations: jsonParse(r['configurations']) };\n },\n\n async compareMetadata(opts) {\n const p = new URLSearchParams();\n if (opts?.sourceEnvId) p.set('sourceEnvironmentId', opts.sourceEnvId);\n if (opts?.targetEnvId) p.set('targetEnvironmentId', opts.targetEnvId);\n const qs = p.toString();\n const r = await get<Record<string, unknown>>(`release/diff/metadata${qs ? `?${qs}` : ''}`);\n const md = (r['metadataDiff'] ?? {}) as Record<string, unknown>;\n return {\n source: envInfo(r['sourceEnvironment']), target: envInfo(r['targetEnvironment']),\n appObjects: diffGroup(md['appObjects']), customScripts: diffGroup(md['customScripts']), screens: diffGroup(md['screens']),\n };\n },\n async compareData(opts) {\n const p = new URLSearchParams();\n if (opts?.sourceEnvId) p.set('sourceEnvironmentId', opts.sourceEnvId);\n if (opts?.targetEnvId) p.set('targetEnvironmentId', opts.targetEnvId);\n const qs = p.toString();\n const r = await get<Record<string, unknown>>(`release/diff/data${qs ? `?${qs}` : ''}`);\n const dd = (r['dataDiff'] ?? {}) as Record<string, unknown>;\n const tables: Record<string, TableDiff> = {};\n for (const [name, raw] of Object.entries(dd)) {\n const g = diffGroup(raw);\n const s = ((raw as Record<string, unknown>)['summary'] ?? {}) as Record<string, unknown>;\n tables[name] = { ...g, summary: { added: Number(s['addedCount'] ?? 0), updated: Number(s['updatedCount'] ?? 0), deleted: Number(s['deletedCount'] ?? 0), totalChanges: Number(s['totalChanges'] ?? 0) } };\n }\n const sm = (r['summary'] ?? {}) as Record<string, unknown>;\n return {\n source: envInfo(r['sourceEnvironment']), target: envInfo(r['targetEnvironment']), tables,\n summary: { tablesCompared: Number(sm['tablesCompared'] ?? 0), tablesWithChanges: Number(sm['tablesWithChanges'] ?? 0), totalAdded: Number(sm['totalAdded'] ?? 0), totalUpdated: Number(sm['totalUpdated'] ?? 0), totalDeleted: Number(sm['totalDeleted'] ?? 0), totalChanges: Number(sm['totalChanges'] ?? 0) },\n };\n },\n async applyRelease(input) {\n const res = await http.request<unknown>('metadata', 'POST', 'release/apply', { body: { releaseId: input.releaseId, sourceEnvId: input.sourceEnvId, targetEnvId: input.targetEnvId } });\n const { ok, value, error } = unwrap<Record<string, unknown>>(res.body);\n if (!ok) throwForError(error, res.status);\n const v = value ?? {};\n const errs = Array.isArray(v['allErrors']) ? (v['allErrors'] as Record<string, unknown>[]) : [];\n return {\n success: v['success'] === true, totalApplied: Number(v['totalApplied'] ?? 0), totalFailed: Number(v['totalFailed'] ?? 0), totalSkipped: Number(v['totalSkipped'] ?? 0),\n message: String(v['message'] ?? ''), errors: errs.map((e) => ({ entityId: String(e['entityId'] ?? ''), entityType: String(e['entityType'] ?? ''), error: String(e['error'] ?? '') })),\n };\n },\n async syncMetadata(full) {\n const res = await http.request<Record<string, unknown>>('metadata', 'POST', `sync/metadata?full=${full ? 'true' : 'false'}`);\n // http.request does NOT throw on non-2xx — surface a failure rather than returning an empty body.\n if (res.status >= 400) { const { error } = unwrap<unknown>(res.body); throwForError(error, res.status); }\n const b = (res.body ?? {}) as Record<string, unknown>; // RAW 202 body — not an OperationResult\n return { message: String(b['message'] ?? ''), correlationId: String(b['correlationId'] ?? ''), isFullRebuild: b['isFullRebuild'] === true };\n },\n subscribe(onChange, opts) {\n const intervalMs = opts?.intervalMs ?? 30000;\n let marker: string | null = null;\n let stopped = false;\n // A failed poll yields null → it never establishes a baseline or fires onChange (no spurious signal).\n const readMarker = async (): Promise<string | null> => {\n try { const list = await client.listEntities(); return JSON.stringify(list.map((e) => e.appObjectId).sort()); }\n catch { return null; }\n };\n const tick = async () => {\n if (stopped) return;\n const next = await readMarker();\n if (stopped || next === null) return; // re-check stopped after the await; skip failed polls\n if (marker === null) { marker = next; return; } // first successful read establishes the baseline only\n if (next !== marker) { marker = next; try { onChange(); } catch { /* consumer callback error is not ours to handle */ } }\n };\n const handle = setInterval(() => { void tick(); }, intervalMs);\n void tick(); // establish the baseline immediately\n return () => { stopped = true; clearInterval(handle); };\n },\n };\n return client;\n}\n","import type { ColumnType, EntitySchema, FieldSchema, FieldTypeInfo } from './types';\nexport function columnTypeFor(dataType: number, hasLookup: boolean): ColumnType {\n if (hasLookup) return 'lookup';\n switch (dataType) {\n case 1: return 'string';\n case 2: case 4: case 16: return 'number';\n case 3: return 'boolean';\n case 5: return 'date';\n case 6: return 'datetime';\n case 17: return 'lookup';\n default: return 'string';\n }\n}\nfunction dataTypeOf(ft: unknown): number {\n if (ft && typeof ft === 'object' && 'dataType' in (ft as Record<string, unknown>)) return Number((ft as { dataType: unknown }).dataType) || 0;\n return typeof ft === 'number' ? ft : 0;\n}\nfunction b(v: unknown): boolean { return v === true; }\nfunction mapField(fd: Record<string, unknown>): FieldSchema {\n const dataType = dataTypeOf(fd['fieldType']);\n const lud = fd['lookUpDetails'] as Record<string, unknown> | undefined;\n const lookup = lud ? { lookupObject: String(lud['lookupObject'] ?? ''), lookupField: String(lud['lookupField'] ?? 'Id'), displayField: String(lud['displayField'] ?? '') } : undefined;\n const cfg = fd['fieldConfiguration'] as Record<string, unknown> | undefined;\n return {\n fieldName: String(fd['fieldName'] ?? ''), displayName: String(fd['displayName'] ?? fd['fieldName'] ?? ''),\n dataType, columnType: columnTypeFor(dataType, !!lookup),\n isPrimaryKey: b(fd['isPrimaryKey']), isRequired: b(fd['isRequired']), isUnique: b(fd['isUnique']),\n isUpdatable: fd['isUpdatable'] !== false, isSearchable: b(fd['isSearchable']),\n isVisible: fd['isVisible'] !== false, isConfidential: b(fd['isConfidential']),\n isDeprecated: b(fd['isDeprecated']), isDisplayField: b(fd['isDisplayField']),\n lookup, config: cfg ? { defaultValue: cfg['defaultValue'], maxLength: cfg['maxLength'] as number|undefined, minValue: cfg['minValue'] as number|undefined, maxValue: cfg['maxValue'] as number|undefined, picklistValues: cfg['picklistValues'] as unknown[]|undefined, formatter: cfg['formatter'] as string|undefined } : undefined,\n };\n}\nexport function parseAppObject(resp: { appObjectId?: string; appObjectJson?: string }): EntitySchema {\n let ao: Record<string, unknown> = {};\n try { ao = resp.appObjectJson ? (JSON.parse(resp.appObjectJson) as Record<string, unknown>) : {}; } catch { ao = {}; }\n const fields = Array.isArray(ao['fields']) ? (ao['fields'] as Record<string, unknown>[]).map(mapField) : [];\n return {\n appObjectId: String(resp.appObjectId ?? ao['appObjectId'] ?? ''),\n objectName: String(ao['objectName'] ?? ''), displayName: String(ao['displayName'] ?? ao['objectName'] ?? ''),\n allowSoftDelete: b(ao['allowSoftDelete']), fields,\n };\n}\nexport function mapFieldTypes(items: Record<string, unknown>[]): Map<number, FieldTypeInfo> {\n const m = new Map<number, FieldTypeInfo>();\n for (const it of items ?? []) { const id = Number(it['id']); if (!Number.isNaN(id)) m.set(id, { id, name: String(it['name'] ?? ''), sqlType: String(it['canonicalSqlType'] ?? it['sqlType'] ?? '') }); }\n return m;\n}\n"],"mappings":"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","names":["b"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jigisha_ruparel/taf-client-metadata",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },