From 6f85841e62f38c3e4483a9c925da9d460686b288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 07:22:04 +0200 Subject: [PATCH 01/22] Fixing for angular 10 typings issues --- src/fusejs.service.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index f38472f..37b1451 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -1,12 +1,12 @@ -import {Injectable} from '@angular/core' -import * as Fuse from 'fuse.js' +import {Injectable} from '@angular/core'; +import * as Fuse from 'fuse.js'; import FuseOptions = Fuse.FuseOptions; import _set = require('lodash.set'); import _get = require('lodash.get'); -export interface AngularFusejsOptions extends FuseOptions { +export interface AngularFusejsOptions extends FuseOptions { supportHighlight?: boolean; fusejsHighlightKey?: string; fusejsScoreKey?: string; @@ -15,8 +15,8 @@ export interface AngularFusejsOptions extends FuseOptions { } @Injectable() -export class FusejsService { - private defaultOptions: AngularFusejsOptions = { +export class FusejsService { + private defaultOptions: AngularFusejsOptions = { supportHighlight: true, shouldSort: false, threshold: 0.6, @@ -30,8 +30,8 @@ export class FusejsService { fusejsScoreKey: 'fuseJsScore', }; - searchList(list: Array, searchTerms: string, options: AngularFusejsOptions = {}) { - const fuseOptions: AngularFusejsOptions = Object.assign({}, this.defaultOptions, options); + searchList(list: Array, searchTerms: string, options: AngularFusejsOptions = {}) { + const fuseOptions: AngularFusejsOptions = Object.assign({}, this.defaultOptions, options); let result = []; if (searchTerms && searchTerms.length >= fuseOptions.minSearchTermLength) { @@ -67,7 +67,7 @@ export class FusejsService { return _out; } - private handleHighlight(result, options: AngularFusejsOptions) { + private handleHighlight(result, options: AngularFusejsOptions) { if (options.maximumScore && options.includeScore) { result = result.filter((matchObject) => { return matchObject.score <= options.maximumScore; @@ -103,4 +103,4 @@ export class FusejsService { return item; }); } -} \ No newline at end of file +} From e90d99cf30103b57baf531a98681d5168d64189d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 07:24:03 +0200 Subject: [PATCH 02/22] Fixing for angular 10 typings issues --- tsconfig.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 458dad9..85024eb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,8 @@ "compilerOptions": { "module": "commonjs", "target": "es5", + "baseUrl": "./src", + "esModuleInterop": true, "noImplicitAny": false, "sourceMap": false, "declaration": true, @@ -16,4 +18,4 @@ "moduleResolution": "node", "skipLibCheck": true } -} \ No newline at end of file +} From cdad8995e868a29e9e65362ce63626242662444b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 07:30:49 +0200 Subject: [PATCH 03/22] Fixing for angular 10 typings issues --- src/fusejs.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index 37b1451..60f1148 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import * as Fuse from 'fuse.js'; +import Fuse from 'fuse.js'; import FuseOptions = Fuse.FuseOptions; import _set = require('lodash.set'); From a79d17abfe8563ed8ddab9419e33457cc792cccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 07:31:22 +0200 Subject: [PATCH 04/22] Fixing for angular 10 typings issues --- src/fusejs.pipe.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fusejs.pipe.ts b/src/fusejs.pipe.ts index 3b3ecd2..bfe0081 100644 --- a/src/fusejs.pipe.ts +++ b/src/fusejs.pipe.ts @@ -3,14 +3,14 @@ import {FusejsService, AngularFusejsOptions} from './fusejs.service'; @Pipe({name: 'fusejs'}) -export class FusejsPipe implements PipeTransform { +export class FusejsPipe implements PipeTransform { constructor( - private FusejsService: FusejsService + private FusejsService: FusejsService ) {} - transform(elements: Array, + transform(elements: Array, searchTerms: string, - options: AngularFusejsOptions = {}) { + options: AngularFusejsOptions = {}) { return this.FusejsService.searchList(elements, searchTerms, options); } -} \ No newline at end of file +} From 75fdfce06e398bcc7d312dc5c70f98d399caaae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 07:48:09 +0200 Subject: [PATCH 05/22] Fixing for angular 10 typings issues --- tsconfig.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 85024eb..ecb5997 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,8 +8,6 @@ "compilerOptions": { "module": "commonjs", "target": "es5", - "baseUrl": "./src", - "esModuleInterop": true, "noImplicitAny": false, "sourceMap": false, "declaration": true, From c367f404c22403a5d39db7a4b163cbef3f429064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 08:11:18 +0200 Subject: [PATCH 06/22] Fixing for angular 10 typings issues --- tsconfig.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index ecb5997..6e395f7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,17 @@ { "files": [ - "index.ts" + "index.ts", ], "exclude": [ "node_modules" ], + "include": [ + "src/**/*", + ], "compilerOptions": { "module": "commonjs", "target": "es5", + "esModuleInterop": true, "noImplicitAny": false, "sourceMap": false, "declaration": true, From 3ece9db08dbeb646be5e44cbad80232f9dcf4ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 08:36:36 +0200 Subject: [PATCH 07/22] Building files for package ready as nodemodule git ref --- index.js | 46 +++++++++++++++++++++++++------------------ package.json | 9 ++++----- src/fusejs.service.ts | 4 +++- tsconfig.json | 10 ++++++++-- yarn.lock | 25 ++++++++++++++++++++--- 5 files changed, 64 insertions(+), 30 deletions(-) diff --git a/index.js b/index.js index aa88a8c..5a106cd 100644 --- a/index.js +++ b/index.js @@ -1,35 +1,43 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); +exports.FusejsModule = void 0; var core_1 = require("@angular/core"); var fusejs_pipe_1 = require("./src/fusejs.pipe"); var fusejs_service_1 = require("./src/fusejs.service"); -var FusejsModule = (function () { +var FusejsModule = /** @class */ (function () { function FusejsModule() { } + FusejsModule = __decorate([ + core_1.NgModule({ + providers: [ + fusejs_service_1.FusejsService + ], + declarations: [ + fusejs_pipe_1.FusejsPipe, + ], + exports: [ + fusejs_pipe_1.FusejsPipe, + ] + }) + ], FusejsModule); return FusejsModule; }()); -FusejsModule = __decorate([ - core_1.NgModule({ - providers: [ - fusejs_service_1.FusejsService - ], - declarations: [ - fusejs_pipe_1.FusejsPipe, - ], - exports: [ - fusejs_pipe_1.FusejsPipe, - ] - }) -], FusejsModule); exports.FusejsModule = FusejsModule; -__export(require("./src/fusejs.service")); -__export(require("./src/fusejs.pipe")); +__exportStar(require("./src/fusejs.service"), exports); +__exportStar(require("./src/fusejs.pipe"), exports); diff --git a/package.json b/package.json index 4418e76..5a8a927 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,11 @@ "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "dependencies": { - "fuse.js": "^3.2.0", + "@angular/core": "10.2.0", + "fuse.js": "^3.6.1", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2" }, - "peerDependencies": { - "@angular/core": "^2.0.0" - }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, @@ -31,6 +29,7 @@ "homepage": "https://github.com/maleblond/angular-local-search#readme", "devDependencies": { "@types/lodash.get": "^4.4.2", - "@types/lodash.set": "^4.3.2" + "@types/lodash.set": "^4.3.2", + "typescript": "3.9.7" } } diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index 60f1148..5b85fe5 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -31,7 +31,9 @@ export class FusejsService { }; searchList(list: Array, searchTerms: string, options: AngularFusejsOptions = {}) { - const fuseOptions: AngularFusejsOptions = Object.assign({}, this.defaultOptions, options); + // https://stackoverflow.com/questions/35959372/property-assign-does-not-exist-on-type-objectconstructor + // TODO : remove (Object) hack by using right lib or polyfill ? + const fuseOptions: AngularFusejsOptions = (Object).assign({}, this.defaultOptions, options); let result = []; if (searchTerms && searchTerms.length >= fuseOptions.minSearchTermLength) { diff --git a/tsconfig.json b/tsconfig.json index 6e395f7..3ceabb7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,18 @@ { "files": [ - "index.ts", + "index.ts" ], "exclude": [ "node_modules" ], "include": [ - "src/**/*", + "src/**/*" + ], + "lib": [ + "es2015", + "es2017", + "esnext", + "dom" ], "compilerOptions": { "module": "commonjs", diff --git a/yarn.lock b/yarn.lock index 1b32747..0b22e3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5 +1,14 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 + + +"@angular/core@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.2.0.tgz#a5eac8b37ef5268f90e45e06b1a4d48ab55f31dc" + integrity sha512-pj+0cIDHMfeTFFrxbxM1qanSqhnA3ybCYMQm+Fs/WAPlLSvB6s/vVhq6tCdicHzd7/fujGXPcb8Hvtx+km8TqQ== + dependencies: + tslib "^2.0.0" + "@types/lodash.get": version "4.4.2" resolved "https://registry.yarnpkg.com/@types/lodash.get/-/lodash.get-4.4.2.tgz#24d03d099d9df65656b724c38c616147ff7e2b13" @@ -16,9 +25,10 @@ version "4.14.57" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.57.tgz#f0095fb15ec1004455613f3ad73766583e62f830" -fuse.js@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.0.tgz#f0448e8069855bf2a3e683cdc1d320e7e2a07ef4" +fuse.js@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" + integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== lodash.get: version "4.4.2" @@ -28,3 +38,12 @@ lodash.set: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" +tslib@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + +typescript@3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== From fa1f17b1ed60d61793d7f38e80d31fb7d4f88123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 08:42:42 +0200 Subject: [PATCH 08/22] Building files for package ready as nodemodule git ref --- .gitignore | 5 +- index.d.ts | 4 ++ src/fusejs.pipe.d.ts | 7 +++ src/fusejs.pipe.js | 29 +++++++++++ src/fusejs.service.d.ts | 15 ++++++ src/fusejs.service.js | 107 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 index.d.ts create mode 100644 src/fusejs.pipe.d.ts create mode 100644 src/fusejs.pipe.js create mode 100644 src/fusejs.service.d.ts create mode 100644 src/fusejs.service.js diff --git a/.gitignore b/.gitignore index cb32dd9..756ff55 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,7 @@ yarn-error.log *.d.ts *.js.map -npm-debug.log \ No newline at end of file +npm-debug.log + +!/src/** +!index.d.ts \ No newline at end of file diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..75d728f --- /dev/null +++ b/index.d.ts @@ -0,0 +1,4 @@ +export declare class FusejsModule { +} +export * from './src/fusejs.service'; +export * from './src/fusejs.pipe'; diff --git a/src/fusejs.pipe.d.ts b/src/fusejs.pipe.d.ts new file mode 100644 index 0000000..bbbf424 --- /dev/null +++ b/src/fusejs.pipe.d.ts @@ -0,0 +1,7 @@ +import { PipeTransform } from '@angular/core'; +import { FusejsService, AngularFusejsOptions } from './fusejs.service'; +export declare class FusejsPipe implements PipeTransform { + private FusejsService; + constructor(FusejsService: FusejsService); + transform(elements: Array, searchTerms: string, options?: AngularFusejsOptions): any[]; +} diff --git a/src/fusejs.pipe.js b/src/fusejs.pipe.js new file mode 100644 index 0000000..db5e7ac --- /dev/null +++ b/src/fusejs.pipe.js @@ -0,0 +1,29 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FusejsPipe = void 0; +var core_1 = require("@angular/core"); +var fusejs_service_1 = require("./fusejs.service"); +var FusejsPipe = /** @class */ (function () { + function FusejsPipe(FusejsService) { + this.FusejsService = FusejsService; + } + FusejsPipe.prototype.transform = function (elements, searchTerms, options) { + if (options === void 0) { options = {}; } + return this.FusejsService.searchList(elements, searchTerms, options); + }; + FusejsPipe = __decorate([ + core_1.Pipe({ name: 'fusejs' }), + __metadata("design:paramtypes", [fusejs_service_1.FusejsService]) + ], FusejsPipe); + return FusejsPipe; +}()); +exports.FusejsPipe = FusejsPipe; diff --git a/src/fusejs.service.d.ts b/src/fusejs.service.d.ts new file mode 100644 index 0000000..fe41da8 --- /dev/null +++ b/src/fusejs.service.d.ts @@ -0,0 +1,15 @@ +import Fuse from 'fuse.js'; +import FuseOptions = Fuse.FuseOptions; +export interface AngularFusejsOptions extends FuseOptions { + supportHighlight?: boolean; + fusejsHighlightKey?: string; + fusejsScoreKey?: string; + minSearchTermLength?: number; + maximumScore?: number; +} +export declare class FusejsService { + private defaultOptions; + searchList(list: Array, searchTerms: string, options?: AngularFusejsOptions): any[]; + private deepClone; + private handleHighlight; +} diff --git a/src/fusejs.service.js b/src/fusejs.service.js new file mode 100644 index 0000000..234d095 --- /dev/null +++ b/src/fusejs.service.js @@ -0,0 +1,107 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FusejsService = void 0; +var core_1 = require("@angular/core"); +var fuse_js_1 = __importDefault(require("fuse.js")); +var _set = require("lodash.set"); +var _get = require("lodash.get"); +var FusejsService = /** @class */ (function () { + function FusejsService() { + this.defaultOptions = { + supportHighlight: true, + shouldSort: false, + threshold: 0.6, + location: 0, + distance: 100, + maxPatternLength: 32, + minMatchCharLength: 2, + includeScore: true, + minSearchTermLength: 3, + fusejsHighlightKey: 'fuseJsHighlighted', + fusejsScoreKey: 'fuseJsScore', + }; + } + FusejsService.prototype.searchList = function (list, searchTerms, options) { + var _this = this; + if (options === void 0) { options = {}; } + // https://stackoverflow.com/questions/35959372/property-assign-does-not-exist-on-type-objectconstructor + // TODO : remove (Object) hack by using right lib or polyfill ? + var fuseOptions = Object.assign({}, this.defaultOptions, options); + var result = []; + if (searchTerms && searchTerms.length >= fuseOptions.minSearchTermLength) { + if (fuseOptions.supportHighlight) { + fuseOptions.includeMatches = true; + } + var fuse = new fuse_js_1.default(list, fuseOptions); + result = fuse.search(searchTerms); + if (fuseOptions.supportHighlight) { + result = this.handleHighlight(result, fuseOptions); + } + } + else { + result = this.deepClone(list); + if (fuseOptions.supportHighlight) { + result.forEach(function (element) { + element[fuseOptions.fusejsHighlightKey] = _this.deepClone(element); + }); + } + } + return result; + }; + FusejsService.prototype.deepClone = function (o) { + var _out, v, _key; + _out = Array.isArray(o) ? [] : {}; + for (_key in o) { + v = o[_key]; + _out[_key] = (typeof v === "object") ? this.deepClone(v) : v; + } + return _out; + }; + FusejsService.prototype.handleHighlight = function (result, options) { + var _this = this; + if (options.maximumScore && options.includeScore) { + result = result.filter(function (matchObject) { + return matchObject.score <= options.maximumScore; + }); + } + return result.map(function (matchObject) { + var item = _this.deepClone(matchObject.item); + item[options.fusejsHighlightKey] = _this.deepClone(item); + item[options.fusejsScoreKey] = matchObject.score; + for (var _i = 0, _a = matchObject.matches; _i < _a.length; _i++) { + var match = _a[_i]; + var indices = match.indices; + var highlightOffset = 0; + var key = match.key; + if (_get(item[options.fusejsHighlightKey], key).constructor === Array) { + key += "[" + match.arrayIndex + "]"; + } + for (var _b = 0, indices_1 = indices; _b < indices_1.length; _b++) { + var indice = indices_1[_b]; + var initialValue = _get(item[options.fusejsHighlightKey], key); + var startOffset = indice[0] + highlightOffset; + var endOffset = indice[1] + highlightOffset + 1; + var highlightedTerm = initialValue.substring(startOffset, endOffset); + var newValue = initialValue.substring(0, startOffset) + '' + highlightedTerm + '' + initialValue.substring(endOffset); + highlightOffset += ''.length; + _set(item[options.fusejsHighlightKey], key, newValue); + } + } + return item; + }); + }; + FusejsService = __decorate([ + core_1.Injectable() + ], FusejsService); + return FusejsService; +}()); +exports.FusejsService = FusejsService; From b64faf40f228d3c83e72ac5fea7f59023b4cb964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 08:47:44 +0200 Subject: [PATCH 09/22] Building files for package ready as nodemodule git ref --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5a8a927..db00b8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-fusejs", - "version": "1.0.1", + "version": "1.0.2", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "dependencies": { From 416cc9cf3dbe659add05ab93ef46c79161d9fd44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Moreau?= Date: Fri, 9 Apr 2021 09:17:43 +0200 Subject: [PATCH 10/22] Update README.md --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a2e0fb0..824b547 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,16 @@ Also easily **highlight** matched terms which is the true added value of this mo Demo: +## Forked by Miguel Monwoo for Angular 10 compatibilities +Watting for Author updates, did fix missing type to fit angular-fusejs with last fusejs lib. + ## How to install? This module is available through npm. It is compatible with module bundlers (webpack / browserify ...). -1. `npm install angular-fusejs` -2. Import `FusejsModule` into your module: +1. `# npm install angular-fusejs` +2. `npm upgrade angular-fusejs@git+https://github.com/MonwooServices/angular-fusejs.git#DistBuild` +3. Import `FusejsModule` into your module: ``` import {FusejsModule} from 'angular-fusejs' @NgModule({ @@ -71,4 +75,4 @@ Replace `whateverAttribute` with your attribute name, trust it as HTML and you a I made this just for fun, to learn a bit more about fuzzy search + angular. Fuzzy search + detecting what should be highlighted is 100% handled by [fuse.js](http://fusejs.io/). -If you encounter any bug, please check who is the culprit before submitting an issue - it might be a bug in fuse.js library. \ No newline at end of file +If you encounter any bug, please check who is the culprit before submitting an issue - it might be a bug in fuse.js library. From 41483b0f1c6bcba17f4273037ca5fe69a5ba25b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 09:26:24 +0200 Subject: [PATCH 11/22] Add highlightTag feature to chose injected highlight tag --- src/fusejs.service.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index 5b85fe5..c139e75 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -12,6 +12,7 @@ export interface AngularFusejsOptions extends FuseOptions { fusejsScoreKey?: string; minSearchTermLength?: number; maximumScore?: number; + highlightTag?: string; } @Injectable() @@ -95,9 +96,11 @@ export class FusejsService { const startOffset = indice[0] + highlightOffset; const endOffset = indice[1] + highlightOffset + 1; + const tagStart = "<" + (options.highlightTag ?? "em") + ">"; + const tagEnd = ""; let highlightedTerm = initialValue.substring(startOffset, endOffset); - let newValue = initialValue.substring(0, startOffset) + '' + highlightedTerm + '' + initialValue.substring(endOffset); - highlightOffset += ''.length; + let newValue = initialValue.substring(0, startOffset) + tagStart + highlightedTerm + tagEnd + initialValue.substring(endOffset); + highlightOffset += (tagStart + tagEnd).length; _set(item[options.fusejsHighlightKey], key, newValue); } } From ae1e8b9fe8a5d74668e864aa04cb1e4e207a3b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 09:53:04 +0200 Subject: [PATCH 12/22] Cleanning prod files --- index.d.ts | 4 -- index.js | 43 ---------------- src/fusejs.pipe.d.ts | 7 --- src/fusejs.pipe.js | 29 ----------- src/fusejs.service.d.ts | 15 ------ src/fusejs.service.js | 107 ---------------------------------------- 6 files changed, 205 deletions(-) delete mode 100644 index.d.ts delete mode 100644 index.js delete mode 100644 src/fusejs.pipe.d.ts delete mode 100644 src/fusejs.pipe.js delete mode 100644 src/fusejs.service.d.ts delete mode 100644 src/fusejs.service.js diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 75d728f..0000000 --- a/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare class FusejsModule { -} -export * from './src/fusejs.service'; -export * from './src/fusejs.pipe'; diff --git a/index.js b/index.js deleted file mode 100644 index 5a106cd..0000000 --- a/index.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FusejsModule = void 0; -var core_1 = require("@angular/core"); -var fusejs_pipe_1 = require("./src/fusejs.pipe"); -var fusejs_service_1 = require("./src/fusejs.service"); -var FusejsModule = /** @class */ (function () { - function FusejsModule() { - } - FusejsModule = __decorate([ - core_1.NgModule({ - providers: [ - fusejs_service_1.FusejsService - ], - declarations: [ - fusejs_pipe_1.FusejsPipe, - ], - exports: [ - fusejs_pipe_1.FusejsPipe, - ] - }) - ], FusejsModule); - return FusejsModule; -}()); -exports.FusejsModule = FusejsModule; -__exportStar(require("./src/fusejs.service"), exports); -__exportStar(require("./src/fusejs.pipe"), exports); diff --git a/src/fusejs.pipe.d.ts b/src/fusejs.pipe.d.ts deleted file mode 100644 index bbbf424..0000000 --- a/src/fusejs.pipe.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { PipeTransform } from '@angular/core'; -import { FusejsService, AngularFusejsOptions } from './fusejs.service'; -export declare class FusejsPipe implements PipeTransform { - private FusejsService; - constructor(FusejsService: FusejsService); - transform(elements: Array, searchTerms: string, options?: AngularFusejsOptions): any[]; -} diff --git a/src/fusejs.pipe.js b/src/fusejs.pipe.js deleted file mode 100644 index db5e7ac..0000000 --- a/src/fusejs.pipe.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FusejsPipe = void 0; -var core_1 = require("@angular/core"); -var fusejs_service_1 = require("./fusejs.service"); -var FusejsPipe = /** @class */ (function () { - function FusejsPipe(FusejsService) { - this.FusejsService = FusejsService; - } - FusejsPipe.prototype.transform = function (elements, searchTerms, options) { - if (options === void 0) { options = {}; } - return this.FusejsService.searchList(elements, searchTerms, options); - }; - FusejsPipe = __decorate([ - core_1.Pipe({ name: 'fusejs' }), - __metadata("design:paramtypes", [fusejs_service_1.FusejsService]) - ], FusejsPipe); - return FusejsPipe; -}()); -exports.FusejsPipe = FusejsPipe; diff --git a/src/fusejs.service.d.ts b/src/fusejs.service.d.ts deleted file mode 100644 index fe41da8..0000000 --- a/src/fusejs.service.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Fuse from 'fuse.js'; -import FuseOptions = Fuse.FuseOptions; -export interface AngularFusejsOptions extends FuseOptions { - supportHighlight?: boolean; - fusejsHighlightKey?: string; - fusejsScoreKey?: string; - minSearchTermLength?: number; - maximumScore?: number; -} -export declare class FusejsService { - private defaultOptions; - searchList(list: Array, searchTerms: string, options?: AngularFusejsOptions): any[]; - private deepClone; - private handleHighlight; -} diff --git a/src/fusejs.service.js b/src/fusejs.service.js deleted file mode 100644 index 234d095..0000000 --- a/src/fusejs.service.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FusejsService = void 0; -var core_1 = require("@angular/core"); -var fuse_js_1 = __importDefault(require("fuse.js")); -var _set = require("lodash.set"); -var _get = require("lodash.get"); -var FusejsService = /** @class */ (function () { - function FusejsService() { - this.defaultOptions = { - supportHighlight: true, - shouldSort: false, - threshold: 0.6, - location: 0, - distance: 100, - maxPatternLength: 32, - minMatchCharLength: 2, - includeScore: true, - minSearchTermLength: 3, - fusejsHighlightKey: 'fuseJsHighlighted', - fusejsScoreKey: 'fuseJsScore', - }; - } - FusejsService.prototype.searchList = function (list, searchTerms, options) { - var _this = this; - if (options === void 0) { options = {}; } - // https://stackoverflow.com/questions/35959372/property-assign-does-not-exist-on-type-objectconstructor - // TODO : remove (Object) hack by using right lib or polyfill ? - var fuseOptions = Object.assign({}, this.defaultOptions, options); - var result = []; - if (searchTerms && searchTerms.length >= fuseOptions.minSearchTermLength) { - if (fuseOptions.supportHighlight) { - fuseOptions.includeMatches = true; - } - var fuse = new fuse_js_1.default(list, fuseOptions); - result = fuse.search(searchTerms); - if (fuseOptions.supportHighlight) { - result = this.handleHighlight(result, fuseOptions); - } - } - else { - result = this.deepClone(list); - if (fuseOptions.supportHighlight) { - result.forEach(function (element) { - element[fuseOptions.fusejsHighlightKey] = _this.deepClone(element); - }); - } - } - return result; - }; - FusejsService.prototype.deepClone = function (o) { - var _out, v, _key; - _out = Array.isArray(o) ? [] : {}; - for (_key in o) { - v = o[_key]; - _out[_key] = (typeof v === "object") ? this.deepClone(v) : v; - } - return _out; - }; - FusejsService.prototype.handleHighlight = function (result, options) { - var _this = this; - if (options.maximumScore && options.includeScore) { - result = result.filter(function (matchObject) { - return matchObject.score <= options.maximumScore; - }); - } - return result.map(function (matchObject) { - var item = _this.deepClone(matchObject.item); - item[options.fusejsHighlightKey] = _this.deepClone(item); - item[options.fusejsScoreKey] = matchObject.score; - for (var _i = 0, _a = matchObject.matches; _i < _a.length; _i++) { - var match = _a[_i]; - var indices = match.indices; - var highlightOffset = 0; - var key = match.key; - if (_get(item[options.fusejsHighlightKey], key).constructor === Array) { - key += "[" + match.arrayIndex + "]"; - } - for (var _b = 0, indices_1 = indices; _b < indices_1.length; _b++) { - var indice = indices_1[_b]; - var initialValue = _get(item[options.fusejsHighlightKey], key); - var startOffset = indice[0] + highlightOffset; - var endOffset = indice[1] + highlightOffset + 1; - var highlightedTerm = initialValue.substring(startOffset, endOffset); - var newValue = initialValue.substring(0, startOffset) + '' + highlightedTerm + '' + initialValue.substring(endOffset); - highlightOffset += ''.length; - _set(item[options.fusejsHighlightKey], key, newValue); - } - } - return item; - }); - }; - FusejsService = __decorate([ - core_1.Injectable() - ], FusejsService); - return FusejsService; -}()); -exports.FusejsService = FusejsService; From 88f233fa359d4f573776b270f5b4c502eeaac579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Fri, 9 Apr 2021 09:54:11 +0200 Subject: [PATCH 13/22] Cleanning prod files --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 756ff55..1d6a5a7 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,3 @@ yarn-error.log *.js.map npm-debug.log - -!/src/** -!index.d.ts \ No newline at end of file From ba0ed8fab3c24852f8fd5af75e6e0d8077ab8c7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 02:32:24 +0200 Subject: [PATCH 14/22] Adding build script for production files --- .vscode/settings.json | 8 ++++++++ package.json | 4 +++- tsconfig.json | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8838e22 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "workbench.colorCustomizations": { + "statusBar.background": "#BDB76B", + "statusBar.debuggingBackground": "#BDB76B", + "statusBar.noFolderBackground": "#BDB76B", + "statussBar.prominentBackground": "#BDB76B" + } +} \ No newline at end of file diff --git a/package.json b/package.json index db00b8f..301f34c 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "lodash.set": "^4.3.2" }, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "debug": "tsc .", + "build": "tsc -p ." }, "repository": { "type": "git", diff --git a/tsconfig.json b/tsconfig.json index 3ceabb7..012d4b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,7 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true, "moduleResolution": "node", - "skipLibCheck": true + "skipLibCheck": true, + "outDir": "./dist" } } From 976752b914ac526e0883399dfae5bd0079fba67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 11:35:25 +0200 Subject: [PATCH 15/22] Prod build in progress --- package.json | 12 +++++++++--- yarn.lock | 49 ------------------------------------------------- 2 files changed, 9 insertions(+), 52 deletions(-) delete mode 100644 yarn.lock diff --git a/package.json b/package.json index 301f34c..244725b 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,20 @@ "version": "1.0.2", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", + "type": "module", "dependencies": { - "@angular/core": "10.2.0", "fuse.js": "^3.6.1", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2" }, + "peerDependencies": { + "@angular/core": "10.2.0" + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "debug": "tsc .", - "build": "tsc -p ." + "clean": "rm -rf ./dist", + "copy-files": "cp README.md LICENSE package.json dist/", + "build": "tsc -p . && yarn copy-files" }, "repository": { "type": "git", @@ -32,6 +36,8 @@ "devDependencies": { "@types/lodash.get": "^4.4.2", "@types/lodash.set": "^4.3.2", + "@angular/core": "10.2.0", + "@types/node": "^13.1.8", "typescript": "3.9.7" } } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 0b22e3f..0000000 --- a/yarn.lock +++ /dev/null @@ -1,49 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@angular/core@10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.2.0.tgz#a5eac8b37ef5268f90e45e06b1a4d48ab55f31dc" - integrity sha512-pj+0cIDHMfeTFFrxbxM1qanSqhnA3ybCYMQm+Fs/WAPlLSvB6s/vVhq6tCdicHzd7/fujGXPcb8Hvtx+km8TqQ== - dependencies: - tslib "^2.0.0" - -"@types/lodash.get": - version "4.4.2" - resolved "https://registry.yarnpkg.com/@types/lodash.get/-/lodash.get-4.4.2.tgz#24d03d099d9df65656b724c38c616147ff7e2b13" - dependencies: - "@types/lodash" "*" - -"@types/lodash.set": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@types/lodash.set/-/lodash.set-4.3.2.tgz#ad68cf88cb7bc12c0ada134bd4b805188953fe7b" - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.57" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.57.tgz#f0095fb15ec1004455613f3ad73766583e62f830" - -fuse.js@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" - integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== - -lodash.get: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - -lodash.set: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - -tslib@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -typescript@3.9.7: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== From 5f3e965bd9c052ec34efb22dab0f0f8bc3c6acce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 12:06:48 +0200 Subject: [PATCH 16/22] Prod build in progress --- .gitignore | 1 + README.md | 3 +++ package.json | 3 ++- src/fusejs.service.ts | 2 +- tsconfig.json | 8 ++++++-- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 1d6a5a7..eee3ca0 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ yarn-error.log *.js.map npm-debug.log +yarn.lock \ No newline at end of file diff --git a/README.md b/README.md index 824b547..ce549a4 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@ Demo: ## Forked by Miguel Monwoo for Angular 10 compatibilities Watting for Author updates, did fix missing type to fit angular-fusejs with last fusejs lib. +Work in progress : production build inspired from : +https://github.com/malick-dev/angular-fusejs/commit/89d005037f62728c734904a155f996699ab882bb + ## How to install? This module is available through npm. It is compatible with module bundlers (webpack / browserify ...). diff --git a/package.json b/package.json index 244725b..0751c06 100644 --- a/package.json +++ b/package.json @@ -34,10 +34,11 @@ }, "homepage": "https://github.com/maleblond/angular-local-search#readme", "devDependencies": { + "@angular/core": "10.2.0", "@types/lodash.get": "^4.4.2", "@types/lodash.set": "^4.3.2", - "@angular/core": "10.2.0", "@types/node": "^13.1.8", + "rxjs": "^6.6.7", "typescript": "3.9.7" } } diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index c139e75..052b642 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -1,6 +1,6 @@ import {Injectable} from '@angular/core'; import Fuse from 'fuse.js'; -import FuseOptions = Fuse.FuseOptions; +import {FuseOptions} from 'fuse.js' import _set = require('lodash.set'); import _get = require('lodash.get'); diff --git a/tsconfig.json b/tsconfig.json index 012d4b9..3a4b148 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,10 +21,14 @@ "noImplicitAny": false, "sourceMap": false, "declaration": true, + "declarationMap": false, "experimentalDecorators": true, "emitDecoratorMetadata": true, "moduleResolution": "node", - "skipLibCheck": true, + "skipLibCheck": false, "outDir": "./dist" - } + }, + "angularCompilerOptions": { + "enableIvy": false + } } From eb9473671c5473fa63f5516104bae3408518795f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 12:09:05 +0200 Subject: [PATCH 17/22] Prod build in progress, bump version to test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0751c06..c479656 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-fusejs", - "version": "1.0.2", + "version": "1.0.3", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "type": "module", From 91da6ee3370adc7bd1bff5196bf0e37a0fb4300c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 12:22:03 +0200 Subject: [PATCH 18/22] Prod build in progress, trying to solve missing @NgModule annotation from lib integration --- package.json | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index c479656..9bbb32a 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,20 @@ { "name": "angular-fusejs", - "version": "1.0.3", + "version": "1.0.4", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "type": "module", "dependencies": { + "@angular/core": "10.2.0", "fuse.js": "^3.6.1", "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2" - }, - "peerDependencies": { - "@angular/core": "10.2.0" + "lodash.set": "^4.3.2", + "rxjs": "^6.6.7" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "clean": "rm -rf ./dist", - "copy-files": "cp README.md LICENSE package.json dist/", + "copy-files": "cp README.md LICENSE package.json tsconfig.json dist/", "build": "tsc -p . && yarn copy-files" }, "repository": { @@ -34,11 +33,9 @@ }, "homepage": "https://github.com/maleblond/angular-local-search#readme", "devDependencies": { - "@angular/core": "10.2.0", "@types/lodash.get": "^4.4.2", "@types/lodash.set": "^4.3.2", "@types/node": "^13.1.8", - "rxjs": "^6.6.7", "typescript": "3.9.7" } } From 3b772a2a82e3b1ca433e9ed3bba0e69536701e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 12:54:30 +0200 Subject: [PATCH 19/22] Prod build in progress, trying to solve missing @NgModule annotation from lib integration --- package.json | 25 ++++++++++++++++--------- src/fusejs.service.ts | 20 ++++++++++---------- tsconfig.json | 8 +++++--- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 9bbb32a..02e9279 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,28 @@ { "name": "angular-fusejs", - "version": "1.0.4", + "version": "1.0.5", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "type": "module", "dependencies": { + "@angular/common": "10.2.0", "@angular/core": "10.2.0", "fuse.js": "^3.6.1", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", - "rxjs": "^6.6.7" + "rxjs": "^6.6.7", + "tslib": "^2.1.0", + "zone.js": "~0.10.3" + }, + "devDependencies": { + "@types/lodash.get": "^4.4.2", + "@types/lodash.set": "^4.3.2", + "@types/node": "^13.1.8", + "typescript": "3.9.7" + }, + "peerDependencies": { + "@angular/common": "10.2.0", + "@angular/core": "10.2.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", @@ -31,11 +44,5 @@ "bugs": { "url": "https://github.com/maleblond/angular-local-search/issues" }, - "homepage": "https://github.com/maleblond/angular-local-search#readme", - "devDependencies": { - "@types/lodash.get": "^4.4.2", - "@types/lodash.set": "^4.3.2", - "@types/node": "^13.1.8", - "typescript": "3.9.7" - } + "homepage": "https://github.com/maleblond/angular-local-search#readme" } diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index 052b642..3e42702 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -10,7 +10,7 @@ export interface AngularFusejsOptions extends FuseOptions { supportHighlight?: boolean; fusejsHighlightKey?: string; fusejsScoreKey?: string; - minSearchTermLength?: number; + minSearchTermLength?: number; // = 0; maximumScore?: number; highlightTag?: string; } @@ -35,9 +35,9 @@ export class FusejsService { // https://stackoverflow.com/questions/35959372/property-assign-does-not-exist-on-type-objectconstructor // TODO : remove (Object) hack by using right lib or polyfill ? const fuseOptions: AngularFusejsOptions = (Object).assign({}, this.defaultOptions, options); - let result = []; + let result:any = []; - if (searchTerms && searchTerms.length >= fuseOptions.minSearchTermLength) { + if (searchTerms && searchTerms.length >= (fuseOptions?.minSearchTermLength || 0)) { if (fuseOptions.supportHighlight) { fuseOptions.includeMatches = true; } @@ -52,7 +52,7 @@ export class FusejsService { if (fuseOptions.supportHighlight) { result.forEach((element) => { - element[fuseOptions.fusejsHighlightKey] = this.deepClone(element); + element[fuseOptions.fusejsHighlightKey || '_'] = this.deepClone(element); }); } } @@ -73,26 +73,26 @@ export class FusejsService { private handleHighlight(result, options: AngularFusejsOptions) { if (options.maximumScore && options.includeScore) { result = result.filter((matchObject) => { - return matchObject.score <= options.maximumScore; + return matchObject.score <= (options.maximumScore||0); }) } return result.map((matchObject) => { const item = this.deepClone(matchObject.item); - item[options.fusejsHighlightKey] = this.deepClone(item); - item[options.fusejsScoreKey] = matchObject.score; + item[options.fusejsHighlightKey || "_"] = this.deepClone(item); + item[options.fusejsScoreKey || "_"] = matchObject.score; for (let match of matchObject.matches) { const indices: number[][] = match.indices; let highlightOffset: number = 0; let key: string = match.key; - if(_get(item[options.fusejsHighlightKey], key).constructor === Array) { + if(_get(item[options.fusejsHighlightKey || "_"], key).constructor === Array) { key += `[${match.arrayIndex}]` } for (let indice of indices) { - let initialValue: string = _get(item[options.fusejsHighlightKey], key) as string; + let initialValue: string = _get(item[options.fusejsHighlightKey || "_"], key) as string; const startOffset = indice[0] + highlightOffset; const endOffset = indice[1] + highlightOffset + 1; @@ -101,7 +101,7 @@ export class FusejsService { let highlightedTerm = initialValue.substring(startOffset, endOffset); let newValue = initialValue.substring(0, startOffset) + tagStart + highlightedTerm + tagEnd + initialValue.substring(endOffset); highlightOffset += (tagStart + tagEnd).length; - _set(item[options.fusejsHighlightKey], key, newValue); + _set(item[options.fusejsHighlightKey || "_"], key, newValue); } } diff --git a/tsconfig.json b/tsconfig.json index 3a4b148..4adb884 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,17 +16,19 @@ ], "compilerOptions": { "module": "commonjs", - "target": "es5", + "target": "es6", "esModuleInterop": true, "noImplicitAny": false, "sourceMap": false, "declaration": true, - "declarationMap": false, + "declarationMap": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "moduleResolution": "node", "skipLibCheck": false, - "outDir": "./dist" + "outDir": "./dist", + "rootDir": "./", + "strict": true }, "angularCompilerOptions": { "enableIvy": false From 35b881390d7a91265a057c6ad80db8eda1fb01fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 13:52:11 +0200 Subject: [PATCH 20/22] Prod build, package build ok --- README.md | 3 +++ package.json | 21 ++++++++++++++++----- src/fusejs.service.ts | 6 +++--- tsconfig.json | 2 ++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ce549a4..b51324c 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ Watting for Author updates, did fix missing type to fit angular-fusejs with last Work in progress : production build inspired from : https://github.com/malick-dev/angular-fusejs/commit/89d005037f62728c734904a155f996699ab882bb +https://github.com/ng-packagr/ng-packagr/issues/355 +https://github.com/abbazabacto/ngpackagr-barrel-issue/blob/master/package.json +https://www.typescriptlang.org/tsconfig#allowSyntheticDefaultImports ## How to install? diff --git a/package.json b/package.json index 02e9279..83209c6 100644 --- a/package.json +++ b/package.json @@ -1,33 +1,44 @@ { + "$schema": "./node_modules/ng-packagr/package.schema.json", "name": "angular-fusejs", - "version": "1.0.5", + "version": "1.0.6", "description": "Angular plugin using fuse.js to search through a list of elements with a string. Supports highlight.", "main": "index.js", "type": "module", + "ngPackage": { + "lib": { + "entryFile": "index.ts" + }, + "whitelistedNonPeerDependencies": [ + "." + ] + }, "dependencies": { - "@angular/common": "10.2.0", "@angular/core": "10.2.0", "fuse.js": "^3.6.1", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", + "lodash-es": "^4.17.21", "rxjs": "^6.6.7", "tslib": "^2.1.0", "zone.js": "~0.10.3" }, "devDependencies": { + "@angular/compiler": "10.2.0", + "@angular/compiler-cli": "10.2.0", + "@types/lodash-es": "^4.17.4", "@types/lodash.get": "^4.4.2", "@types/lodash.set": "^4.3.2", "@types/node": "^13.1.8", + "ng-packagr": "^11.2.4", "typescript": "3.9.7" }, "peerDependencies": { - "@angular/common": "10.2.0", "@angular/core": "10.2.0" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "clean": "rm -rf ./dist", "copy-files": "cp README.md LICENSE package.json tsconfig.json dist/", + "package": "ng-packagr -p package.json", "build": "tsc -p . && yarn copy-files" }, "repository": { diff --git a/src/fusejs.service.ts b/src/fusejs.service.ts index 3e42702..c667907 100644 --- a/src/fusejs.service.ts +++ b/src/fusejs.service.ts @@ -1,9 +1,9 @@ import {Injectable} from '@angular/core'; -import Fuse from 'fuse.js'; +import * as Fuse from 'fuse.js'; import {FuseOptions} from 'fuse.js' -import _set = require('lodash.set'); -import _get = require('lodash.get'); +import {set as _set} from 'lodash-es'; +import {get as _get} from 'lodash-es'; export interface AngularFusejsOptions extends FuseOptions { diff --git a/tsconfig.json b/tsconfig.json index 4adb884..bfc0692 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,9 @@ "moduleResolution": "node", "skipLibCheck": false, "outDir": "./dist", + "baseUrl": "./", "rootDir": "./", + "allowSyntheticDefaultImports": true, "strict": true }, "angularCompilerOptions": { From 075a72c84e7c7bd29d96b914d43b9556207a981f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Mon, 26 Apr 2021 14:10:43 +0200 Subject: [PATCH 21/22] Prod build, package build ok --- index.ts | 16 +--------------- package.json | 8 ++++---- src/fusejs.module.ts | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 src/fusejs.module.ts diff --git a/index.ts b/index.ts index 674da86..dec895b 100644 --- a/index.ts +++ b/index.ts @@ -1,18 +1,4 @@ -import { NgModule } from '@angular/core' -import { FusejsPipe } from './src/fusejs.pipe' -import { FusejsService } from './src/fusejs.service' -@NgModule({ - providers: [ - FusejsService - ], - declarations: [ - FusejsPipe, - ], - exports: [ - FusejsPipe, - ] -}) -export class FusejsModule {} +export * from './src/fusejs.module'; export * from './src/fusejs.service'; export * from './src/fusejs.pipe'; \ No newline at end of file diff --git a/package.json b/package.json index 83209c6..85aeb42 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lib": { "entryFile": "index.ts" }, - "whitelistedNonPeerDependencies": [ + "allowedNonPeerDependencies": [ "." ] }, @@ -21,6 +21,9 @@ "tslib": "^2.1.0", "zone.js": "~0.10.3" }, + "peerDependencies": { + "@angular/core": "10.2.0" + }, "devDependencies": { "@angular/compiler": "10.2.0", "@angular/compiler-cli": "10.2.0", @@ -31,9 +34,6 @@ "ng-packagr": "^11.2.4", "typescript": "3.9.7" }, - "peerDependencies": { - "@angular/core": "10.2.0" - }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "clean": "rm -rf ./dist", diff --git a/src/fusejs.module.ts b/src/fusejs.module.ts new file mode 100644 index 0000000..f405039 --- /dev/null +++ b/src/fusejs.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core' +import { FusejsPipe } from './fusejs.pipe' +import { FusejsService } from './fusejs.service' + +@NgModule({ + providers: [ + FusejsService + ], + declarations: [ + FusejsPipe, + ], + exports: [ + FusejsPipe, + ] +}) +export class FusejsModule {}; From ed85cf88538a8b0966164b27b7b5d0b1d5654b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20MOREAU?= Date: Wed, 28 Apr 2021 01:31:23 +0200 Subject: [PATCH 22/22] Update Readme with fork updates --- README.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b51324c..cf79e33 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,31 @@ Also easily **highlight** matched terms which is the true added value of this mo Demo: ## Forked by Miguel Monwoo for Angular 10 compatibilities -Watting for Author updates, did fix missing type to fit angular-fusejs with last fusejs lib. +Watting for Author updates, did fix missing type to fit angular-fusejs with last fusejs lib and fix some production issue, all seem ok with Angular 10. -Work in progress : production build inspired from : +Production build inspired from : https://github.com/malick-dev/angular-fusejs/commit/89d005037f62728c734904a155f996699ab882bb + https://github.com/ng-packagr/ng-packagr/issues/355 + https://github.com/abbazabacto/ngpackagr-barrel-issue/blob/master/package.json + https://www.typescriptlang.org/tsconfig#allowSyntheticDefaultImports +And fixed with ng-packagr + +```bash +# Just use this fork dist build in your project : +yarn upgrade angular-fusejs@git+https://github.com/MonwooServices/angular-fusejs.git#DistBuild + + +# Build the fork sources for production (in ./dist): +yarn install +yarn clean && yarn package + +``` + + ## How to install? This module is available through npm. It is compatible with module bundlers (webpack / browserify ...).