asyar-sdk 1.8.2 → 1.10.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/dist/ExtensionBridge.test.d.ts +2 -0
- package/dist/ExtensionBridge.test.d.ts.map +1 -0
- package/dist/ExtensionBridge.test.js +229 -0
- package/dist/ExtensionBridge.test.js.map +1 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +6 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +24 -2
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/link.d.ts +2 -1
- package/dist/cli/commands/link.d.ts.map +1 -1
- package/dist/cli/commands/link.js +27 -0
- package/dist/cli/commands/link.js.map +1 -1
- package/dist/cli/commands/publish.d.ts.map +1 -1
- package/dist/cli/commands/publish.js +39 -25
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/lib/manifest.d.ts +1 -1
- package/dist/cli/lib/manifest.d.ts.map +1 -1
- package/dist/cli/lib/manifest.js +44 -34
- package/dist/cli/lib/manifest.js.map +1 -1
- package/dist/cli/lib/zip.d.ts +1 -1
- package/dist/cli/lib/zip.d.ts.map +1 -1
- package/dist/cli/lib/zip.js +20 -9
- package/dist/cli/lib/zip.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/search/SearchEngine.d.ts +20 -0
- package/dist/search/SearchEngine.d.ts.map +1 -0
- package/dist/search/SearchEngine.js +91 -0
- package/dist/search/SearchEngine.js.map +1 -0
- package/dist/search/SearchEngine.test.d.ts +2 -0
- package/dist/search/SearchEngine.test.d.ts.map +1 -0
- package/dist/search/SearchEngine.test.js +137 -0
- package/dist/search/SearchEngine.test.js.map +1 -0
- package/dist/search/index.d.ts +4 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +9 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/textUtils.d.ts +10 -0
- package/dist/search/textUtils.d.ts.map +1 -0
- package/dist/search/textUtils.js +38 -0
- package/dist/search/textUtils.js.map +1 -0
- package/dist/search/textUtils.test.d.ts +2 -0
- package/dist/search/textUtils.test.d.ts.map +1 -0
- package/dist/search/textUtils.test.js +61 -0
- package/dist/search/textUtils.test.js.map +1 -0
- package/dist/search/types.d.ts +14 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +3 -0
- package/dist/search/types.js.map +1 -0
- package/dist/types/ExtensionType.d.ts +1 -1
- package/dist/types/ExtensionType.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/cli/lib/manifest.js
CHANGED
|
@@ -97,28 +97,36 @@ function validateManifest(manifest, cwd) {
|
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
|
-
if (
|
|
101
|
-
|
|
100
|
+
if (manifest.type === 'theme') {
|
|
101
|
+
// Theme extensions need no commands and no build artifacts
|
|
102
|
+
if (!fs.existsSync(path.join(cwd, 'theme.json'))) {
|
|
103
|
+
errors.push({ field: 'theme.json', message: 'required for theme extensions' });
|
|
104
|
+
}
|
|
102
105
|
}
|
|
103
106
|
else {
|
|
104
|
-
manifest.commands.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
message: '
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
107
|
+
if (!manifest.commands || manifest.commands.length === 0) {
|
|
108
|
+
errors.push({ field: 'commands', message: 'at least one command is required' });
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
manifest.commands.forEach((cmd, i) => {
|
|
112
|
+
if (!cmd.id)
|
|
113
|
+
errors.push({ field: `commands[${i}].id`, message: 'required' });
|
|
114
|
+
if (!cmd.name)
|
|
115
|
+
errors.push({ field: `commands[${i}].name`, message: 'required' });
|
|
116
|
+
if (!cmd.resultType) {
|
|
117
|
+
errors.push({
|
|
118
|
+
field: `commands[${i}].resultType`,
|
|
119
|
+
message: 'must be "view" or "no-view" or "result"',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (cmd.resultType === 'view' && !cmd.view && !manifest.defaultView) {
|
|
123
|
+
errors.push({
|
|
124
|
+
field: `commands[${i}].view`,
|
|
125
|
+
message: 'required when resultType is "view" and no defaultView is specified in manifest',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
122
130
|
}
|
|
123
131
|
// Validate asyarSdk if present
|
|
124
132
|
if (manifest.asyarSdk !== undefined) {
|
|
@@ -155,22 +163,24 @@ function validateManifest(manifest, cwd) {
|
|
|
155
163
|
}
|
|
156
164
|
}
|
|
157
165
|
// Warn if asyarSdk is missing (soft warning, not an error)
|
|
158
|
-
if (!manifest.asyarSdk) {
|
|
166
|
+
if (!manifest.asyarSdk && manifest.type !== 'theme') {
|
|
159
167
|
console.warn('⚠️ Consider adding "asyarSdk" to your manifest.json to declare SDK compatibility (e.g., "^1.2.0")');
|
|
160
168
|
}
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
fs.existsSync(path.join(cwd, 'vite.config.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
169
|
+
if (manifest.type !== 'theme') {
|
|
170
|
+
if (!fs.existsSync(path.join(cwd, 'index.html'))) {
|
|
171
|
+
errors.push({
|
|
172
|
+
field: 'index.html',
|
|
173
|
+
message: 'not found in project root (required for iframe loading)',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const hasViteConfig = fs.existsSync(path.join(cwd, 'vite.config.ts')) ||
|
|
177
|
+
fs.existsSync(path.join(cwd, 'vite.config.js'));
|
|
178
|
+
if (!hasViteConfig) {
|
|
179
|
+
errors.push({
|
|
180
|
+
field: 'vite.config',
|
|
181
|
+
message: 'vite.config.ts or vite.config.js not found',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
174
184
|
}
|
|
175
185
|
return errors;
|
|
176
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../cli/lib/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,oCAUC;AAED,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../cli/lib/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/lib/zip.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export interface ZipResult {
|
|
|
3
3
|
checksum: string;
|
|
4
4
|
sizeBytes: number;
|
|
5
5
|
}
|
|
6
|
-
export declare function packageExtension(cwd: string, extensionId: string, version: string): ZipResult;
|
|
6
|
+
export declare function packageExtension(cwd: string, extensionId: string, version: string, isTheme?: boolean): ZipResult;
|
|
7
7
|
export declare function computeChecksum(buffer: Buffer): string;
|
|
8
8
|
//# sourceMappingURL=zip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../cli/lib/zip.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAI,MAAM,CAAA;IACjB,QAAQ,EAAG,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,SAAS,
|
|
1
|
+
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../cli/lib/zip.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAI,MAAM,CAAA;IACjB,QAAQ,EAAG,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,SAAS,CAmCX;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
package/dist/cli/lib/zip.js
CHANGED
|
@@ -33,16 +33,27 @@ const fs = __importStar(require("fs"));
|
|
|
33
33
|
const path = __importStar(require("path"));
|
|
34
34
|
const crypto = __importStar(require("crypto"));
|
|
35
35
|
const os = __importStar(require("os"));
|
|
36
|
-
function packageExtension(cwd, extensionId, version) {
|
|
37
|
-
const distDir = path.join(cwd, 'dist');
|
|
38
|
-
if (!fs.existsSync(distDir)) {
|
|
39
|
-
throw new Error('dist/ not found. Run "asyar build" first.');
|
|
40
|
-
}
|
|
36
|
+
function packageExtension(cwd, extensionId, version, isTheme = false) {
|
|
41
37
|
const zip = new adm_zip_1.default();
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
if (isTheme) {
|
|
39
|
+
// Theme packages: manifest.json + theme.json + optional fonts/
|
|
40
|
+
zip.addLocalFile(path.join(cwd, 'manifest.json'));
|
|
41
|
+
zip.addLocalFile(path.join(cwd, 'theme.json'));
|
|
42
|
+
const fontsDir = path.join(cwd, 'fonts');
|
|
43
|
+
if (fs.existsSync(fontsDir)) {
|
|
44
|
+
addDirectoryToZip(zip, fontsDir, 'fonts');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const distDir = path.join(cwd, 'dist');
|
|
49
|
+
if (!fs.existsSync(distDir)) {
|
|
50
|
+
throw new Error('dist/ not found. Run "asyar build" first.');
|
|
51
|
+
}
|
|
52
|
+
// manifest.json at root of zip
|
|
53
|
+
zip.addLocalFile(path.join(cwd, 'manifest.json'));
|
|
54
|
+
// dist/ contents flattened into zip root
|
|
55
|
+
addDirectoryToZip(zip, distDir, '');
|
|
56
|
+
}
|
|
46
57
|
const zipFileName = `${extensionId}-${version}.zip`;
|
|
47
58
|
const zipPath = path.join(os.tmpdir(), zipFileName);
|
|
48
59
|
zip.writeZip(zipPath);
|
package/dist/cli/lib/zip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../cli/lib/zip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../cli/lib/zip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,4CAwCC;AAED,0CAGC;AAzDD,sDAA4B;AAC5B,uCAAwB;AACxB,2CAA4B;AAC5B,+CAAgC;AAChC,uCAAwB;AAQxB,SAAgB,gBAAgB,CAC9B,GAAW,EACX,WAAmB,EACnB,OAAe,EACf,OAAO,GAAG,KAAK;IAEf,MAAM,GAAG,GAAG,IAAI,iBAAM,EAAE,CAAA;IAExB,IAAI,OAAO,EAAE,CAAC;QACZ,+DAA+D;QAC/D,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAA;QACjD,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAA;QAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,+BAA+B;QAC/B,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAA;QACjD,yCAAyC;QACzC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,WAAW,IAAI,OAAO,MAAM,CAAA;IACnD,MAAM,OAAO,GAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAA;IACvD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAErB,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAS,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAE/E,OAAO;QACL,OAAO;QACP,QAAQ,EAAG,UAAU,IAAI,EAAE;QAC3B,SAAS,EAAE,UAAU,CAAC,MAAM;KAC7B,CAAA;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrE,OAAO,UAAU,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAe,EAAE,SAAiB;IACxE,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;YACvE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAGL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAGL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,4 +31,5 @@ Object.defineProperty(exports, "ActionCategory", { enumerable: true, get: functi
|
|
|
31
31
|
// Re-export all types for easier consumption
|
|
32
32
|
__exportStar(require("./types"), exports);
|
|
33
33
|
__exportStar(require("./icons"), exports);
|
|
34
|
+
__exportStar(require("./search"), exports);
|
|
34
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAezB,uCAKoB;AAJlB,4FAA4F;AAC5F,iFAAiF;AACjF,iHAAA,qBAAqB,OAAA;AACrB,iHAAA,qBAAqB,OAAA;AAGvB,qDAAqD;AACrD,iDAAmE;AAA1D,2GAAA,aAAa,OAAA;AAAE,4GAAA,cAAc,OAAA;AAGtC,6CAA6C;AAC7C,0CAAwB;AACxB,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAezB,uCAKoB;AAJlB,4FAA4F;AAC5F,iFAAiF;AACjF,iHAAA,qBAAqB,OAAA;AACrB,iHAAA,qBAAqB,OAAA;AAGvB,qDAAqD;AACrD,iDAAmE;AAA1D,2GAAA,aAAa,OAAA;AAAE,4GAAA,cAAc,OAAA;AAGtC,6CAA6C;AAC7C,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SearchEngineOptions } from './types';
|
|
2
|
+
export declare class SearchEngine<T> {
|
|
3
|
+
private _items;
|
|
4
|
+
private _haystack;
|
|
5
|
+
private readonly getText;
|
|
6
|
+
private readonly mode;
|
|
7
|
+
private readonly uf;
|
|
8
|
+
constructor(options: SearchEngineOptions<T>);
|
|
9
|
+
/**
|
|
10
|
+
* Set the item list. Rebuilds the searchable text haystack.
|
|
11
|
+
* Skips rebuild if the same array reference is passed (items unchanged).
|
|
12
|
+
*/
|
|
13
|
+
setItems(items: T[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Search items. Returns matching items in relevance order.
|
|
16
|
+
* Empty/whitespace query returns all items.
|
|
17
|
+
*/
|
|
18
|
+
search(query: string): T[];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=SearchEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchEngine.d.ts","sourceRoot":"","sources":["../../src/search/SearchEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAUnD,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAS;gBAEhB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAY3C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAM1B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;CAoD3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SearchEngine = void 0;
|
|
7
|
+
const ufuzzy_1 = __importDefault(require("@leeoniya/ufuzzy"));
|
|
8
|
+
function isSubsequence(search, text) {
|
|
9
|
+
let si = 0;
|
|
10
|
+
for (let ti = 0; ti < text.length && si < search.length; ti++) {
|
|
11
|
+
if (search[si] === text[ti])
|
|
12
|
+
si++;
|
|
13
|
+
}
|
|
14
|
+
return si === search.length;
|
|
15
|
+
}
|
|
16
|
+
class SearchEngine {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
var _a;
|
|
19
|
+
this._items = [];
|
|
20
|
+
this._haystack = [];
|
|
21
|
+
this.getText = options.getText;
|
|
22
|
+
this.mode = (_a = options.mode) !== null && _a !== void 0 ? _a : 'fuzzy';
|
|
23
|
+
this.uf = new ufuzzy_1.default({
|
|
24
|
+
intraMode: 1,
|
|
25
|
+
intraIns: 12,
|
|
26
|
+
intraSub: 1,
|
|
27
|
+
intraTrn: 1,
|
|
28
|
+
intraDel: 1,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Set the item list. Rebuilds the searchable text haystack.
|
|
33
|
+
* Skips rebuild if the same array reference is passed (items unchanged).
|
|
34
|
+
*/
|
|
35
|
+
setItems(items) {
|
|
36
|
+
if (items === this._items)
|
|
37
|
+
return;
|
|
38
|
+
this._items = items;
|
|
39
|
+
this._haystack = items.map(this.getText);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Search items. Returns matching items in relevance order.
|
|
43
|
+
* Empty/whitespace query returns all items.
|
|
44
|
+
*/
|
|
45
|
+
search(query) {
|
|
46
|
+
const q = query.trim();
|
|
47
|
+
if (!q)
|
|
48
|
+
return [...this._items];
|
|
49
|
+
const qLower = q.toLowerCase();
|
|
50
|
+
const terms = qLower.split(/\s+/).filter(Boolean);
|
|
51
|
+
// Tier 1: Exact substring match (all terms must appear)
|
|
52
|
+
const exactIndices = [];
|
|
53
|
+
for (let i = 0; i < this._haystack.length; i++) {
|
|
54
|
+
const h = this._haystack[i].toLowerCase();
|
|
55
|
+
if (terms.every(t => h.includes(t))) {
|
|
56
|
+
exactIndices.push(i);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (this.mode === 'exact') {
|
|
60
|
+
return exactIndices.map(i => this._items[i]);
|
|
61
|
+
}
|
|
62
|
+
// Tier 2: Subsequence match (all terms appear as ordered subsequences)
|
|
63
|
+
const subseqIndices = [];
|
|
64
|
+
for (let i = 0; i < this._haystack.length; i++) {
|
|
65
|
+
const h = this._haystack[i].toLowerCase();
|
|
66
|
+
if (terms.every(t => isSubsequence(t, h))) {
|
|
67
|
+
subseqIndices.push(i);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Tier 3: uFuzzy (typo tolerance)
|
|
71
|
+
const idxs = this.uf.filter(this._haystack, q);
|
|
72
|
+
let fuzzyRankedIndices = [];
|
|
73
|
+
if (idxs && idxs.length > 0) {
|
|
74
|
+
const info = this.uf.info(idxs, this._haystack, q);
|
|
75
|
+
const order = this.uf.sort(info, this._haystack, q);
|
|
76
|
+
fuzzyRankedIndices = order.map(i => idxs[i]);
|
|
77
|
+
}
|
|
78
|
+
// Merge: exact first, then subsequence, then fuzzy (de-duplicated)
|
|
79
|
+
const exactItems = exactIndices.map(i => this._items[i]);
|
|
80
|
+
const seen = new Set(exactIndices);
|
|
81
|
+
const subseqOnlyItems = subseqIndices
|
|
82
|
+
.filter(i => !seen.has(i))
|
|
83
|
+
.map(i => { seen.add(i); return this._items[i]; });
|
|
84
|
+
const fuzzyOnlyItems = fuzzyRankedIndices
|
|
85
|
+
.filter(i => !seen.has(i))
|
|
86
|
+
.map(i => this._items[i]);
|
|
87
|
+
return [...exactItems, ...subseqOnlyItems, ...fuzzyOnlyItems];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.SearchEngine = SearchEngine;
|
|
91
|
+
//# sourceMappingURL=SearchEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchEngine.js","sourceRoot":"","sources":["../../src/search/SearchEngine.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AAGtC,SAAS,aAAa,CAAC,MAAc,EAAE,IAAY;IACjD,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAC9D,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED,MAAa,YAAY;IAOvB,YAAY,OAA+B;;QANnC,WAAM,GAAQ,EAAE,CAAC;QACjB,cAAS,GAAa,EAAE,CAAC;QAM/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC;QACpC,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAM,CAAC;YACnB,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAU;QACjB,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAa;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAElD,wDAAwD;QACxD,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,uEAAuE;QACvE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,kBAAkB,GAAa,EAAE,CAAC;QACtC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACpD,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,mEAAmE;QACnE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAEnC,MAAM,eAAe,GAAG,aAAa;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,cAAc,GAAG,kBAAkB;aACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5B,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC;IAChE,CAAC;CACF;AArFD,oCAqFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchEngine.test.d.ts","sourceRoot":"","sources":["../../src/search/SearchEngine.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const SearchEngine_1 = require("./SearchEngine");
|
|
5
|
+
function makeEngine(items, mode = 'fuzzy') {
|
|
6
|
+
const engine = new SearchEngine_1.SearchEngine({
|
|
7
|
+
getText: (item) => item.text,
|
|
8
|
+
mode,
|
|
9
|
+
});
|
|
10
|
+
engine.setItems(items);
|
|
11
|
+
return engine;
|
|
12
|
+
}
|
|
13
|
+
const sampleItems = [
|
|
14
|
+
{ id: '1', text: 'quarterly report summary for Q3' },
|
|
15
|
+
{ id: '2', text: 'banana smoothie recipe' },
|
|
16
|
+
{ id: '3', text: 'record of transactions' },
|
|
17
|
+
{ id: '4', text: 'apple pie recipe' },
|
|
18
|
+
{ id: '5', text: 'unrelated text document' },
|
|
19
|
+
];
|
|
20
|
+
(0, vitest_1.describe)('SearchEngine', () => {
|
|
21
|
+
(0, vitest_1.describe)('basic behavior', () => {
|
|
22
|
+
(0, vitest_1.it)('returns all items when query is empty', () => {
|
|
23
|
+
const engine = makeEngine(sampleItems);
|
|
24
|
+
(0, vitest_1.expect)(engine.search('')).toHaveLength(5);
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('returns all items when query is whitespace', () => {
|
|
27
|
+
const engine = makeEngine(sampleItems);
|
|
28
|
+
(0, vitest_1.expect)(engine.search(' ')).toHaveLength(5);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('returns empty array when nothing matches', () => {
|
|
31
|
+
const engine = makeEngine(sampleItems);
|
|
32
|
+
(0, vitest_1.expect)(engine.search('zzzznothing')).toHaveLength(0);
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.it)('finds exact substring matches', () => {
|
|
35
|
+
const engine = makeEngine(sampleItems);
|
|
36
|
+
const results = engine.search('banana');
|
|
37
|
+
(0, vitest_1.expect)(results.some(r => r.id === '2')).toBe(true);
|
|
38
|
+
(0, vitest_1.expect)(results.some(r => r.id === '1')).toBe(false);
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('is case-insensitive', () => {
|
|
41
|
+
const engine = makeEngine(sampleItems);
|
|
42
|
+
const results = engine.search('BANANA');
|
|
43
|
+
(0, vitest_1.expect)(results.some(r => r.id === '2')).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('handles multi-word queries with AND logic for exact tier', () => {
|
|
46
|
+
const engine = makeEngine(sampleItems);
|
|
47
|
+
const results = engine.search('apple recipe');
|
|
48
|
+
(0, vitest_1.expect)(results.some(r => r.id === '4')).toBe(true);
|
|
49
|
+
(0, vitest_1.expect)(results.some(r => r.id === '2')).toBe(false); // has "recipe" but not "apple"
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.describe)('fuzzy mode — subsequence matching', () => {
|
|
53
|
+
(0, vitest_1.it)('matches subsequences: "qrtly" finds "quarterly"', () => {
|
|
54
|
+
const engine = makeEngine(sampleItems);
|
|
55
|
+
const results = engine.search('qrtly');
|
|
56
|
+
(0, vitest_1.expect)(results.some(r => r.id === '1')).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('matches across word boundaries: "qr" finds "quarterly report"', () => {
|
|
59
|
+
const engine = makeEngine(sampleItems);
|
|
60
|
+
const results = engine.search('qr');
|
|
61
|
+
(0, vitest_1.expect)(results.some(r => r.id === '1')).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)('multi-term fuzzy: "qrtly rep" finds "quarterly report summary"', () => {
|
|
64
|
+
const engine = makeEngine(sampleItems);
|
|
65
|
+
const results = engine.search('qrtly rep');
|
|
66
|
+
(0, vitest_1.expect)(results.some(r => r.id === '1')).toBe(true);
|
|
67
|
+
(0, vitest_1.expect)(results.some(r => r.id === '5')).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.describe)('fuzzy mode — typo tolerance', () => {
|
|
71
|
+
(0, vitest_1.it)('tolerates single substitution: "recort" finds "record"', () => {
|
|
72
|
+
const engine = makeEngine(sampleItems);
|
|
73
|
+
const results = engine.search('recort');
|
|
74
|
+
(0, vitest_1.expect)(results.some(r => r.id === '3')).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('tolerates single transposition: "reocrd" finds "record"', () => {
|
|
77
|
+
const engine = makeEngine(sampleItems);
|
|
78
|
+
const results = engine.search('reocrd');
|
|
79
|
+
(0, vitest_1.expect)(results.some(r => r.id === '3')).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
(0, vitest_1.describe)('ranking', () => {
|
|
83
|
+
(0, vitest_1.it)('ranks exact matches higher than fuzzy-only matches', () => {
|
|
84
|
+
const items = [
|
|
85
|
+
{ id: 'fuzzy', text: 'approximate appple thing' },
|
|
86
|
+
{ id: 'exact', text: 'apple pie recipe' },
|
|
87
|
+
];
|
|
88
|
+
const engine = makeEngine(items);
|
|
89
|
+
const results = engine.search('apple');
|
|
90
|
+
(0, vitest_1.expect)(results[0].id).toBe('exact');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.describe)('exact mode', () => {
|
|
94
|
+
(0, vitest_1.it)('does NOT match subsequences in exact mode', () => {
|
|
95
|
+
const engine = makeEngine(sampleItems, 'exact');
|
|
96
|
+
const results = engine.search('qrtly');
|
|
97
|
+
(0, vitest_1.expect)(results).toHaveLength(0);
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.it)('still finds exact substrings in exact mode', () => {
|
|
100
|
+
const engine = makeEngine(sampleItems, 'exact');
|
|
101
|
+
const results = engine.search('banana');
|
|
102
|
+
(0, vitest_1.expect)(results.some(r => r.id === '2')).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('multi-term AND logic in exact mode', () => {
|
|
105
|
+
const engine = makeEngine(sampleItems, 'exact');
|
|
106
|
+
const results = engine.search('apple recipe');
|
|
107
|
+
(0, vitest_1.expect)(results.some(r => r.id === '4')).toBe(true);
|
|
108
|
+
(0, vitest_1.expect)(results.some(r => r.id === '2')).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.describe)('setItems', () => {
|
|
112
|
+
(0, vitest_1.it)('rebuilds haystack when items change', () => {
|
|
113
|
+
const engine = new SearchEngine_1.SearchEngine({
|
|
114
|
+
getText: (item) => item.text,
|
|
115
|
+
});
|
|
116
|
+
engine.setItems([{ id: '1', text: 'first batch' }]);
|
|
117
|
+
(0, vitest_1.expect)(engine.search('first')).toHaveLength(1);
|
|
118
|
+
engine.setItems([{ id: '2', text: 'second batch' }]);
|
|
119
|
+
(0, vitest_1.expect)(engine.search('first')).toHaveLength(0);
|
|
120
|
+
(0, vitest_1.expect)(engine.search('second')).toHaveLength(1);
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.it)('skips rebuild if same array reference is passed', () => {
|
|
123
|
+
const items = [{ id: '1', text: 'hello' }];
|
|
124
|
+
const engine = new SearchEngine_1.SearchEngine({
|
|
125
|
+
getText: (item) => item.text,
|
|
126
|
+
});
|
|
127
|
+
engine.setItems(items);
|
|
128
|
+
// Mutate the item (bad practice, but tests the reference check)
|
|
129
|
+
items[0].text = 'changed';
|
|
130
|
+
engine.setItems(items); // same reference — should NOT rebuild
|
|
131
|
+
// Haystack should still contain old value
|
|
132
|
+
(0, vitest_1.expect)(engine.search('hello')).toHaveLength(1);
|
|
133
|
+
(0, vitest_1.expect)(engine.search('changed')).toHaveLength(0);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=SearchEngine.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchEngine.test.js","sourceRoot":"","sources":["../../src/search/SearchEngine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripRtf = exports.stripHtml = exports.SearchEngine = void 0;
|
|
4
|
+
var SearchEngine_1 = require("./SearchEngine");
|
|
5
|
+
Object.defineProperty(exports, "SearchEngine", { enumerable: true, get: function () { return SearchEngine_1.SearchEngine; } });
|
|
6
|
+
var textUtils_1 = require("./textUtils");
|
|
7
|
+
Object.defineProperty(exports, "stripHtml", { enumerable: true, get: function () { return textUtils_1.stripHtml; } });
|
|
8
|
+
Object.defineProperty(exports, "stripRtf", { enumerable: true, get: function () { return textUtils_1.stripRtf; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,yCAAkD;AAAzC,sGAAA,SAAS,OAAA;AAAE,qGAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip HTML tags, script/style blocks, and decode common entities.
|
|
3
|
+
* Uses regex — no DOM dependency, works in all environments.
|
|
4
|
+
*/
|
|
5
|
+
export declare function stripHtml(html: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Strip RTF control words, unicode escapes, braces, and backslashes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function stripRtf(rtf: string): string;
|
|
10
|
+
//# sourceMappingURL=textUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.d.ts","sourceRoot":"","sources":["../../src/search/textUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ5C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stripHtml = stripHtml;
|
|
4
|
+
exports.stripRtf = stripRtf;
|
|
5
|
+
/**
|
|
6
|
+
* Strip HTML tags, script/style blocks, and decode common entities.
|
|
7
|
+
* Uses regex — no DOM dependency, works in all environments.
|
|
8
|
+
*/
|
|
9
|
+
function stripHtml(html) {
|
|
10
|
+
if (!html)
|
|
11
|
+
return '';
|
|
12
|
+
return html
|
|
13
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
|
|
14
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
|
|
15
|
+
.replace(/<[^>]+>/g, ' ')
|
|
16
|
+
.replace(/ /gi, ' ')
|
|
17
|
+
.replace(/&/gi, '&')
|
|
18
|
+
.replace(/</gi, '<')
|
|
19
|
+
.replace(/>/gi, '>')
|
|
20
|
+
.replace(/"/gi, '"')
|
|
21
|
+
.replace(/&#\d+;/gi, ' ')
|
|
22
|
+
.replace(/\s+/g, ' ')
|
|
23
|
+
.trim();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strip RTF control words, unicode escapes, braces, and backslashes.
|
|
27
|
+
*/
|
|
28
|
+
function stripRtf(rtf) {
|
|
29
|
+
if (!rtf)
|
|
30
|
+
return '';
|
|
31
|
+
return rtf
|
|
32
|
+
.replace(/\\u-?\d+\??/g, '')
|
|
33
|
+
.replace(/\\[a-z]+-?\d*\s?/gi, '')
|
|
34
|
+
.replace(/[{}\\]/g, '')
|
|
35
|
+
.replace(/\s+/g, ' ')
|
|
36
|
+
.trim();
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=textUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../src/search/textUtils.ts"],"names":[],"mappings":";;AAIA,8BAcC;AAKD,4BAQC;AA/BD;;;GAGG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;SAC9C,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG;SACP,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.test.d.ts","sourceRoot":"","sources":["../../src/search/textUtils.test.ts"],"names":[],"mappings":""}
|