@openzim/libzim 2.4.4 → 3.1.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/.env +1 -1
- package/.eslintignore +3 -0
- package/.eslintrc.js +39 -0
- package/Changelog +13 -0
- package/README.md +50 -28
- package/binding.gyp +3 -5
- package/bundle-libzim.js +22 -16
- package/dist/index.d.ts +254 -4
- package/dist/index.js +33 -9
- package/download-libzim.js +67 -48
- package/package.json +28 -24
- package/src/archive.h +494 -0
- package/src/blob.h +101 -0
- package/src/common.h +150 -0
- package/src/contentProvider.h +258 -0
- package/src/creator.h +345 -0
- package/src/entry.h +116 -0
- package/src/entryrange.h +106 -0
- package/src/index.d.ts +254 -0
- package/src/index.js +33 -0
- package/src/item.h +152 -0
- package/src/module.cc +42 -6
- package/src/search.h +527 -0
- package/src/suggestion.h +359 -0
- package/src/writerItem.h +462 -0
- package/tsconfig.json +4 -6
- package/dist/ZimCreator.d.ts +0 -34
- package/dist/ZimCreator.js +0 -177
- package/dist/ZimReader.d.ts +0 -13
- package/dist/ZimReader.js +0 -110
- package/dist/zim.d.ts +0 -2
- package/dist/zim.js +0 -11
- package/jest.config.js +0 -18
- package/src/article.cc +0 -228
- package/src/article.h +0 -114
- package/src/reader.cc +0 -110
- package/src/reader.h +0 -31
- package/src/writer.cc +0 -67
- package/src/writer.h +0 -38
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
export class IntegrityCheck {
|
|
2
|
+
static CHECKSUM: symbol;
|
|
3
|
+
static DIRENT_PTRS: symbol;
|
|
4
|
+
static DIRENT_ORDER: symbol;
|
|
5
|
+
static TITLE_INDEX: symbol;
|
|
6
|
+
static CLUSTER_PTRS: symbol;
|
|
7
|
+
static DIRENT_MIMETYPES: symbol;
|
|
8
|
+
static COUNT: symbol; // DO NOT USE THIS. See libzim docs.
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class Compression {
|
|
12
|
+
static None: symbol;
|
|
13
|
+
static Zstd: symbol;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class Blob {
|
|
17
|
+
constructor(buf?: ArrayBuffer | Buffer | string);
|
|
18
|
+
get data(): Buffer;
|
|
19
|
+
get size(): number | bigint;
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type ContentProvider = {
|
|
24
|
+
size: number | bigint;
|
|
25
|
+
feed(): Blob;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export class StringProvider {
|
|
29
|
+
constructor(content: string);
|
|
30
|
+
get size(): number;
|
|
31
|
+
feed(): Blob;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class FileProvider {
|
|
35
|
+
constructor(filepath: string);
|
|
36
|
+
get size(): number | bigint;
|
|
37
|
+
feed(): Blob;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type Hint = {
|
|
41
|
+
COMPRESS?: number;
|
|
42
|
+
FRONT_ARTICLE?: number;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export interface IndexData {
|
|
46
|
+
hasIndexData?: boolean;
|
|
47
|
+
title?: string;
|
|
48
|
+
content?: string;
|
|
49
|
+
keywords?: string;
|
|
50
|
+
wordcount?: number;
|
|
51
|
+
position?: [boolean, number, number];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface WriterItem {
|
|
55
|
+
path: string;
|
|
56
|
+
title: string;
|
|
57
|
+
mimeType: string;
|
|
58
|
+
getContentProvider(): ContentProvider;
|
|
59
|
+
hints: Hint;
|
|
60
|
+
getIndexData?: () => IndexData;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class StringItem {
|
|
64
|
+
constructor(
|
|
65
|
+
path: string,
|
|
66
|
+
mimeType: string,
|
|
67
|
+
title: string,
|
|
68
|
+
hint: Hint,
|
|
69
|
+
content: ArrayBuffer | Buffer | string
|
|
70
|
+
);
|
|
71
|
+
readonly path: string;
|
|
72
|
+
readonly title: string;
|
|
73
|
+
readonly mimeType: string;
|
|
74
|
+
getContentProvider(): StringProvider;
|
|
75
|
+
readonly hints: Hint;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export class FileItem {
|
|
79
|
+
constructor(
|
|
80
|
+
path: string,
|
|
81
|
+
mimeType: string,
|
|
82
|
+
title: string,
|
|
83
|
+
hints: Hint,
|
|
84
|
+
filePath: string
|
|
85
|
+
);
|
|
86
|
+
readonly path: string;
|
|
87
|
+
readonly title: string;
|
|
88
|
+
readonly mimeType: string;
|
|
89
|
+
getContentProvider(): StringProvider;
|
|
90
|
+
readonly hints: Hint;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export class Creator {
|
|
94
|
+
constructor();
|
|
95
|
+
configVerbose(verbose: boolean): this;
|
|
96
|
+
configCompression(value: Compression): this;
|
|
97
|
+
configClusterSize(size: number): this;
|
|
98
|
+
configIndexing(indexing: boolean, language: string): this;
|
|
99
|
+
configNbWorkers(num: number): this;
|
|
100
|
+
startZimCreation(filepath: string): this;
|
|
101
|
+
addItem(item: WriterItem): Promise<void>;
|
|
102
|
+
addMetadata(
|
|
103
|
+
name: string,
|
|
104
|
+
content: string | ContentProvider,
|
|
105
|
+
mimetype?: string
|
|
106
|
+
): void;
|
|
107
|
+
addIllustration(size: number, content: string | ContentProvider): void;
|
|
108
|
+
addRedirection(
|
|
109
|
+
path: string,
|
|
110
|
+
title: string,
|
|
111
|
+
targetPath: string,
|
|
112
|
+
hints?: Hint
|
|
113
|
+
): void;
|
|
114
|
+
setMainPath(mainPath: string): void;
|
|
115
|
+
setUuid(uuid: string): void;
|
|
116
|
+
finishZimCreation(): Promise<void>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export class Item {
|
|
120
|
+
get title(): string;
|
|
121
|
+
get path(): string;
|
|
122
|
+
get mimetype(): string;
|
|
123
|
+
get data(): Blob;
|
|
124
|
+
getData(offset?: number | bigint, limit?: number | bigint): Blob;
|
|
125
|
+
get size(): number | bigint;
|
|
126
|
+
get directAccessInformation(): {
|
|
127
|
+
filename: string;
|
|
128
|
+
offset: number;
|
|
129
|
+
};
|
|
130
|
+
get index(): number | bigint;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export class Entry {
|
|
134
|
+
get isRedirect(): boolean;
|
|
135
|
+
get title(): string;
|
|
136
|
+
get path(): string;
|
|
137
|
+
get item(): Item;
|
|
138
|
+
getItem(followRedirect?: boolean): Item;
|
|
139
|
+
get redirect(): Item;
|
|
140
|
+
get redirectEntry(): Entry;
|
|
141
|
+
get index(): number;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface EntryRange extends Iterable<Entry> {
|
|
145
|
+
size: number;
|
|
146
|
+
offset(start: number, maxResults: number): EntryRange;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export class Archive {
|
|
150
|
+
constructor(filepath: string);
|
|
151
|
+
get filename(): string;
|
|
152
|
+
get filesize(): number | bigint;
|
|
153
|
+
get allEntryCount(): number;
|
|
154
|
+
get entryCount(): number;
|
|
155
|
+
get articleCount(): number;
|
|
156
|
+
get uuid(): string;
|
|
157
|
+
getMetadata(name: string): string;
|
|
158
|
+
getMetadataItem(name: string): Item;
|
|
159
|
+
get metadataKeys(): string[];
|
|
160
|
+
getIllustrationItem(size: number): Item;
|
|
161
|
+
get illustrationSizes(): Set<number>;
|
|
162
|
+
getEntryByPath(path_or_idx: string | number): Entry;
|
|
163
|
+
getEntryByTitle(title_or_idx: string | number): Entry;
|
|
164
|
+
getEntryByClusterOrder(idx: number): Entry;
|
|
165
|
+
get mainEntry(): Entry;
|
|
166
|
+
get randomEntry(): Entry;
|
|
167
|
+
hasEntryByPath(path: string): boolean;
|
|
168
|
+
hasEntryByTitle(title: string): boolean;
|
|
169
|
+
hasMainEntry(): boolean;
|
|
170
|
+
hasIllustration(size: number): boolean;
|
|
171
|
+
hasFulltextIndex(): boolean;
|
|
172
|
+
hasTitleIndex(): boolean;
|
|
173
|
+
iterByPath(): EntryRange;
|
|
174
|
+
iterByTitle(): EntryRange;
|
|
175
|
+
iterEfficient(): EntryRange;
|
|
176
|
+
findByPath(path: string): EntryRange;
|
|
177
|
+
findByTitle(title: string): EntryRange;
|
|
178
|
+
get hasChecksum(): boolean;
|
|
179
|
+
get checksum(): string;
|
|
180
|
+
check(): boolean;
|
|
181
|
+
checkIntegrity(checkType: symbol): boolean; // one of IntegrityCheck
|
|
182
|
+
get isMultiPart(): boolean;
|
|
183
|
+
get hasNewNamespaceScheme(): boolean;
|
|
184
|
+
|
|
185
|
+
static validate(zimPath: string, checksToRun: symbol[]): boolean; // list of IntegrityCheck
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
interface Georange {
|
|
189
|
+
latitude: number;
|
|
190
|
+
longitude: number;
|
|
191
|
+
distance: number;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export class Query {
|
|
195
|
+
constructor(query: string);
|
|
196
|
+
setQuery(query: string): this;
|
|
197
|
+
setGeorange(latitude: number, longitude: number, distance: number): this;
|
|
198
|
+
get query(): string;
|
|
199
|
+
set query(query: string);
|
|
200
|
+
toString(): string;
|
|
201
|
+
get georange(): Georange;
|
|
202
|
+
set georange(range: Georange);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export class SearchIterator {
|
|
206
|
+
get path(): string;
|
|
207
|
+
get title(): string;
|
|
208
|
+
get score(): number;
|
|
209
|
+
get snippet(): string;
|
|
210
|
+
get wordCount(): number;
|
|
211
|
+
get size(): number;
|
|
212
|
+
get fileIndex(): number;
|
|
213
|
+
get zimId(): string;
|
|
214
|
+
get entry(): Entry;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export interface SearchResultSet extends Iterable<SearchIterator> {
|
|
218
|
+
readonly size: number;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export class Search {
|
|
222
|
+
getResults(start: number, maxResults: number): SearchResultSet;
|
|
223
|
+
get estimatedMatches(): number;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export class Searcher {
|
|
227
|
+
constructor(archives: Archive | Archive[]);
|
|
228
|
+
addArchive(archive: Archive): this;
|
|
229
|
+
search(query: string | Query): Search;
|
|
230
|
+
setVerbose(verbose: boolean): this;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export class SuggestionIterator {
|
|
234
|
+
get entry(): Entry;
|
|
235
|
+
get title(): string;
|
|
236
|
+
get path(): string;
|
|
237
|
+
get snippet(): string;
|
|
238
|
+
get hasSnippet(): boolean;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export interface SuggestionResultSet extends Iterable<SuggestionIterator> {
|
|
242
|
+
readonly size: number;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export class SuggestionSearch {
|
|
246
|
+
getResults(start: number, maxResults: number): SuggestionResultSet;
|
|
247
|
+
get estimatedMatches(): number;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export class SuggestionSearcher {
|
|
251
|
+
constructor(archives: Archive);
|
|
252
|
+
suggest(query: string): SuggestionSearch;
|
|
253
|
+
setVerbose(verbose: boolean): this;
|
|
254
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import bindings from "bindings";
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
Archive,
|
|
5
|
+
Entry,
|
|
6
|
+
IntegrityCheck,
|
|
7
|
+
Compression,
|
|
8
|
+
Blob,
|
|
9
|
+
Searcher,
|
|
10
|
+
Query,
|
|
11
|
+
SuggestionSearcher,
|
|
12
|
+
Creator,
|
|
13
|
+
StringProvider,
|
|
14
|
+
FileProvider,
|
|
15
|
+
StringItem,
|
|
16
|
+
FileItem,
|
|
17
|
+
} = bindings("zim_binding");
|
|
18
|
+
|
|
19
|
+
module.exports = {
|
|
20
|
+
Archive,
|
|
21
|
+
Entry,
|
|
22
|
+
IntegrityCheck,
|
|
23
|
+
Compression,
|
|
24
|
+
Blob,
|
|
25
|
+
Searcher,
|
|
26
|
+
Query,
|
|
27
|
+
SuggestionSearcher,
|
|
28
|
+
Creator,
|
|
29
|
+
StringProvider,
|
|
30
|
+
FileProvider,
|
|
31
|
+
StringItem,
|
|
32
|
+
FileItem,
|
|
33
|
+
};
|
package/src/item.h
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <napi.h>
|
|
4
|
+
#include <zim/item.h>
|
|
5
|
+
#include <exception>
|
|
6
|
+
#include <memory>
|
|
7
|
+
|
|
8
|
+
#include "blob.h"
|
|
9
|
+
|
|
10
|
+
class Item : public Napi::ObjectWrap<Item> {
|
|
11
|
+
public:
|
|
12
|
+
explicit Item(const Napi::CallbackInfo &info)
|
|
13
|
+
: Napi::ObjectWrap<Item>(info), item_{nullptr} {
|
|
14
|
+
Napi::Env env = info.Env();
|
|
15
|
+
Napi::HandleScope scope(env);
|
|
16
|
+
|
|
17
|
+
if (!info[0].IsExternal()) {
|
|
18
|
+
throw Napi::Error::New(
|
|
19
|
+
env, "Item must be constructed internally by another class.");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
item_ = std::make_shared<zim::Item>(
|
|
23
|
+
*info[0].As<Napi::External<zim::Item>>().Data());
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static Napi::Object New(Napi::Env env, zim::Item &&item) {
|
|
27
|
+
auto external = Napi::External<zim::Item>::New(env, &item);
|
|
28
|
+
auto &constructor = env.GetInstanceData<ModuleConstructors>()->item;
|
|
29
|
+
return constructor.New({external});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
Napi::Value getTitle(const Napi::CallbackInfo &info) {
|
|
33
|
+
try {
|
|
34
|
+
return Napi::Value::From(info.Env(), item_->getTitle());
|
|
35
|
+
} catch (const std::exception &err) {
|
|
36
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Napi::Value getPath(const Napi::CallbackInfo &info) {
|
|
41
|
+
try {
|
|
42
|
+
return Napi::Value::From(info.Env(), item_->getPath());
|
|
43
|
+
} catch (const std::exception &err) {
|
|
44
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
Napi::Value getMimetype(const Napi::CallbackInfo &info) {
|
|
49
|
+
try {
|
|
50
|
+
return Napi::Value::From(info.Env(), item_->getMimetype());
|
|
51
|
+
} catch (const std::exception &err) {
|
|
52
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
Napi::Value getData(const Napi::CallbackInfo &info) {
|
|
57
|
+
try {
|
|
58
|
+
auto env = info.Env();
|
|
59
|
+
size_t offset = 0;
|
|
60
|
+
|
|
61
|
+
// load offset if defined and is Number or BigInt
|
|
62
|
+
if (info[0].IsBigInt()) {
|
|
63
|
+
offset = info[0].As<Napi::BigInt>().Uint64Value(nullptr);
|
|
64
|
+
} else if (info[0].IsNumber()) {
|
|
65
|
+
int64_t val = info[0].ToNumber().Int64Value();
|
|
66
|
+
if (val < 0) {
|
|
67
|
+
throw Napi::Error::New(env,
|
|
68
|
+
"Offset must be greater than or equal to 0");
|
|
69
|
+
}
|
|
70
|
+
offset = static_cast<size_t>(val);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// load size if defined and is Number or BigInt
|
|
74
|
+
if (info.Length() > 1) {
|
|
75
|
+
size_t size;
|
|
76
|
+
if (info[1].IsBigInt()) {
|
|
77
|
+
size = info[1].As<Napi::BigInt>().Uint64Value(nullptr);
|
|
78
|
+
} else if (info[1].IsNumber()) {
|
|
79
|
+
int64_t val = info[1].ToNumber().Int64Value();
|
|
80
|
+
if (val < 0) {
|
|
81
|
+
throw Napi::Error::New(env,
|
|
82
|
+
"Size must be greater than or equal to 0");
|
|
83
|
+
}
|
|
84
|
+
size = static_cast<size_t>(val);
|
|
85
|
+
} else { // fail here because the wrong type defaults to 0
|
|
86
|
+
throw Napi::Error::New(env, "Size must be an Number or BigInt");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
auto blob = item_->getData(offset, size);
|
|
90
|
+
return Blob::New(env, blob);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
auto blob = item_->getData(offset);
|
|
94
|
+
return Blob::New(env, blob);
|
|
95
|
+
} catch (const std::exception &err) {
|
|
96
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
Napi::Value getSize(const Napi::CallbackInfo &info) {
|
|
101
|
+
try {
|
|
102
|
+
return Napi::Value::From(info.Env(), item_->getSize());
|
|
103
|
+
} catch (const std::exception &err) {
|
|
104
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
Napi::Value getDirectAccessInformation(const Napi::CallbackInfo &info) {
|
|
109
|
+
try {
|
|
110
|
+
auto env = info.Env();
|
|
111
|
+
const auto valPair = item_->getDirectAccessInformation();
|
|
112
|
+
auto res = Napi::Object::New(env);
|
|
113
|
+
res["filename"] = Napi::Value::From(env, valPair.first);
|
|
114
|
+
res["offset"] = Napi::Value::From(env, valPair.second);
|
|
115
|
+
return res;
|
|
116
|
+
} catch (const std::exception &err) {
|
|
117
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
Napi::Value getIndex(const Napi::CallbackInfo &info) {
|
|
122
|
+
try {
|
|
123
|
+
return Napi::Value::From(info.Env(), item_->getIndex());
|
|
124
|
+
} catch (const std::exception &err) {
|
|
125
|
+
throw Napi::Error::New(info.Env(), err.what());
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
static void Init(Napi::Env env, Napi::Object exports,
|
|
130
|
+
ModuleConstructors &constructors) {
|
|
131
|
+
Napi::HandleScope scope(env);
|
|
132
|
+
Napi::Function func =
|
|
133
|
+
DefineClass(env, "Item",
|
|
134
|
+
{
|
|
135
|
+
InstanceAccessor<&Item::getTitle>("title"),
|
|
136
|
+
InstanceAccessor<&Item::getPath>("path"),
|
|
137
|
+
InstanceAccessor<&Item::getMimetype>("mimetype"),
|
|
138
|
+
InstanceAccessor<&Item::getData>("data"),
|
|
139
|
+
InstanceMethod<&Item::getData>("getData"),
|
|
140
|
+
InstanceAccessor<&Item::getSize>("size"),
|
|
141
|
+
InstanceAccessor<&Item::getDirectAccessInformation>(
|
|
142
|
+
"directAccessInformation"),
|
|
143
|
+
InstanceAccessor<&Item::getIndex>("index"),
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
exports.Set("Item", func);
|
|
147
|
+
constructors.item = Napi::Persistent(func);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private:
|
|
151
|
+
std::shared_ptr<zim::Item> item_;
|
|
152
|
+
};
|
package/src/module.cc
CHANGED
|
@@ -1,14 +1,50 @@
|
|
|
1
1
|
|
|
2
2
|
#include <napi.h>
|
|
3
3
|
|
|
4
|
-
#include "
|
|
5
|
-
#include "
|
|
6
|
-
#include "
|
|
4
|
+
#include "archive.h"
|
|
5
|
+
#include "blob.h"
|
|
6
|
+
#include "common.h"
|
|
7
|
+
#include "contentProvider.h"
|
|
8
|
+
#include "creator.h"
|
|
9
|
+
#include "entry.h"
|
|
10
|
+
#include "item.h"
|
|
11
|
+
#include "search.h"
|
|
12
|
+
#include "suggestion.h"
|
|
13
|
+
#include "writerItem.h"
|
|
7
14
|
|
|
8
15
|
Napi::Object InitAll(Napi::Env env, Napi::Object exports) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
// used for storing constructor function references for this instance of the
|
|
17
|
+
// module. This allows the re-use of the module in workers and threads via
|
|
18
|
+
// multiple instances of this module.
|
|
19
|
+
auto constructors = new ModuleConstructors{};
|
|
20
|
+
env.SetInstanceData(constructors);
|
|
21
|
+
|
|
22
|
+
IntegrityCheck::Init(env, exports, *constructors);
|
|
23
|
+
Compression::Init(env, exports, *constructors);
|
|
24
|
+
|
|
25
|
+
Blob::Init(env, exports, *constructors);
|
|
26
|
+
Item::Init(env, exports, *constructors);
|
|
27
|
+
Entry::Init(env, exports, *constructors);
|
|
28
|
+
Archive::Init(env, exports, *constructors);
|
|
29
|
+
|
|
30
|
+
Searcher::Init(env, exports, *constructors);
|
|
31
|
+
Query::Init(env, exports, *constructors);
|
|
32
|
+
Search::Init(env, exports, *constructors);
|
|
33
|
+
SearchResultSet::Init(env, exports, *constructors);
|
|
34
|
+
SearchIterator::Init(env, exports, *constructors);
|
|
35
|
+
|
|
36
|
+
SuggestionSearcher::Init(env, exports, *constructors);
|
|
37
|
+
SuggestionSearch::Init(env, exports, *constructors);
|
|
38
|
+
SuggestionResultSet::Init(env, exports, *constructors);
|
|
39
|
+
SuggestionIterator::Init(env, exports, *constructors);
|
|
40
|
+
|
|
41
|
+
StringProvider::Init(env, exports, *constructors);
|
|
42
|
+
FileProvider::Init(env, exports, *constructors);
|
|
43
|
+
Creator::Init(env, exports, *constructors);
|
|
44
|
+
|
|
45
|
+
StringItem::Init(env, exports, *constructors);
|
|
46
|
+
FileItem::Init(env, exports, *constructors);
|
|
47
|
+
|
|
12
48
|
return exports;
|
|
13
49
|
}
|
|
14
50
|
|