faros-js-client 0.2.9 → 0.2.11

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,54 @@
1
+ import * as gql from 'graphql';
2
+ import { FarosClient } from '../client';
3
+ import { FieldPaths } from './types';
4
+ export { FieldPaths } from './types';
5
+ /**
6
+ * Returns a mapping from V2 to V1 field paths. If a field is an object list,
7
+ * then its path will point to a nested structure that contains paths that
8
+ * are relative to it.
9
+ *
10
+ * Note: In V2, fields inside embedded object lists are stored identically to
11
+ * those in V1. The "mirrorPaths" boolean argument is true whenever traversal is
12
+ * happening inside an emdedded object list. This causes the V1 and V2 paths to
13
+ * be set to the same values, i.e., they'll be "mirrored".
14
+ */
15
+ export declare function getFieldPaths(ast: gql.ASTNode, typeInfo: gql.TypeInfo, mirrorPaths?: boolean): FieldPaths;
16
+ /**
17
+ * Converts a V1 query into a V2 query using the following rules:
18
+ *
19
+ * 1. Replaces the first two field selections, i.e., the model namespace and
20
+ * name, are replaced by a single, combined selection. Example:
21
+ *
22
+ * vcs { commits { sha createdAt } } => vcs_Commit { sha createdAt }
23
+ *
24
+ * 2. Flattens the selection set of each "nodes" and "metadata" field into the
25
+ * selection set of its parent. Examples:
26
+ *
27
+ * commits { nodes { sha createdAt } } => commits { sha createdAt }
28
+ * commit { metadata { refreshedAt } } => commit { refreshedAt }
29
+ *
30
+ * 3. Flattens the selection set of each embedded field into the selection set
31
+ * of its parent, prefixing names of nested fields with the parent name.
32
+ * Example:
33
+ *
34
+ * deployment { env { category } } => deployment { envCategory }
35
+ *
36
+ * 4. Removes nested fields from embedded object lists since these are stored
37
+ * as JSONB arrays in V2 and cannot be extracted. Example:
38
+ *
39
+ * task { additionalFields { name value } } => task { additionalFields }
40
+ */
41
+ export declare function asV2AST(ast: gql.ASTNode, typeInfo: gql.TypeInfo): gql.ASTNode;
42
+ /** Shim that retrieves data from a V2 graph using a V1 query */
43
+ export declare class QueryAdapter {
44
+ private readonly faros;
45
+ private readonly v1Schema;
46
+ constructor(faros: FarosClient, v1Schema: gql.GraphQLSchema);
47
+ /** Converts a V2 field value into a V1 field value */
48
+ private v1Value;
49
+ /** Converts a V2 node into a V1 node */
50
+ private v1Node;
51
+ /** Returns paths relative to the initial nodes path */
52
+ private nodePaths;
53
+ nodes(graph: string, v1Query: string, pageSize?: number): AsyncIterable<any>;
54
+ }
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.QueryAdapter = exports.asV2AST = exports.getFieldPaths = void 0;
30
+ const gql = __importStar(require("graphql"));
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const luxon_1 = require("luxon");
33
+ const pluralize_1 = require("pluralize");
34
+ const verror_1 = __importDefault(require("verror"));
35
+ const graphql_1 = require("../graphql/graphql");
36
+ const types_1 = require("./types");
37
+ /**
38
+ * Converts a V1 query namespace, specified as a model namespace and model name,
39
+ * into a V2 query namespace.
40
+ *
41
+ * For example, queryNamespace('vcs', 'commits') returns 'vcs_Commit'.
42
+ */
43
+ function queryNamespace(modelNamespace, model) {
44
+ let modelName;
45
+ if (modelNamespace === 'faros' && model.endsWith('Options')) {
46
+ // Don't singularize options models
47
+ modelName = model;
48
+ }
49
+ else {
50
+ modelName = (0, pluralize_1.singular)(model);
51
+ }
52
+ return `${modelNamespace}_${lodash_1.default.upperFirst(modelName)}`;
53
+ }
54
+ /**
55
+ * Returns the V2 field for an embedded V1 field.
56
+ *
57
+ * For example, embeddedName('env', 'category') returns 'envCategory'.
58
+ */
59
+ function embeddedName(parentName, fieldName) {
60
+ return `${parentName}${lodash_1.default.upperFirst(fieldName)}`;
61
+ }
62
+ /** Should this V1 field be omitted from a V2 query? */
63
+ function omitField(name, type) {
64
+ return name === graphql_1.METADATA || name === graphql_1.NODES || (0, graphql_1.isEmbeddedObjectType)(type);
65
+ }
66
+ /** Extracts nested fields with optional field rename */
67
+ function nestedFields(field, rename) {
68
+ var _a, _b;
69
+ const nestedFields = [];
70
+ const selections = (_b = (_a = field.selectionSet) === null || _a === void 0 ? void 0 : _a.selections) !== null && _b !== void 0 ? _b : [];
71
+ for (const selection of selections) {
72
+ if (selection.kind === 'Field') {
73
+ const name = selection.name.value;
74
+ nestedFields.push({
75
+ ...selection,
76
+ name: {
77
+ kind: gql.Kind.NAME,
78
+ value: rename ? rename(name) : name
79
+ }
80
+ });
81
+ }
82
+ }
83
+ return nestedFields;
84
+ }
85
+ /**
86
+ * Returns a mapping from V2 to V1 field paths. If a field is an object list,
87
+ * then its path will point to a nested structure that contains paths that
88
+ * are relative to it.
89
+ *
90
+ * Note: In V2, fields inside embedded object lists are stored identically to
91
+ * those in V1. The "mirrorPaths" boolean argument is true whenever traversal is
92
+ * happening inside an emdedded object list. This causes the V1 and V2 paths to
93
+ * be set to the same values, i.e., they'll be "mirrored".
94
+ */
95
+ function getFieldPaths(ast, typeInfo, mirrorPaths = false) {
96
+ const fieldStack = [];
97
+ const newFieldStack = [];
98
+ function pushField(name, type) {
99
+ fieldStack.push(name);
100
+ if (mirrorPaths || !omitField(name, type)) {
101
+ newFieldStack.push(name);
102
+ }
103
+ }
104
+ function popField(name) {
105
+ fieldStack.pop();
106
+ if (mirrorPaths || lodash_1.default.last(newFieldStack) === name) {
107
+ newFieldStack.pop();
108
+ }
109
+ }
110
+ const fieldPaths = {};
111
+ gql.visit(ast, gql.visitWithTypeInfo(typeInfo, {
112
+ Field: {
113
+ enter(node) {
114
+ let type = typeInfo.getType();
115
+ const parentType = typeInfo.getParentType();
116
+ if (gql.isNonNullType(type)) {
117
+ type = type.ofType;
118
+ }
119
+ if (!type) {
120
+ throw new verror_1.default('unable to determine type of field: %s', fieldStack.join('.'));
121
+ }
122
+ const fieldName = node.name.value;
123
+ pushField(fieldName, type);
124
+ if ((0, graphql_1.isModelQuery)(parentType, type)) {
125
+ // Convert the V1 query namespace to a V2 query namespace
126
+ // For example: vcs { commits { ...} } => vcs_Commit { ... }
127
+ newFieldStack.shift();
128
+ newFieldStack.shift();
129
+ const [namespace, name] = fieldStack;
130
+ newFieldStack.unshift(queryNamespace(namespace, name));
131
+ }
132
+ else if ((0, graphql_1.isObjectListType)(type)) {
133
+ // Recursive call to next object list
134
+ const nextNode = node.selectionSet;
135
+ if (nextNode) {
136
+ const newFieldPath = newFieldStack.join('.');
137
+ const fieldPath = fieldStack.join('.');
138
+ typeInfo.enter(nextNode);
139
+ fieldPaths[newFieldPath] = {
140
+ path: fieldPath,
141
+ nestedPaths: getFieldPaths(nextNode, typeInfo, mirrorPaths || (0, graphql_1.isEmbeddedObjectType)(type.ofType))
142
+ };
143
+ typeInfo.leave(nextNode);
144
+ popField(fieldName);
145
+ return false;
146
+ }
147
+ }
148
+ else if ((0, types_1.isLeafType)(type)) {
149
+ const fieldPath = fieldStack.join('.');
150
+ let newFieldPath = newFieldStack.join('.');
151
+ let fieldType = (0, types_1.asLeafValueType)(type);
152
+ if (mirrorPaths) {
153
+ fieldPaths[fieldPath] = { path: fieldPath, type: fieldType };
154
+ return undefined;
155
+ }
156
+ else if ((0, graphql_1.isEmbeddedObjectType)(parentType)) {
157
+ const parentName = fieldStack[fieldStack.length - 2];
158
+ if (parentName === graphql_1.METADATA) {
159
+ if (fieldName === graphql_1.REFRESHED_AT) {
160
+ // Hack: While V1 serializes "refreshedAt" the same as other
161
+ // timestamps (epoch millis string), it types it as a string.
162
+ // In V2, it's stored and typed like every other timestamp.
163
+ // We force conversion from ISO 8601 string => epoch millis
164
+ // string by overriding the type from string to timestamp.
165
+ fieldType = 'timestamp';
166
+ }
167
+ }
168
+ else {
169
+ // Prefix the last field name with the embedded field name
170
+ newFieldPath = [
171
+ ...newFieldStack.slice(0, -1),
172
+ embeddedName(parentName, fieldName)
173
+ ].join('.');
174
+ }
175
+ }
176
+ fieldPaths[newFieldPath] = { path: fieldPath, type: fieldType };
177
+ }
178
+ return undefined;
179
+ },
180
+ leave(node) {
181
+ popField(node.name.value);
182
+ }
183
+ }
184
+ }));
185
+ return fieldPaths;
186
+ }
187
+ exports.getFieldPaths = getFieldPaths;
188
+ /**
189
+ * Converts a V1 query into a V2 query using the following rules:
190
+ *
191
+ * 1. Replaces the first two field selections, i.e., the model namespace and
192
+ * name, are replaced by a single, combined selection. Example:
193
+ *
194
+ * vcs { commits { sha createdAt } } => vcs_Commit { sha createdAt }
195
+ *
196
+ * 2. Flattens the selection set of each "nodes" and "metadata" field into the
197
+ * selection set of its parent. Examples:
198
+ *
199
+ * commits { nodes { sha createdAt } } => commits { sha createdAt }
200
+ * commit { metadata { refreshedAt } } => commit { refreshedAt }
201
+ *
202
+ * 3. Flattens the selection set of each embedded field into the selection set
203
+ * of its parent, prefixing names of nested fields with the parent name.
204
+ * Example:
205
+ *
206
+ * deployment { env { category } } => deployment { envCategory }
207
+ *
208
+ * 4. Removes nested fields from embedded object lists since these are stored
209
+ * as JSONB arrays in V2 and cannot be extracted. Example:
210
+ *
211
+ * task { additionalFields { name value } } => task { additionalFields }
212
+ */
213
+ function asV2AST(ast, typeInfo) {
214
+ return gql.visit(ast, gql.visitWithTypeInfo(typeInfo, {
215
+ Field: {
216
+ // Handles rule (1)
217
+ leave(node, key, parent, path, ancestors) {
218
+ var _a, _b;
219
+ const grandparent = ancestors[ancestors.length - 2];
220
+ if ((0, types_1.isTypedArray)(grandparent)) {
221
+ return undefined;
222
+ }
223
+ else if (grandparent.kind !== 'OperationDefinition') {
224
+ return undefined;
225
+ }
226
+ else if (grandparent.operation !== 'query') {
227
+ throw new Error('only queries can be converted');
228
+ }
229
+ const modelField = (_b = (_a = node.selectionSet) === null || _a === void 0 ? void 0 : _a.selections) === null || _b === void 0 ? void 0 : _b[0];
230
+ if (!modelField || modelField.kind !== 'Field') {
231
+ throw new Error('query does not select a model');
232
+ }
233
+ const modelNamespace = node.name.value;
234
+ const model = modelField.name.value;
235
+ return {
236
+ ...modelField,
237
+ name: {
238
+ kind: 'Name',
239
+ value: queryNamespace(modelNamespace, model)
240
+ },
241
+ };
242
+ }
243
+ },
244
+ // Handles rules (2), (3) and (4)
245
+ SelectionSet: {
246
+ leave(node) {
247
+ const newSelections = [];
248
+ for (const selection of node.selections) {
249
+ typeInfo.enter(selection);
250
+ const selectionType = typeInfo.getType();
251
+ if (selection.kind === 'Field') {
252
+ if (selection.name.value === graphql_1.NODES ||
253
+ selection.name.value === graphql_1.METADATA) {
254
+ // Rule (2): flatten nodes and metadata fields
255
+ newSelections.push(...nestedFields(selection));
256
+ }
257
+ else if ((0, graphql_1.isEmbeddedObjectType)(selectionType)) {
258
+ // Rule (3): flatten embedded fields and rename them
259
+ const prefix = selection.name.value;
260
+ newSelections.push(...nestedFields(selection, (name) => embeddedName(prefix, name)));
261
+ }
262
+ else if ((0, graphql_1.isEmbeddedObjectListType)(selectionType)) {
263
+ // Rule (4): omit fields from embedded object lists
264
+ newSelections.push(lodash_1.default.omit(selection, 'selectionSet'));
265
+ }
266
+ else {
267
+ // Otherwise, leave the nested fields alone
268
+ newSelections.push(selection);
269
+ }
270
+ }
271
+ typeInfo.leave(selection);
272
+ }
273
+ return { kind: 'SelectionSet', selections: newSelections };
274
+ }
275
+ }
276
+ }));
277
+ }
278
+ exports.asV2AST = asV2AST;
279
+ /** Shim that retrieves data from a V2 graph using a V1 query */
280
+ class QueryAdapter {
281
+ constructor(faros, v1Schema) {
282
+ this.faros = faros;
283
+ this.v1Schema = v1Schema;
284
+ if (faros.graphVersion !== 'v2') {
285
+ throw new verror_1.default('query adapter only works with v2 clients. found version: %s', faros.graphVersion);
286
+ }
287
+ }
288
+ /** Converts a V2 field value into a V1 field value */
289
+ v1Value(v2Value, type) {
290
+ if ((0, types_1.isPrimitiveListType)(type)) {
291
+ if (Array.isArray(v2Value)) {
292
+ // Recursively convert entries
293
+ const v1List = [];
294
+ for (const v2EntryValue of v2Value) {
295
+ v1List.push(this.v1Value(v2EntryValue, type.entryType));
296
+ }
297
+ return v1List;
298
+ }
299
+ return v2Value;
300
+ }
301
+ else if (lodash_1.default.isNil(v2Value)) {
302
+ return v2Value;
303
+ }
304
+ if (type === 'double') {
305
+ if (lodash_1.default.isString(v2Value)) {
306
+ const double = parseFloat(v2Value);
307
+ if (!isNaN(double)) {
308
+ return double;
309
+ }
310
+ }
311
+ else if (lodash_1.default.isNumber(v2Value)) {
312
+ return v2Value;
313
+ }
314
+ throw new verror_1.default('invalid double: %s', v2Value);
315
+ }
316
+ else if (type === 'long') {
317
+ // Long may be a string or number in V2
318
+ if (lodash_1.default.isString(v2Value)) {
319
+ if (/^-?\d+$/.test(v2Value)) {
320
+ return v2Value;
321
+ }
322
+ }
323
+ else if (lodash_1.default.isNumber(v2Value)) {
324
+ return `${v2Value}`;
325
+ }
326
+ throw new verror_1.default('invalid long: %s', v2Value);
327
+ }
328
+ else if (type === 'timestamp') {
329
+ // A timestamp will be an ISO string in v2, unless it's inside a list of
330
+ // embedded objects, in which case it will be an epoch millis number
331
+ if (lodash_1.default.isString(v2Value)) {
332
+ const millis = luxon_1.DateTime.fromISO(v2Value).toMillis();
333
+ if (!isNaN(millis)) {
334
+ return `${millis}`;
335
+ }
336
+ }
337
+ else if (lodash_1.default.isNumber(v2Value)) {
338
+ return v2Value;
339
+ }
340
+ throw new verror_1.default('invalid timestamp: %s', v2Value);
341
+ }
342
+ return v2Value;
343
+ }
344
+ /** Converts a V2 node into a V1 node */
345
+ v1Node(v2Node, fieldPaths) {
346
+ const v1Node = {};
347
+ for (const [v2Path, v1Path] of Object.entries(fieldPaths)) {
348
+ if ((0, types_1.isLeafValue)(v1Path)) {
349
+ try {
350
+ const v1Value = this.v1Value(lodash_1.default.get(v2Node, v2Path), v1Path.type);
351
+ lodash_1.default.set(v1Node, v1Path.path, v1Value);
352
+ }
353
+ catch (err) {
354
+ throw new verror_1.default(err, 'failed to convert value in v2 field \'%s\' into value in v1 ' +
355
+ 'field \'%s\' of type \'%s\'', v2Path, v1Path.path, (0, types_1.isPrimitiveListType)(v1Path.type)
356
+ ? `[${v1Path.type.entryType}]`
357
+ : v1Path.type);
358
+ }
359
+ }
360
+ else {
361
+ const nestedV1Nodes = [];
362
+ const nestedV2Nodes = lodash_1.default.get(v2Node, v2Path);
363
+ const nestedPaths = v1Path.nestedPaths;
364
+ if (Array.isArray(nestedV2Nodes)) {
365
+ for (const nestedV2Node of nestedV2Nodes) {
366
+ const nestedV1Node = this.v1Node(nestedV2Node, nestedPaths);
367
+ if (nestedV1Node) {
368
+ nestedV1Nodes.push(nestedV1Node);
369
+ }
370
+ }
371
+ }
372
+ lodash_1.default.set(v1Node, v1Path.path, nestedV1Nodes);
373
+ }
374
+ }
375
+ return v1Node;
376
+ }
377
+ /** Returns paths relative to the initial nodes path */
378
+ nodePaths(v1AST, v1TypeInfo) {
379
+ const fieldPaths = getFieldPaths(v1AST, v1TypeInfo);
380
+ const [pathValue] = Object.values(fieldPaths);
381
+ if ((0, types_1.isNestedValue)(pathValue)) {
382
+ return pathValue.nestedPaths;
383
+ }
384
+ throw new verror_1.default('invalid path value: %s', pathValue);
385
+ }
386
+ nodes(graph, v1Query, pageSize = 100) {
387
+ const v1AST = gql.parse(v1Query);
388
+ const v1TypeInfo = new gql.TypeInfo(this.v1Schema);
389
+ const nodePaths = this.nodePaths(v1AST, v1TypeInfo);
390
+ const v2Query = gql.print(asV2AST(v1AST, v1TypeInfo));
391
+ const v2Nodes = this.faros.nodeIterable(graph, v2Query, pageSize, graphql_1.paginatedQueryV2);
392
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
393
+ const self = this;
394
+ return {
395
+ async *[Symbol.asyncIterator]() {
396
+ for await (const v2Node of v2Nodes) {
397
+ yield self.v1Node(v2Node, nodePaths);
398
+ }
399
+ }
400
+ };
401
+ }
402
+ }
403
+ exports.QueryAdapter = QueryAdapter;
404
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as gql from 'graphql';
2
+ /** Typescript needs a hint to correctly narrow readonly arrays */
3
+ export declare function isTypedArray<T>(arg: T | ReadonlyArray<T>): arg is ReadonlyArray<T>;
4
+ declare const primitiveTypes: readonly ["boolean", "double", "int", "long", "string", "timestamp"];
5
+ declare type PrimitiveType = typeof primitiveTypes[number];
6
+ export declare function isPrimitiveType(val: any): val is PrimitiveType;
7
+ interface PrimitiveListType {
8
+ readonly entryType: PrimitiveType;
9
+ }
10
+ export declare function isPrimitiveListType(val: any): val is PrimitiveListType;
11
+ export declare type LeafValueType = PrimitiveType | PrimitiveListType;
12
+ interface LeafValue {
13
+ readonly path: string;
14
+ readonly type: LeafValueType;
15
+ }
16
+ interface NestedValue {
17
+ readonly path: string;
18
+ readonly nestedPaths: FieldPaths;
19
+ }
20
+ export declare function isLeafValue(val: any): val is LeafValue;
21
+ export declare function isNestedValue(val: any): val is NestedValue;
22
+ declare type PathValue = LeafValue | NestedValue;
23
+ export interface FieldPaths {
24
+ readonly [path: string | symbol]: PathValue;
25
+ }
26
+ export declare function asLeafValueType(type: gql.GraphQLType): LeafValueType;
27
+ export declare function isLeafType(type: any): boolean;
28
+ export {};
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.isLeafType = exports.asLeafValueType = exports.isNestedValue = exports.isLeafValue = exports.isPrimitiveListType = exports.isPrimitiveType = exports.isTypedArray = void 0;
30
+ const gql = __importStar(require("graphql"));
31
+ const lodash_1 = __importDefault(require("lodash"));
32
+ const verror_1 = __importDefault(require("verror"));
33
+ /** Typescript needs a hint to correctly narrow readonly arrays */
34
+ function isTypedArray(arg) {
35
+ return Array.isArray(arg);
36
+ }
37
+ exports.isTypedArray = isTypedArray;
38
+ // Store as a const list so we can do a containment check and
39
+ // and also derive a union type of string literals from it
40
+ const primitiveTypes = [
41
+ 'boolean',
42
+ 'double',
43
+ 'int',
44
+ 'long',
45
+ 'string',
46
+ 'timestamp',
47
+ ];
48
+ function isPrimitiveType(val) {
49
+ return lodash_1.default.isString(val) && lodash_1.default.includes(primitiveTypes, val);
50
+ }
51
+ exports.isPrimitiveType = isPrimitiveType;
52
+ function isPrimitiveListType(val) {
53
+ return lodash_1.default.isPlainObject(val) && isPrimitiveType(val.entryType);
54
+ }
55
+ exports.isPrimitiveListType = isPrimitiveListType;
56
+ function isLeafValue(val) {
57
+ return (lodash_1.default.isPlainObject(val) &&
58
+ 'path' in val && lodash_1.default.isString(val.path) &&
59
+ 'type' in val && (isPrimitiveType(val.type) ||
60
+ isPrimitiveListType(val.type)));
61
+ }
62
+ exports.isLeafValue = isLeafValue;
63
+ function isNestedValue(val) {
64
+ return ('path' in val && lodash_1.default.isString(val.path) &&
65
+ 'nestedPaths' in val && lodash_1.default.isPlainObject(val.nestedPaths));
66
+ }
67
+ exports.isNestedValue = isNestedValue;
68
+ function asLeafValueType(type) {
69
+ function asPrimitiveType(type) {
70
+ if (gql.isEnumType(type) || type.name === 'String' || type.name === 'ID') {
71
+ return 'string';
72
+ }
73
+ else if (type.name === 'Boolean') {
74
+ return 'boolean';
75
+ }
76
+ else if (type.name === 'Double') {
77
+ return 'double';
78
+ }
79
+ else if (type.name === 'Int') {
80
+ return 'int';
81
+ }
82
+ else if (type.name === 'Long') {
83
+ return 'long';
84
+ }
85
+ else if (type.name === 'Timestamp') {
86
+ return 'timestamp';
87
+ }
88
+ throw new verror_1.default('unknown GraphQL leaf type: %s', type);
89
+ }
90
+ // Leaf types and lists of (non-null) leaf types are allowed
91
+ if (gql.isListType(type)) {
92
+ type = type.ofType;
93
+ if (gql.isNonNullType(type)) {
94
+ type = type.ofType;
95
+ }
96
+ if (gql.isLeafType(type)) {
97
+ return { entryType: asPrimitiveType(type) };
98
+ }
99
+ }
100
+ else if (gql.isLeafType(type)) {
101
+ return asPrimitiveType(type);
102
+ }
103
+ throw new verror_1.default('unknown GraphQL leaf type: %s', type);
104
+ }
105
+ exports.asLeafValueType = asLeafValueType;
106
+ // TODO: Merge with graphql.ts. This is implemented differently.
107
+ function isLeafType(type) {
108
+ if (gql.isNonNullType(type)) {
109
+ return isLeafType(type.ofType);
110
+ }
111
+ else if (gql.isListType(type)) {
112
+ type = type.ofType;
113
+ if (gql.isNonNullType(type)) {
114
+ type = type.ofType;
115
+ }
116
+ }
117
+ return gql.isLeafType(type);
118
+ }
119
+ exports.isLeafType = isLeafType;
120
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
package/lib/client.d.ts CHANGED
@@ -6,16 +6,23 @@ import { Schema } from './graphql/types';
6
6
  import { Account, FarosClientConfig, Location, Model, NamedQuery, SecretName, UpdateAccount } from './types';
7
7
  export declare const DEFAULT_AXIOS_CONFIG: AxiosRequestConfig;
8
8
  export declare const GRAPH_VERSION_HEADER = "x-faros-graph-version";
9
+ declare enum GraphVersion {
10
+ V1 = "v1",
11
+ V2 = "v2"
12
+ }
9
13
  /** Faros API client **/
10
14
  export declare class FarosClient {
11
15
  private readonly api;
12
- private readonly graphVersion;
16
+ readonly graphVersion: GraphVersion;
13
17
  constructor(cfg: FarosClientConfig, logger?: Logger, axiosConfig?: AxiosRequestConfig);
14
18
  tenant(): Promise<string>;
15
19
  secret(name: string, group?: string): Promise<string | undefined>;
16
20
  secrets(group?: string): Promise<ReadonlyArray<SecretName>>;
17
21
  graphExists(graph: string): Promise<boolean>;
22
+ createGraph(graph: string): Promise<void>;
18
23
  models(graph: string): Promise<ReadonlyArray<Model>>;
24
+ addModels(graph: string, models: string, schema?: string): Promise<void>;
25
+ addCanonicalModels(graph: string): Promise<void>;
19
26
  namedQuery(name: string): Promise<NamedQuery | undefined>;
20
27
  entrySchema(graph: string): Promise<any>;
21
28
  gql(graph: string, query: string, variables?: any): Promise<any>;
@@ -28,3 +35,4 @@ export declare class FarosClient {
28
35
  updateAccount(update: UpdateAccount): Promise<void>;
29
36
  nodeIterable(graph: string, rawQuery: string, pageSize?: number, paginator?: typeof paginatedQuery, args?: Map<string, any>): AsyncIterable<any>;
30
37
  }
38
+ export {};