UNPKG

node-red-contrib-home-assistant-websocket

Version:
113 lines (112 loc) 5.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.migrate = migrate; exports.getCurrentVersion = getCurrentVersion; exports.isMigrationArray = isMigrationArray; const const_1 = require("../const"); const migrations_1 = __importDefault(require("../nodes/action/migrations")); const migrations_2 = __importDefault(require("../nodes/api/migrations")); const migrations_3 = __importDefault(require("../nodes/binary-sensor/migrations")); const migrations_4 = __importDefault(require("../nodes/config-server/migrations")); const migrations_5 = __importDefault(require("../nodes/current-state/migrations")); const migrations_6 = __importDefault(require("../nodes/device/migrations")); const migrations_7 = __importDefault(require("../nodes/device-config/migrations")); const migrations_8 = __importDefault(require("../nodes/entity/migrations")); const migrations_9 = __importDefault(require("../nodes/entity-config/migrations")); const migrations_10 = __importDefault(require("../nodes/events-all/migrations")); const migrations_11 = __importDefault(require("../nodes/events-calendar/migrations")); const migrations_12 = __importDefault(require("../nodes/events-state/migrations")); const migrations_13 = __importDefault(require("../nodes/fire-event/migrations")); const migrations_14 = __importDefault(require("../nodes/get-entities/migrations")); const migrations_15 = __importDefault(require("../nodes/get-history/migrations")); const migrations_16 = __importDefault(require("../nodes/number/migrations")); const migrations_17 = __importDefault(require("../nodes/poll-state/migrations")); const migrations_18 = __importDefault(require("../nodes/render-template/migrations")); const migrations_19 = __importDefault(require("../nodes/select/migrations")); const migrations_20 = __importDefault(require("../nodes/sensor/migrations")); const migrations_21 = __importDefault(require("../nodes/sentence/migrations")); const migrations_22 = __importDefault(require("../nodes/switch/migrations")); const migrations_23 = __importDefault(require("../nodes/tag/migrations")); const migrations_24 = __importDefault(require("../nodes/text/migrations")); const migrations_25 = __importDefault(require("../nodes/time/migrations")); const migrations_26 = __importDefault(require("../nodes/trigger-state/migrations")); const migrations_27 = __importDefault(require("../nodes/wait-until/migrations")); const migrations_28 = __importDefault(require("../nodes/webhook/migrations")); const migrations_29 = __importDefault(require("../nodes/zone/migrations")); const nodeTypeTranslation = { [const_1.NodeType.API]: migrations_2.default, [const_1.NodeType.BinarySensor]: migrations_3.default, [const_1.NodeType.Action]: migrations_1.default, [const_1.NodeType.Server]: migrations_4.default, [const_1.NodeType.CurrentState]: migrations_5.default, [const_1.NodeType.Device]: migrations_6.default, [const_1.NodeType.DeviceConfig]: migrations_7.default, [const_1.NodeType.Entity]: migrations_8.default, [const_1.NodeType.EntityConfig]: migrations_9.default, [const_1.NodeType.EventsAll]: migrations_10.default, [const_1.NodeType.EventsCalendar]: migrations_11.default, [const_1.NodeType.EventsState]: migrations_12.default, [const_1.NodeType.FireEvent]: migrations_13.default, [const_1.NodeType.GetEntities]: migrations_14.default, [const_1.NodeType.GetHistory]: migrations_15.default, [const_1.NodeType.Number]: migrations_16.default, [const_1.NodeType.PollState]: migrations_17.default, [const_1.NodeType.RenderTemplate]: migrations_18.default, [const_1.NodeType.Select]: migrations_19.default, [const_1.NodeType.Sensor]: migrations_20.default, [const_1.NodeType.Sentence]: migrations_21.default, [const_1.NodeType.Switch]: migrations_22.default, [const_1.NodeType.TriggerState]: migrations_26.default, [const_1.NodeType.Tag]: migrations_23.default, [const_1.NodeType.Text]: migrations_24.default, [const_1.NodeType.Time]: migrations_25.default, [const_1.NodeType.WaitUntil]: migrations_27.default, [const_1.NodeType.Webhook]: migrations_28.default, [const_1.NodeType.Zone]: migrations_29.default, }; function migrate(schema) { var _a; const currentVersion = getCurrentVersion(schema.type); if (schema.version !== undefined && schema.version >= currentVersion) { return schema; } const currentMigration = (_a = findMigration(schema.type, schema.version)) === null || _a === void 0 ? void 0 : _a.up; if (currentMigration) { const newSchema = currentMigration(schema); return migrate(newSchema); } return schema; } function findMigration(nodeType, version = -1) { const migrations = getMigrationsByType(nodeType); const migration = migrations === null || migrations === void 0 ? void 0 : migrations.find((m) => m.version === Number(version) + 1); return migration; } function getMigrationsByType(nodeType) { return nodeTypeTranslation[nodeType]; } function getCurrentVersion(nodeType) { var _a; const migrations = (_a = getMigrationsByType(nodeType)) !== null && _a !== void 0 ? _a : []; const currentVersion = migrations.reduce((acc, i) => { return i.version > acc ? i.version : acc; }, 0); return currentVersion; } function isMigrationArray(migrations) { if (!Array.isArray(migrations)) { throw new Error('Migrations must be an array'); } return migrations.every((m) => { if (typeof m.version !== 'number') { throw new Error('Migration version must be a number'); } if (typeof m.up !== 'function') { throw new Error('Migration up must be a function'); } return true; }); }