hybridtm 0.7.1 → 0.9.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/README.md +32 -11
- package/dist/backupHandler.d.ts +60 -0
- package/dist/backupHandler.js +335 -0
- package/dist/backupHandler.js.map +1 -0
- package/dist/backupReader.d.ts +26 -0
- package/dist/backupReader.js +55 -0
- package/dist/backupReader.js.map +1 -0
- package/dist/batchImporter.d.ts +1 -1
- package/dist/batchImporter.js +4 -3
- package/dist/batchImporter.js.map +1 -1
- package/dist/cli/backupCommand.d.ts +15 -0
- package/dist/cli/backupCommand.js +49 -0
- package/dist/cli/backupCommand.js.map +1 -0
- package/dist/cli/cliUtils.d.ts +2 -1
- package/dist/cli/cliUtils.js +23 -10
- package/dist/cli/cliUtils.js.map +1 -1
- package/dist/cli/createCommand.d.ts +5 -3
- package/dist/cli/createCommand.js +33 -28
- package/dist/cli/createCommand.js.map +1 -1
- package/dist/cli/hybridtmCli.d.ts +1 -1
- package/dist/cli/hybridtmCli.js +35 -15
- package/dist/cli/hybridtmCli.js.map +1 -1
- package/dist/cli/importCommand.d.ts +11 -3
- package/dist/cli/importCommand.js +75 -78
- package/dist/cli/importCommand.js.map +1 -1
- package/dist/cli/matchCommand.d.ts +17 -3
- package/dist/cli/matchCommand.js +99 -129
- package/dist/cli/matchCommand.js.map +1 -1
- package/dist/cli/registryCommands.d.ts +8 -5
- package/dist/cli/registryCommands.js +63 -61
- package/dist/cli/registryCommands.js.map +1 -1
- package/dist/cli/restoreCommand.d.ts +18 -0
- package/dist/cli/restoreCommand.js +100 -0
- package/dist/cli/restoreCommand.js.map +1 -0
- package/dist/cli/serveCommand.d.ts +17 -0
- package/dist/cli/serveCommand.js +87 -0
- package/dist/cli/serveCommand.js.map +1 -0
- package/dist/cli/stopCommand.d.ts +15 -0
- package/dist/cli/stopCommand.js +73 -0
- package/dist/cli/stopCommand.js.map +1 -0
- package/dist/hybridtm.d.ts +11 -4
- package/dist/hybridtm.js +308 -89
- package/dist/hybridtm.js.map +1 -1
- package/dist/hybridtmFactory.d.ts +1 -1
- package/dist/hybridtmFactory.js +6 -1
- package/dist/hybridtmFactory.js.map +1 -1
- package/dist/importOptions.d.ts +5 -5
- package/dist/importOptions.js +11 -11
- package/dist/importOptions.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/langEntry.d.ts +1 -1
- package/dist/langEntry.js +1 -1
- package/dist/match.d.ts +1 -1
- package/dist/match.js +1 -1
- package/dist/matchQuality.d.ts +1 -1
- package/dist/matchQuality.js +1 -1
- package/dist/pendingEntry.d.ts +1 -1
- package/dist/pendingEntry.js +1 -1
- package/dist/searchFilters.d.ts +1 -1
- package/dist/searchFilters.js +1 -1
- package/dist/server/hybridtmServer.d.ts +40 -0
- package/dist/server/hybridtmServer.js +527 -0
- package/dist/server/hybridtmServer.js.map +1 -0
- package/dist/server/hybridtmServerMain.d.ts +12 -0
- package/dist/server/hybridtmServerMain.js +18 -0
- package/dist/server/hybridtmServerMain.js.map +1 -0
- package/dist/tmxHandler.d.ts +2 -1
- package/dist/tmxHandler.js +13 -7
- package/dist/tmxHandler.js.map +1 -1
- package/dist/tmxReader.d.ts +1 -1
- package/dist/tmxReader.js +4 -4
- package/dist/tmxReader.js.map +1 -1
- package/dist/utils.d.ts +28 -2
- package/dist/utils.js +163 -2
- package/dist/utils.js.map +1 -1
- package/dist/xliffHandler.d.ts +1 -2
- package/dist/xliffHandler.js +34 -30
- package/dist/xliffHandler.js.map +1 -1
- package/dist/xliffReader.d.ts +1 -1
- package/dist/xliffReader.js +4 -4
- package/dist/xliffReader.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
* which accompanies this distribution, and is available at
|
|
7
|
+
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Contributors:
|
|
10
|
+
* Maxprograms - initial API and implementation
|
|
11
|
+
*******************************************************************************/
|
|
12
|
+
import { existsSync, unlinkSync } from "node:fs";
|
|
13
|
+
import { BackupReader, HybridTMFactory } from '../index.js';
|
|
14
|
+
import { CliUtils } from './cliUtils.js';
|
|
15
|
+
export class RestoreCommand {
|
|
16
|
+
static usage() {
|
|
17
|
+
console.log('Usage: hybridtm restore -file <path> -name <name>');
|
|
18
|
+
console.log(' hybridtm restore -file <path> -create -path <dir> [-name <name>] [-model compact|standard|large|<model id>]');
|
|
19
|
+
console.log();
|
|
20
|
+
console.log(' -file Backup XML file to restore (required)');
|
|
21
|
+
console.log(' -name Existing instance to restore into, appending its entries. With');
|
|
22
|
+
console.log(' -create, the name for the new instance (default: the name');
|
|
23
|
+
console.log(' recorded in the backup file)');
|
|
24
|
+
console.log(' -create Create a fresh instance before restoring, instead of appending');
|
|
25
|
+
console.log(' to an existing one');
|
|
26
|
+
console.log(' -path Directory for the new instance\'s LanceDB data (required with -create)');
|
|
27
|
+
console.log(' -model Embedding model for the new instance (default: the model recorded');
|
|
28
|
+
console.log(' in the backup file)');
|
|
29
|
+
}
|
|
30
|
+
static async run(args) {
|
|
31
|
+
if (CliUtils.hasFlag(args, '-help')) {
|
|
32
|
+
RestoreCommand.usage();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const rawFile = CliUtils.getFlag(args, '-file');
|
|
36
|
+
if (!rawFile) {
|
|
37
|
+
RestoreCommand.usage();
|
|
38
|
+
CliUtils.fail('Missing required -file.');
|
|
39
|
+
}
|
|
40
|
+
const filePath = CliUtils.requireExistingFile(rawFile, 'Backup file');
|
|
41
|
+
const target = CliUtils.hasFlag(args, '-create')
|
|
42
|
+
? await RestoreCommand.createTargetInstance(args, filePath)
|
|
43
|
+
: RestoreCommand.getExistingTargetInstance(args);
|
|
44
|
+
try {
|
|
45
|
+
const count = await target.tm.restore(filePath);
|
|
46
|
+
console.log('Restored ' + count + ' entries from ' + filePath + ' into "' + target.name + '".');
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
CliUtils.fail(error instanceof Error ? error.message : String(error));
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
await target.tm.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static getExistingTargetInstance(args) {
|
|
56
|
+
const name = CliUtils.getFlag(args, '-name');
|
|
57
|
+
if (!name) {
|
|
58
|
+
RestoreCommand.usage();
|
|
59
|
+
CliUtils.fail('Missing required -name (or pass -create to make a new instance).');
|
|
60
|
+
}
|
|
61
|
+
const tm = HybridTMFactory.getInstance(name);
|
|
62
|
+
if (!tm) {
|
|
63
|
+
CliUtils.fail('No instance named "' + name + '". Run "hybridtm create" or "hybridtm list" first.');
|
|
64
|
+
}
|
|
65
|
+
return { tm, name };
|
|
66
|
+
}
|
|
67
|
+
static async createTargetInstance(args, filePath) {
|
|
68
|
+
const rawPath = CliUtils.getFlag(args, '-path');
|
|
69
|
+
if (!rawPath) {
|
|
70
|
+
RestoreCommand.usage();
|
|
71
|
+
CliUtils.fail('Missing required -path when using -create.');
|
|
72
|
+
}
|
|
73
|
+
const resolvedPath = CliUtils.resolvePath(rawPath);
|
|
74
|
+
let name = CliUtils.getFlag(args, '-name');
|
|
75
|
+
const modelAlias = CliUtils.getFlag(args, '-model');
|
|
76
|
+
let modelName = modelAlias ? CliUtils.resolveModelName(modelAlias) : undefined;
|
|
77
|
+
if (!name || !modelName) {
|
|
78
|
+
const header = await RestoreCommand.peekBackupHeader(filePath);
|
|
79
|
+
name = name || header.name || undefined;
|
|
80
|
+
modelName = modelName || header.model || undefined;
|
|
81
|
+
}
|
|
82
|
+
if (!name) {
|
|
83
|
+
CliUtils.fail('Could not determine an instance name; pass -name or restore from a backup file with a recorded name.');
|
|
84
|
+
}
|
|
85
|
+
if (!modelName) {
|
|
86
|
+
CliUtils.fail('Could not determine an embedding model; pass -model or restore from a backup file with a recorded model.');
|
|
87
|
+
}
|
|
88
|
+
const tm = HybridTMFactory.createInstance(name, resolvedPath, modelName);
|
|
89
|
+
return { tm, name };
|
|
90
|
+
}
|
|
91
|
+
static async peekBackupHeader(filePath) {
|
|
92
|
+
const reader = new BackupReader(filePath);
|
|
93
|
+
await reader.parse();
|
|
94
|
+
if (existsSync(reader.getTempFilePath())) {
|
|
95
|
+
unlinkSync(reader.getTempFilePath());
|
|
96
|
+
}
|
|
97
|
+
return { name: reader.getBackupName(), model: reader.getBackupModel() };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=restoreCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restoreCommand.js","sourceRoot":"","sources":["../../ts/cli/restoreCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
* which accompanies this distribution, and is available at
|
|
7
|
+
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Contributors:
|
|
10
|
+
* Maxprograms - initial API and implementation
|
|
11
|
+
*******************************************************************************/
|
|
12
|
+
export declare class ServeCommand {
|
|
13
|
+
static usage(): void;
|
|
14
|
+
static run(args: string[]): Promise<void>;
|
|
15
|
+
private static waitForServer;
|
|
16
|
+
private static pingServer;
|
|
17
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
* which accompanies this distribution, and is available at
|
|
7
|
+
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Contributors:
|
|
10
|
+
* Maxprograms - initial API and implementation
|
|
11
|
+
*******************************************************************************/
|
|
12
|
+
import { spawn } from "node:child_process";
|
|
13
|
+
import { request } from "node:http";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
import { CliUtils } from './cliUtils.js';
|
|
16
|
+
const DEFAULT_PORT = 8050;
|
|
17
|
+
const LOCALHOST = '127.0.0.1';
|
|
18
|
+
const ALL_INTERFACES = '0.0.0.0';
|
|
19
|
+
const STARTUP_TIMEOUT_MS = 5000;
|
|
20
|
+
const POLL_INTERVAL_MS = 100;
|
|
21
|
+
export class ServeCommand {
|
|
22
|
+
static usage() {
|
|
23
|
+
console.log('Usage: hybridtm serve [-port <number>] [-network]');
|
|
24
|
+
console.log();
|
|
25
|
+
console.log(' Starts the HybridTM HTTP server.');
|
|
26
|
+
console.log();
|
|
27
|
+
console.log(' -port Port to listen on (default: ' + DEFAULT_PORT + ')');
|
|
28
|
+
console.log(' -network Accept connections from other machines on the network');
|
|
29
|
+
console.log(' (default: only this machine). The server has no');
|
|
30
|
+
console.log(' authentication, so only use this on a trusted network.');
|
|
31
|
+
}
|
|
32
|
+
static async run(args) {
|
|
33
|
+
if (CliUtils.hasFlag(args, '-help')) {
|
|
34
|
+
ServeCommand.usage();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const port = CliUtils.parseIntFlag(args, '-port', DEFAULT_PORT, 1, 65535);
|
|
38
|
+
const host = CliUtils.hasFlag(args, '-network') ? ALL_INTERFACES : LOCALHOST;
|
|
39
|
+
const serverPath = fileURLToPath(new URL('../server/hybridtmServerMain.js', import.meta.url));
|
|
40
|
+
const child = spawn(process.execPath, [serverPath, String(port), host], {
|
|
41
|
+
detached: true,
|
|
42
|
+
stdio: 'ignore'
|
|
43
|
+
});
|
|
44
|
+
child.unref();
|
|
45
|
+
try {
|
|
46
|
+
await ServeCommand.waitForServer(host, port, STARTUP_TIMEOUT_MS);
|
|
47
|
+
console.log('HybridTM server started on ' + host + ':' + port);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('HybridTM server failed to start on ' + host + ':' + port);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
static waitForServer(host, port, timeoutMs) {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const startTime = Date.now();
|
|
57
|
+
const check = () => {
|
|
58
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
59
|
+
reject(new Error('Server did not start within ' + timeoutMs + 'ms'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
ServeCommand.pingServer(host, port)
|
|
63
|
+
.then(() => resolve())
|
|
64
|
+
.catch(() => setTimeout(check, POLL_INTERVAL_MS));
|
|
65
|
+
};
|
|
66
|
+
check();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
static pingServer(host, port) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const client = request({
|
|
72
|
+
host: host,
|
|
73
|
+
port: port,
|
|
74
|
+
method: 'POST',
|
|
75
|
+
path: '/',
|
|
76
|
+
headers: { 'Content-Type': 'application/json' }
|
|
77
|
+
}, (res) => {
|
|
78
|
+
res.on('data', () => { });
|
|
79
|
+
res.on('end', () => resolve());
|
|
80
|
+
});
|
|
81
|
+
client.on('error', (error) => reject(error));
|
|
82
|
+
client.write('{}');
|
|
83
|
+
client.end();
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=serveCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serveCommand.js","sourceRoot":"","sources":["../../ts/cli/serveCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
* which accompanies this distribution, and is available at
|
|
7
|
+
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Contributors:
|
|
10
|
+
* Maxprograms - initial API and implementation
|
|
11
|
+
*******************************************************************************/
|
|
12
|
+
export declare class StopCommand {
|
|
13
|
+
static usage(): void;
|
|
14
|
+
static run(args: string[]): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
* which accompanies this distribution, and is available at
|
|
7
|
+
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
|
+
*
|
|
9
|
+
* Contributors:
|
|
10
|
+
* Maxprograms - initial API and implementation
|
|
11
|
+
*******************************************************************************/
|
|
12
|
+
import { request } from "node:http";
|
|
13
|
+
import { CliUtils } from './cliUtils.js';
|
|
14
|
+
const DEFAULT_PORT = 8050;
|
|
15
|
+
export class StopCommand {
|
|
16
|
+
static usage() {
|
|
17
|
+
console.log('Usage: hybridtm stop [-port <number>]');
|
|
18
|
+
console.log();
|
|
19
|
+
console.log(' Stops the HybridTM HTTP server (default port: ' + DEFAULT_PORT + ').');
|
|
20
|
+
console.log(' Pass -port if the server was started with a non-default -port.');
|
|
21
|
+
}
|
|
22
|
+
static async run(args) {
|
|
23
|
+
if (CliUtils.hasFlag(args, '-help')) {
|
|
24
|
+
StopCommand.usage();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const port = CliUtils.parseIntFlag(args, '-port', DEFAULT_PORT, 1, 65535);
|
|
28
|
+
const body = JSON.stringify({ command: 'stop' });
|
|
29
|
+
const response = await new Promise((resolve, reject) => {
|
|
30
|
+
const req = request({
|
|
31
|
+
hostname: '127.0.0.1',
|
|
32
|
+
port: port,
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
'Content-Length': Buffer.byteLength(body)
|
|
37
|
+
}
|
|
38
|
+
}, (res) => {
|
|
39
|
+
const chunks = [];
|
|
40
|
+
res.on('data', (chunk) => {
|
|
41
|
+
chunks.push(chunk);
|
|
42
|
+
});
|
|
43
|
+
res.on('end', () => {
|
|
44
|
+
try {
|
|
45
|
+
resolve(JSON.parse(Buffer.concat(chunks).toString('utf-8')));
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
reject(error);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
req.on('error', (error) => {
|
|
53
|
+
if (error.code === 'ECONNREFUSED') {
|
|
54
|
+
reject(new Error('HybridTM server is not running on port ' + port + '.'));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
reject(error);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
req.write(body);
|
|
61
|
+
req.end();
|
|
62
|
+
});
|
|
63
|
+
const status = response && typeof response === 'object' ? response.status : undefined;
|
|
64
|
+
if (status === 'success') {
|
|
65
|
+
console.log('HybridTM server stopped.');
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const reason = response && typeof response === 'object' ? response.reason : undefined;
|
|
69
|
+
console.error('Failed to stop HybridTM server: ' + (typeof reason === 'string' ? reason : 'Server did not confirm a successful stop.'));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=stopCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stopCommand.js","sourceRoot":"","sources":["../../ts/cli/stopCommand.ts"],"names":[],"mappings":"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"}
|
package/dist/hybridtm.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2025-2026 Maxprograms.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials
|
|
5
|
-
* are made available under the terms of the Eclipse
|
|
5
|
+
* are made available under the terms of the Eclipse Public License v1.0
|
|
6
6
|
* which accompanies this distribution, and is available at
|
|
7
7
|
* https://www.eclipse.org/org/documents/epl-v10.html
|
|
8
8
|
*
|
|
@@ -16,14 +16,15 @@ import { Match } from './match.js';
|
|
|
16
16
|
import { PendingEntry } from './pendingEntry.js';
|
|
17
17
|
import { MetadataFilter, TranslationSearchFilters } from './searchFilters.js';
|
|
18
18
|
export declare class HybridTM {
|
|
19
|
-
static readonly
|
|
20
|
-
static readonly
|
|
21
|
-
static readonly
|
|
19
|
+
static readonly COMPACT_MODEL: string;
|
|
20
|
+
static readonly STANDARD_MODEL: string;
|
|
21
|
+
static readonly LARGE_MODEL: string;
|
|
22
22
|
private name;
|
|
23
23
|
private db;
|
|
24
24
|
private table;
|
|
25
25
|
private dbPath;
|
|
26
26
|
private embedder;
|
|
27
|
+
private embedderPromise;
|
|
27
28
|
private modelName;
|
|
28
29
|
private initialized;
|
|
29
30
|
private initializationPromise;
|
|
@@ -32,6 +33,7 @@ export declare class HybridTM {
|
|
|
32
33
|
private initialize;
|
|
33
34
|
private initializeDatabase;
|
|
34
35
|
private initializeEmbedder;
|
|
36
|
+
private loadEmbedder;
|
|
35
37
|
private generateEmbedding;
|
|
36
38
|
private ensureInitialized;
|
|
37
39
|
private ensureTable;
|
|
@@ -64,4 +66,9 @@ export declare class HybridTM {
|
|
|
64
66
|
importXLIFF(filePath: string, options?: ImportOptions): Promise<number>;
|
|
65
67
|
importTMX(filePath: string, options?: ImportOptions): Promise<number>;
|
|
66
68
|
importSDLTM(filePath: string, options?: ImportOptions): Promise<number>;
|
|
69
|
+
restore(filePath: string): Promise<number>;
|
|
70
|
+
backup(outputPath: string): Promise<number>;
|
|
71
|
+
private buildBackupEntryElement;
|
|
72
|
+
private buildBackupMetadataElement;
|
|
73
|
+
private appendTextElement;
|
|
67
74
|
}
|