chore: Add missing ".js" extensions to imports and improve Node.js compatibility for dynamic schema loading

This commit is contained in:
Andreas Hilbig 2026-01-13 14:42:11 +01:00
parent 1c1aeb4519
commit 98c612fc56
15 changed files with 121 additions and 70 deletions

View file

@ -1,6 +1,6 @@
import {isObjectType} from "graphql";
import {logger} from "../logging/logger.js";
import {Device, Host} from "../schema/generated/graphql";
import {Device, Host} from "../schema/generated/graphql.js";
export const isDevice = (value: Host): value is Device => !!(value as Device).deviceType;

View file

@ -17,8 +17,8 @@ import {
StorageItemType,
} from "../schema/generated/graphql.js";
import {HostImporter} from "../execution/host_importer";
import {HostValueExporter} from "../execution/host_exporter";
import {HostImporter} from "../execution/host_importer.js";
import {HostValueExporter} from "../execution/host_exporter.js";
import {logger} from "../logging/logger.js";
import {ParsedArgs, ZabbixRequest} from "../datasources/zabbix-request.js";
import {ZabbixCreateHostRequest, ZabbixQueryHostsRequestWithItemsAndInventory,} from "../datasources/zabbix-hosts.js";
@ -34,10 +34,10 @@ import {
ZabbixImportUserRolesRequest,
ZabbixQueryUserRolesRequest
} from "../datasources/zabbix-userroles.js";
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api";
import {GraphQLInterfaceType, GraphQLList} from "graphql/type";
import {isDevice} from "./resolver_helpers";
import {ZabbixPermissionsHelper} from "../datasources/zabbix-permissions";
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api.js";
import {GraphQLInterfaceType, GraphQLList} from "graphql/type/index.js";
import {isDevice} from "./resolver_helpers.js";
import {ZabbixPermissionsHelper} from "../datasources/zabbix-permissions.js";
export function createResolvers(): Resolvers {

View file

@ -7,6 +7,7 @@ import {makeExecutableSchema, mergeSchemas} from "@graphql-tools/schema";
import {readFileSync} from "fs";
import {GraphQLSchema} from "graphql/type";
import {createResolvers} from "./resolvers.js";
import {readdirSync} from "node:fs";
const createZabbixHierarchicalDeviceFieldResolver =
@ -25,7 +26,12 @@ const createZabbixHierarchicalDeviceTagsResolver =
}
export async function schema_loader(): Promise<GraphQLSchema> {
const resolvers = createResolvers();
let typeDefs: string = readFileSync('./src/schema/*.graphql', {encoding: 'utf-8'});
const schemaPath = process.env.SCHEMA_PATH || './src/schema/';
var schemaFiles = readdirSync(schemaPath).filter(fn => fn.endsWith('.graphql'));
let typeDefs: string = "";
for (const schemaFile of schemaFiles) {
typeDefs += readFileSync(schemaPath + schemaFile, {encoding: 'utf-8'});
}
if (process.env.ADDITIONAL_SCHEMAS) {
for (const schema of process.env.ADDITIONAL_SCHEMAS.split(",")){
typeDefs += readFileSync(schema, {encoding: 'utf-8'});

View file

@ -8,7 +8,7 @@ import express from 'express';
import cors from "cors";
import {ApolloServerPluginDrainHttpServer} from '@apollo/server/plugin/drainHttpServer';
import {logger} from "../logging/logger.js";
import {zabbixAPI, zabbixRequestAuthToken} from "../datasources/zabbix-api";
import {zabbixAPI, zabbixRequestAuthToken} from "../datasources/zabbix-api.js";
import {WebSocketServer} from "ws";
import {useServer} from "graphql-ws/lib/use/ws";

View file

@ -1,13 +1,13 @@
import {isZabbixErrorResult, ParsedArgs, ZabbixParams, ZabbixRequest} from "./zabbix-request.js";
import {isZabbixErrorResult, ParsedArgs, ZabbixParams} from "./zabbix-request.js";
import {Permission} from "../schema/generated/graphql.js";
import {
FIND_ZABBIX_EDGE_DEVICE_BASE_GROUP_PREFIX,
ZABBIX_EDGE_DEVICE_BASE_GROUP,
ZabbixAPI,
zabbixSuperAuthToken
} from "./zabbix-api";
import {logger} from "../logging/logger";
import {ZabbixRequestWithPermissions} from "./zabbix-permissions";
} from "./zabbix-api.js";
import {logger} from "../logging/logger.js";
import {ZabbixRequestWithPermissions} from "./zabbix-permissions.js";
export interface CreateHostGroupResult {
groupids: string[]

View file

@ -1,5 +1,5 @@
import {ParsedArgs, ZabbixRequest} from "./zabbix-request.js";
import {ZabbixItem} from "../schema/generated/graphql";
import {ZabbixItem} from "../schema/generated/graphql.js";
export class ZabbixQueryItemsRequest extends ZabbixRequest<ZabbixItem[]> {

View file

@ -1,7 +1,7 @@
import {ParsedArgs, ZabbixErrorResult, ZabbixRequest, ZabbixResult} from "./zabbix-request.js";
import {ZabbixAPI} from "./zabbix-api";
import {InputMaybe, Permission, QueryHasPermissionsArgs, UserPermission} from "../schema/generated/graphql";
import {ApiErrorCode, PermissionNumber} from "../model/model_enum_values";
import {ZabbixAPI} from "./zabbix-api.js";
import {InputMaybe, Permission, QueryHasPermissionsArgs, UserPermission} from "../schema/generated/graphql.js";
import {ApiErrorCode, PermissionNumber} from "../model/model_enum_values.js";
export class ZabbixRequestWithPermissions<T extends ZabbixResult, A extends ParsedArgs = ParsedArgs> extends ZabbixRequest<T, A> {

View file

@ -8,7 +8,7 @@ import {ApiErrorCode, ApiErrorMessage} from "../model/model_enum_values.js";
import {ZabbixQueryItemsRequest} from "../datasources/zabbix-items.js";
import {isZabbixErrorResult, ParsedArgs, ZabbixErrorResult} from "../datasources/zabbix-request.js";
import {ZabbixHistoryGetParams, ZabbixQueryHistoryRequest} from "../datasources/zabbix-history.js";
import {zabbixAPI} from "../datasources/zabbix-api";
import {zabbixAPI} from "../datasources/zabbix-api.js";
type FilterCombo = {
deviceKey: string,

View file

@ -9,7 +9,7 @@ import {logger} from "../logging/logger.js";
import {ZabbixQueryTemplatesRequest} from "../datasources/zabbix-templates.js";
import {isZabbixErrorResult, ParsedArgs, ZabbixErrorResult} from "../datasources/zabbix-request.js";
import {CreateHostGroupResult, GroupHelper, ZabbixCreateHostGroupRequest} from "../datasources/zabbix-hostgroups.js";
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api";
import {ZABBIX_EDGE_DEVICE_BASE_GROUP, zabbixAPI} from "../datasources/zabbix-api.js";
export class HostImporter {
public static getHostGroupHierarchyNames(hostGroups: Array<CreateHostGroup>) {

View file

@ -16,6 +16,11 @@ interface Host {
hostgroups: [HostGroup!]
name: String
tags: JSONObject
"""
Specifies the type or category of the device. Used to define the classification
of a device in the system (capabilities, functionalities, or purpose).
"""
deviceType: String
}
type ZabbixItem {
@ -56,6 +61,11 @@ type ZabbixHost implements Host {
name: String
tags: JSONObject
"""
Specifies the type or category of the device. Used to define the classification
of a device in the system (capabilities, functionalities, or purpose).
"""
deviceType: String
items: [ZabbixItem!]
inventory: Inventory