@saulx/selva
Advanced tools
Comparing version 20.4.0 to 20.5.0
@@ -233,9 +233,5 @@ "use strict"; | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, id, sourceField); | ||
const r = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
added = added || r; | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
await checkForNextRefresh(ctx, client, sourceField, id, op.filter, lang); | ||
} | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
} | ||
@@ -245,6 +241,3 @@ else { | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, op.id, sourceField); | ||
const added = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: op.id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: op.id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
} | ||
@@ -251,0 +244,0 @@ const schema = client.schemas[ctx.db]; |
@@ -376,9 +376,5 @@ "use strict"; | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, id, sourceField); | ||
const r = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
added = added || r; | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
await checkForNextRefresh(ctx, client, sourceField, id, op.filter, lang); | ||
} | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
} | ||
@@ -394,6 +390,3 @@ else { | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, id, sourceField); | ||
const added = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
} | ||
@@ -432,3 +425,3 @@ } | ||
await Promise.all(op.inKeys.map(async (id) => { | ||
const r = await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'node', | ||
@@ -441,7 +434,3 @@ id: id, | ||
}); | ||
added = added || r; | ||
})); | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
} | ||
@@ -460,3 +449,2 @@ const result = await client.redis.selva_hierarchy_find(ctx.originDescriptors[ctx.db] || { name: ctx.db }, (0, util_2.makeLangArg)(client.schemas[ctx.db].languages, lang), '___selva_hierarchy', 'node', 'order', ((_a = op.options.sort) === null || _a === void 0 ? void 0 : _a.$field) || '', ((_b = op.options.sort) === null || _b === void 0 ? void 0 : _b.$order) || 'none', 'offset', op.options.offset, 'limit', op.options.limit, ...makeFieldsString(passedSchema || client.schemas[ctx.db], fieldsOpt, isInherit), (0, util_1.joinIds)(op.inKeys), ...args); | ||
if (op.nested) { | ||
let added = false; | ||
for (let i = 0; i < op.id.length; i += util_1.NODE_ID_SIZE) { | ||
@@ -472,9 +460,5 @@ let endLen = util_1.NODE_ID_SIZE; | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, id, sourceField); | ||
const r = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
added = added || r; | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
await checkForNextRefresh(ctx, client, sourceField, id, op.filter, lang); | ||
} | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
} | ||
@@ -484,6 +468,3 @@ else { | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, op.id, sourceField); | ||
const added = await (0, _1.addMarker)(client, ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: op.id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
if (added) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
(0, _1.bufferFindMarker)(ctx, Object.assign(Object.assign({}, (0, _1.sourceFieldToDir)(schema, sourceFieldSchema, sourceField, op.recursive, op.byType)), { id: op.id, fields: op.props.$all === true ? [] : Object.keys(realOpts), rpn: args })); | ||
} | ||
@@ -525,4 +506,4 @@ const schema = passedSchema || client.schemas[ctx.db]; | ||
const inheritRpn = (0, selva_query_ast_parser_1.ast2rpn)(schema.types, fork, lang); | ||
const inheritMarkers = findIds.map((id) => { | ||
return (0, _1.addMarker)(client, ctx, { | ||
for (const id of findIds) { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -533,4 +514,3 @@ id: id, | ||
}); | ||
}); | ||
await Promise.all(inheritMarkers); | ||
} | ||
} | ||
@@ -711,3 +691,3 @@ await checkForNextRefresh(ctx, client, sourceField, (0, util_1.padId)(op.id), op.filter, lang); | ||
const [id, [originField, ...fields]] = v; | ||
if (await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'edge_field', | ||
@@ -717,5 +697,3 @@ refField: originField, | ||
fields, | ||
})) { | ||
ctx.hasFindMarkers = true; | ||
} | ||
}); | ||
} | ||
@@ -722,0 +700,0 @@ } |
@@ -15,3 +15,6 @@ import { SelvaClient } from '../../'; | ||
nodeMarkers?: Record<string, Set<string>>; | ||
hasFindMarkers?: boolean; | ||
findMarkers?: { | ||
passedOnSchema?: any; | ||
marker: SubscriptionMarker; | ||
}[]; | ||
}; | ||
@@ -33,4 +36,6 @@ export declare type TraversalType = 'none' | 'node' | 'array' | 'children' | 'parents' | 'ancestors' | 'descendants' | 'ref' | 'edge_field' | 'bfs_edge_field' | 'bfs_expression' | 'expression'; | ||
export declare function sourceFieldToFindArgs(schema: Schema, fieldSchema: FieldSchema | null, sourceField: string | string[], recursive: boolean, byType?: TraverseByType): [SubscriptionMarker['type'], string?]; | ||
export declare function flushFindMarkers(client: SelvaClient, ctx: ExecContext): Promise<boolean>; | ||
export declare function addMarker(client: SelvaClient, ctx: ExecContext, marker: SubscriptionMarker, passedOnSchema?: Schema): Promise<boolean>; | ||
export declare function bufferNodeMarker(ctx: ExecContext, id: string, ...fields: string[]): void; | ||
export declare function bufferFindMarker(ctx: ExecContext, marker: SubscriptionMarker, passedOnSchema?: Schema): void; | ||
export declare function addNodeMarkers(client: SelvaClient, ctx: ExecContext, passedOnSchema?: Schema): Promise<number>; | ||
@@ -37,0 +42,0 @@ export declare function refreshMarkers(client: SelvaClient, ctx: ExecContext): Promise<void>; |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.executeGetOperation = exports.executeNestedGetOperations = exports.typeCast = exports.TYPE_CASTS = exports.readLongLong = exports.readDouble = exports.refreshMarkers = exports.addNodeMarkers = exports.bufferNodeMarker = exports.addMarker = exports.sourceFieldToFindArgs = exports.sourceFieldToDir = exports.adler32 = void 0; | ||
exports.executeGetOperation = exports.executeNestedGetOperations = exports.typeCast = exports.TYPE_CASTS = exports.readLongLong = exports.readDouble = exports.refreshMarkers = exports.addNodeMarkers = exports.bufferFindMarker = exports.bufferNodeMarker = exports.addMarker = exports.flushFindMarkers = exports.sourceFieldToFindArgs = exports.sourceFieldToDir = exports.adler32 = void 0; | ||
const data_record_1 = require("data-record"); | ||
@@ -106,2 +106,16 @@ const utils_1 = require("../utils"); | ||
exports.sourceFieldToFindArgs = sourceFieldToFindArgs; | ||
async function flushFindMarkers(client, ctx) { | ||
var _a; | ||
if (!ctx.subId) { | ||
return false; | ||
} | ||
if (!((_a = ctx === null || ctx === void 0 ? void 0 : ctx.findMarkers) === null || _a === void 0 ? void 0 : _a.length)) { | ||
return false; | ||
} | ||
const added = await Promise.all(ctx.findMarkers.map(({ marker, passedOnSchema }) => { | ||
return addMarker(client, ctx, marker, passedOnSchema); | ||
})); | ||
return added.every((b) => b); | ||
} | ||
exports.flushFindMarkers = flushFindMarkers; | ||
async function addMarker(client, ctx, marker, passedOnSchema) { | ||
@@ -162,2 +176,12 @@ if (!ctx.subId) { | ||
exports.bufferNodeMarker = bufferNodeMarker; | ||
function bufferFindMarker(ctx, marker, passedOnSchema) { | ||
if (!ctx.subId) { | ||
return; | ||
} | ||
if (!ctx.findMarkers) { | ||
ctx.findMarkers = []; | ||
} | ||
ctx.findMarkers.push({ marker, passedOnSchema }); | ||
} | ||
exports.bufferFindMarker = bufferFindMarker; | ||
async function addNodeMarkers(client, ctx, passedOnSchema) { | ||
@@ -164,0 +188,0 @@ if (!ctx.nodeMarkers) { |
@@ -71,3 +71,3 @@ "use strict"; | ||
(0, _1.bufferNodeMarker)(ctx, op.id, ...fields); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -124,3 +124,3 @@ id: op.id, | ||
(0, _1.bufferNodeMarker)(ctx, op.id, ...fields); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -178,3 +178,3 @@ id: op.id, | ||
(0, _1.bufferNodeMarker)(ctx, op.id, ...fields); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -240,3 +240,3 @@ id: op.id, | ||
(0, _1.bufferNodeMarker)(ctx, op.id, op.sourceField); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -288,3 +288,3 @@ id: op.id, | ||
(0, _1.bufferNodeMarker)(ctx, op.id, op.sourceField); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -345,6 +345,5 @@ id: op.id, | ||
const sourceFieldSchema = (0, utils_1.getNestedSchema)(schema, op.id, op.sourceField); | ||
let added; | ||
if (sourceFieldSchema && sourceFieldSchema.type === 'reference') { | ||
(0, _1.bufferNodeMarker)(ctx, op.id, op.sourceField); | ||
added = await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'bfs_expression', | ||
@@ -382,3 +381,3 @@ id: op.id, | ||
(0, _1.bufferNodeMarker)(ctx, op.id, ...fields); | ||
await (0, _1.addMarker)(client, ctx, { | ||
(0, _1.bufferFindMarker)(ctx, { | ||
type: 'ancestors', | ||
@@ -385,0 +384,0 @@ id: op.id, |
@@ -159,4 +159,7 @@ "use strict"; | ||
try { | ||
await (0, executeGetOperations_1.addNodeMarkers)(client, ctx); | ||
await (0, executeGetOperations_1.refreshMarkers)(client, ctx); | ||
const nodeMarkers = await (0, executeGetOperations_1.addNodeMarkers)(client, ctx); | ||
const findMarkers = await (0, executeGetOperations_1.flushFindMarkers)(client, ctx); | ||
if (nodeMarkers || findMarkers) { | ||
await (0, executeGetOperations_1.refreshMarkers)(client, ctx); | ||
} | ||
} | ||
@@ -163,0 +166,0 @@ catch (e) { |
{ | ||
"name": "@saulx/selva", | ||
"version": "20.4.0", | ||
"version": "20.5.0", | ||
"license": "MIT", | ||
@@ -54,3 +54,3 @@ "main": "dist/src/index.js", | ||
"@types/pg": "^8.6.1", | ||
"@saulx/selva-server": "20.4.0", | ||
"@saulx/selva-server": "20.5.0", | ||
"before-exit": "1.0.0", | ||
@@ -57,0 +57,0 @@ "async-exec": "^1.1.0", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
16856
1220131