@syncfusion/ej2-data
Advanced tools
Comparing version
/*! | ||
* filename: index.d.ts | ||
* version : 28.2.12 | ||
* version : 29.1.33 | ||
* Copyright Syncfusion Inc. 2001 - 2024. All rights reserved. | ||
@@ -5,0 +5,0 @@ * Use of this code is subject to the terms of our license. |
{ | ||
"_from": "@syncfusion/ej2-data@*", | ||
"_id": "@syncfusion/ej2-data@28.2.11", | ||
"_id": "@syncfusion/ej2-data@0.16.4", | ||
"_inBundle": false, | ||
"_integrity": "sha512-f6bkJ8AMYTaGCAZ7elUs0S9UkmidZMg63/7K8reJqcqHvcdARsX52R12bVakJZ8o1AEAkQgSJksgirLIZ3k3IA==", | ||
"_integrity": "sha512-KUMKlLqGASBH6x8YUGIjs9hbEP3X3wYzkrbcWO5SQq1u5rYfZ+cnSVY6sAAgEZumiCbn0QzkMYO4pOpv+xfDuQ==", | ||
"_location": "/@syncfusion/ej2-data", | ||
@@ -43,6 +43,6 @@ "_phantomChildren": {}, | ||
], | ||
"_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-data/-/ej2-data-28.2.11.tgz", | ||
"_shasum": "aedcd52b786a200a5a8737b9fcfa309c5e80bd43", | ||
"_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-release/@syncfusion/ej2-data/-/ej2-data-0.16.4.tgz", | ||
"_shasum": "2cfbd951b59b7fd29172a8c170667aa6e00716c6", | ||
"_spec": "@syncfusion/ej2-data@*", | ||
"_where": "/jenkins/workspace/elease-automation_release_28.1.1/packages/included", | ||
"_where": "/jenkins/workspace/elease-automation_release_29.1.1/packages/included", | ||
"author": { | ||
@@ -53,3 +53,3 @@ "name": "Syncfusion Inc." | ||
"dependencies": { | ||
"@syncfusion/ej2-base": "~28.2.12" | ||
"@syncfusion/ej2-base": "~29.1.33" | ||
}, | ||
@@ -65,5 +65,5 @@ "deprecated": false, | ||
"typings": "index.d.ts", | ||
"version": "28.2.12", | ||
"version": "29.1.33", | ||
"sideEffects": false, | ||
"homepage": "https://www.syncfusion.com/javascript-ui-controls" | ||
} |
import { Fetch } from '@syncfusion/ej2-base'; | ||
import { Aggregates } from './util'; | ||
import { Query } from './query'; | ||
import { Requests } from './adaptors'; | ||
/** | ||
@@ -28,2 +29,8 @@ * DataManager is used to manage and manipulate relational data. | ||
private fetchReqOption; | ||
private guidId; | ||
private previousCacheQuery; | ||
private isEnableCache; | ||
private cacheQuery; | ||
/** @hidden */ | ||
currentViewData: ReturnOption; | ||
/** | ||
@@ -78,2 +85,5 @@ * Constructor for DataManager class | ||
executeQuery(query: Query | Function, done?: Function, fail?: Function, always?: Function): Promise<Response>; | ||
protected getQueryRequest(query: Query): Requests; | ||
private generateKey; | ||
private processQuery; | ||
private static getDeferedArgs; | ||
@@ -83,2 +93,28 @@ private static nextTick; | ||
private makeRequest; | ||
/** | ||
* @param {Error} e - specifies the string | ||
* @param {Deferred} deffered - specifies the deffered | ||
* @param {RequestOptions} args - specifies the RequestOptions | ||
* @hidden | ||
*/ | ||
dataManagerFailure(e: Error, deffered: Deferred, args?: RequestOptions): void; | ||
private afterReponseRequest; | ||
/** | ||
* Processes the middleware stack after receiving the response. | ||
* @param {Response} response - The response object. | ||
* @returns {Response} - The potentially modified response. | ||
*/ | ||
applyPostRequestMiddlewares(response: string | Object): Promise<Object>; | ||
/** | ||
* Registers a new middleware in the DataManager. | ||
* @param {Middleware} middleware - The middleware instance to register. | ||
* @returns {void} | ||
*/ | ||
useMiddleware(request: Object): Promise<Object>; | ||
/** | ||
* Processes the middleware stack before sending the request. | ||
* @param {Request} request - The request object. | ||
* @returns {Request} - The potentially modified request. | ||
*/ | ||
applyPreRequestMiddlewares(request: Object): Promise<Object>; | ||
private beforeSend; | ||
@@ -172,2 +208,3 @@ /** | ||
data?: JSON; | ||
enableCache?: boolean; | ||
timeTillExpiration?: number; | ||
@@ -216,3 +253,3 @@ cachingPageSize?: number; | ||
virtualSelectRecords?: Object; | ||
error?: string; | ||
error?: string | Error; | ||
} | ||
@@ -219,0 +256,0 @@ /** |
@@ -0,1 +1,36 @@ | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __generator = (this && this.__generator) || function (thisArg, body) { | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [op[0] & 2, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
}; | ||
/* eslint-disable valid-jsdoc */ | ||
@@ -32,3 +67,5 @@ /* eslint-disable security/detect-object-injection */ | ||
this.requests = []; | ||
this.isEnableCache = false; | ||
this.isInitialLoad = true; | ||
this.isEnableCache = false; | ||
if (!dataSource && !this.dataSource) { | ||
@@ -72,2 +109,3 @@ dataSource = []; | ||
data: dataSource.data, | ||
enableCache: dataSource.enableCache, | ||
timeTillExpiration: dataSource.timeTillExpiration, | ||
@@ -99,2 +137,3 @@ cachingPageSize: dataSource.cachingPageSize, | ||
} | ||
this.isEnableCache = data.enableCache; | ||
this.dataSource = data; | ||
@@ -124,2 +163,7 @@ this.defaultQuery = query; | ||
this.adaptor = adaptor || this.adaptor; | ||
if (this.isEnableCache) { | ||
this.guidId = DataUtil.getGuid('cacheAdaptor'); | ||
var obj = { keys: [], results: [] }; | ||
window.localStorage.setItem(this.guidId, JSON.stringify(obj)); | ||
} | ||
if (data.enableCaching) { | ||
@@ -274,3 +318,3 @@ this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize); | ||
|| (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isCustomDataAdaptor(this.adaptor)) { | ||
var result = this.adaptor.processQuery(this, query); | ||
var result = this.isEnableCache ? this.processQuery(query) : this.adaptor.processQuery(this, query); | ||
if (!isNullOrUndefined(this.adaptor[makeRequest])) { | ||
@@ -303,2 +347,58 @@ this.adaptor[makeRequest](result, deffered, args, query); | ||
}; | ||
DataManager.prototype.getQueryRequest = function (query) { | ||
var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] }; | ||
req.sorts = Query.filterQueries(query.queries, 'onSortBy'); | ||
req.groups = Query.filterQueries(query.queries, 'onGroup'); | ||
req.filters = Query.filterQueries(query.queries, 'onWhere'); | ||
req.searches = Query.filterQueries(query.queries, 'onSearch'); | ||
req.aggregates = Query.filterQueries(query.queries, 'onAggregates'); | ||
return req; | ||
}; | ||
DataManager.prototype.generateKey = function (url, query) { | ||
var queries = this.getQueryRequest(query); | ||
var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']); | ||
var key = url; | ||
var page = 'onPage'; | ||
queries.sorts.forEach(function (obj) { | ||
key += obj.e.direction + obj.e.fieldName; | ||
}); | ||
queries.groups.forEach(function (obj) { | ||
key += obj.e.fieldName; | ||
}); | ||
queries.searches.forEach(function (obj) { | ||
key += obj.e.searchKey; | ||
}); | ||
for (var filter = 0; filter < queries.filters.length; filter++) { | ||
var currentFilter = queries.filters[filter]; | ||
if (currentFilter.e.isComplex) { | ||
var newQuery = query.clone(); | ||
newQuery.queries = []; | ||
for (var i = 0; i < currentFilter.e.predicates.length; i++) { | ||
newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter }); | ||
} | ||
key += currentFilter.e.condition + this.generateKey(url, newQuery); | ||
} | ||
else { | ||
key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value; | ||
} | ||
} | ||
if (!isNullOrUndefined(this.previousCacheQuery) && this.previousCacheQuery !== key) { | ||
var obj = { keys: [], results: [] }; | ||
window.localStorage.setItem(this.guidId, JSON.stringify(obj)); | ||
} | ||
this.previousCacheQuery = key; | ||
if (page in singles) { | ||
key += singles[page].pageIndex; | ||
} | ||
return key; | ||
}; | ||
DataManager.prototype.processQuery = function (query) { | ||
var key = this.generateKey(this.dataSource.url, query); | ||
var cachedItems = JSON.parse(window.localStorage.getItem(this.guidId)); | ||
var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null; | ||
if (data != null) { | ||
return DataUtil.parse.parseJson(data); | ||
} | ||
return this.adaptor.processQuery(this, query); | ||
}; | ||
DataManager.getDeferedArgs = function (query, result, args) { | ||
@@ -378,32 +478,57 @@ if (query.isCountRequired) { | ||
} | ||
if (request.contentType.indexOf('xml') === -1 && _this.dateParse) { | ||
if (request.contentType.indexOf('xml') === -1 && _this.dateParse && !_this.isEnableCache) { | ||
data = DataUtil.parse.parseJson(data); | ||
} | ||
var result = _this.adaptor.processResponse(data, _this, query, request.fetchRequest, request); | ||
var count = 0; | ||
var aggregates = null; | ||
var virtualSelectRecords = 'virtualSelectRecords'; | ||
var virtualRecords = data[virtualSelectRecords]; | ||
if (query.isCountRequired) { | ||
count = result.count; | ||
aggregates = result.aggregates; | ||
result = result.result; | ||
} | ||
if (!query.subQuery) { | ||
process(result, count, request.fetchRequest, request.type, data, aggregates, virtualRecords); | ||
return; | ||
} | ||
if (!isSelector) { | ||
fnQueryChild(result, request); | ||
} | ||
var result; | ||
var promise = _this.afterReponseRequest(data); | ||
promise.then(function (data) { | ||
result = _this.adaptor.processResponse(data, _this, query, request.fetchRequest, request); | ||
if (_this.isEnableCache) { | ||
/* eslint-enable prefer-spread */ | ||
var key = query ? _this.generateKey(_this.dataSource.url, query) : _this.dataSource.url; | ||
var obj = {}; | ||
obj = JSON.parse(window.localStorage.getItem(_this.guidId)); | ||
var index = obj.keys.indexOf(key); | ||
if (index !== -1) { | ||
obj.results.splice(index, 1); | ||
obj.keys.splice(index, 1); | ||
} | ||
obj.results[obj.keys.push(key) - 1] = { keys: key, result: result.result, timeStamp: new Date(), count: result.count }; | ||
window.localStorage.setItem(_this.guidId, JSON.stringify(obj)); | ||
} | ||
if (request.contentType.indexOf('xml') === -1 && _this.dateParse && _this.isEnableCache) { | ||
result = DataUtil.parse.parseJson(result); | ||
} | ||
var count = 0; | ||
var aggregates = null; | ||
var virtualSelectRecords = 'virtualSelectRecords'; | ||
var virtualRecords = data[virtualSelectRecords]; | ||
if (query.isCountRequired) { | ||
count = result.count; | ||
aggregates = result.aggregates; | ||
result = result.result; | ||
} | ||
if (!query.subQuery) { | ||
process(result, count, request.fetchRequest, request.type, data, aggregates, virtualRecords); | ||
return; | ||
} | ||
if (!isSelector) { | ||
fnQueryChild(result, request); | ||
} | ||
; | ||
}).catch(function (e) { return _this.dataManagerFailure(e, deffered, args); }); | ||
}; | ||
var req = this.extendRequest(url, fnSuccess, fnFail); | ||
if (!this.isCustomDataAdaptor(this.adaptor)) { | ||
var fetch_1 = new Fetch(req); | ||
fetch_1.beforeSend = function () { | ||
_this.beforeSend(fetch_1.fetchRequest, fetch_1); | ||
}; | ||
req = fetch_1.send(); | ||
req.catch(function (e) { return true; }); // to handle failure remote requests. | ||
this.requests.push(fetch_1); | ||
var promise = this.useMiddleware(req); | ||
var fetch_1; | ||
promise.then(function (response) { | ||
fetch_1 = new Fetch(req); | ||
fetch_1.beforeSend = function () { | ||
_this.beforeSend(fetch_1.fetchRequest, fetch_1, response); | ||
}; | ||
req = fetch_1.send(); | ||
req.catch(function (e) { return true; }); | ||
_this.requests.push(fetch_1); | ||
}).catch(function (e) { return _this.dataManagerFailure(e, deffered, args); }); | ||
} | ||
@@ -452,6 +577,81 @@ else { | ||
}; | ||
DataManager.prototype.beforeSend = function (request, settings) { | ||
/** | ||
* @param {Error} e - specifies the string | ||
* @param {Deferred} deffered - specifies the deffered | ||
* @param {RequestOptions} args - specifies the RequestOptions | ||
* @hidden | ||
*/ | ||
DataManager.prototype.dataManagerFailure = function (e, deffered, args) { | ||
args.error = e; | ||
deffered.reject(args); | ||
}; | ||
DataManager.prototype.afterReponseRequest = function (data) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var reponse, deffered; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, this.applyPostRequestMiddlewares(data)]; | ||
case 1: | ||
reponse = _a.sent(); | ||
deffered = new Deferred(); | ||
deffered.resolve(reponse); | ||
return [2 /*return*/, deffered.promise]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Processes the middleware stack after receiving the response. | ||
* @param {Response} response - The response object. | ||
* @returns {Response} - The potentially modified response. | ||
*/ | ||
DataManager.prototype.applyPostRequestMiddlewares = function (response) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
return [2 /*return*/, response]; | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Registers a new middleware in the DataManager. | ||
* @param {Middleware} middleware - The middleware instance to register. | ||
* @returns {void} | ||
*/ | ||
DataManager.prototype.useMiddleware = function (request) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var reponse, deffered; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: return [4 /*yield*/, this.applyPreRequestMiddlewares(request)]; | ||
case 1: | ||
reponse = _a.sent(); | ||
deffered = new Deferred(); | ||
deffered.resolve(reponse); | ||
return [2 /*return*/, deffered.promise]; | ||
} | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Processes the middleware stack before sending the request. | ||
* @param {Request} request - The request object. | ||
* @returns {Request} - The potentially modified request. | ||
*/ | ||
DataManager.prototype.applyPreRequestMiddlewares = function (request) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
return __generator(this, function (_a) { | ||
return [2 /*return*/, request]; | ||
}); | ||
}); | ||
}; | ||
DataManager.prototype.beforeSend = function (request, settings, response) { | ||
this.adaptor.beforeSend(this, request, settings); | ||
var headers = this.dataSource.headers; | ||
var headers = []; | ||
if (this.dataSource.headers) { | ||
headers = headers.concat(this.dataSource.headers); | ||
} | ||
var props; | ||
if (response && response.headers) { | ||
headers = headers.concat(response.headers); | ||
} | ||
for (var i = 0; headers && i < headers.length; i++) { | ||
@@ -590,2 +790,5 @@ props = []; | ||
} | ||
if (this.isEnableCache) { | ||
this.cacheQuery = this.generateKey(this.dataSource.url, query); | ||
} | ||
var res = this.adaptor.update(this, keyField, value, tableName, query, original); | ||
@@ -630,2 +833,23 @@ var dofetchRequest = 'dofetchRequest'; | ||
} | ||
if (this.isEnableCache) { | ||
var requests = JSON.parse(request.data); | ||
if (requests.action === 'insert' || requests.action === 'remove') { | ||
var obj = { keys: [], results: [] }; | ||
window.localStorage.setItem(this.guidId, JSON.stringify(obj)); | ||
} | ||
else if (requests.action === 'update') { | ||
var cachedItems = JSON.parse(window.localStorage.getItem(this.guidId)); | ||
var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(this.cacheQuery)] : null; | ||
if (data && data.result) { | ||
var cacheData = data.result; | ||
for (var i = 0; i < cacheData.length; i++) { | ||
if (cacheData[i][requests.keyColumn] === requests.key) { | ||
cacheData[i] = requests.value; | ||
window.localStorage.setItem(this.guidId, JSON.stringify(cachedItems)); | ||
break; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.fetchRequest, request, changes); | ||
@@ -635,2 +859,5 @@ this.fetchDeffered.resolve(record); | ||
DataManager.prototype.failureFunc = function (e) { | ||
if (this.isEnableCache) { | ||
this.cacheQuery = ''; | ||
} | ||
this.fetchDeffered.reject([{ error: e }]); | ||
@@ -637,0 +864,0 @@ }; |
@@ -254,3 +254,3 @@ import { DataManager } from './manager'; | ||
/** @hidden */ | ||
value: string | number | Date | boolean | Predicate | Predicate[] | null; | ||
value: string | number | Date | boolean | Predicate | Predicate[] | (string | number | boolean | Date)[] | null; | ||
/** @hidden */ | ||
@@ -270,3 +270,3 @@ condition: string; | ||
comparer: Function; | ||
[x: string]: string | number | Date | boolean | Predicate | Predicate[] | Function | null; | ||
[x: string]: string | number | Date | boolean | Predicate | Predicate[] | Function | (string | number | boolean | Date)[] | null; | ||
/** | ||
@@ -277,3 +277,3 @@ * Constructor for Predicate class. | ||
* @param {string} operator | ||
* @param {string|number|boolean|Predicate|Predicate[]} value | ||
* @param {string | number | Date | boolean | Predicate | Predicate[] | (string | number | boolean | Date)[] | null} value | ||
* @param {boolean=false} ignoreCase | ||
@@ -284,3 +284,3 @@ * @param ignoreAccent | ||
*/ | ||
constructor(field: string | Predicate, operator: string, value: string | number | Date | boolean | Predicate | Predicate[] | null, ignoreCase?: boolean, ignoreAccent?: boolean, matchCase?: boolean); | ||
constructor(field: string | Predicate, operator: string, value: string | number | Date | boolean | Predicate | Predicate[] | (string | number | boolean | Date)[] | null, ignoreCase?: boolean, ignoreAccent?: boolean, matchCase?: boolean); | ||
/** | ||
@@ -404,3 +404,3 @@ * Adds n-number of new predicates on existing predicate with “and” condition. | ||
key?: string; | ||
value?: string | number | Date | boolean | Predicate | Predicate[]; | ||
value?: string | number | Date | boolean | Predicate | Predicate[] | (string | number | boolean | Date)[]; | ||
isComplex?: boolean; | ||
@@ -407,0 +407,0 @@ predicates?: Predicate[]; |
@@ -476,3 +476,3 @@ /* eslint-disable valid-jsdoc */ | ||
* @param {string} operator | ||
* @param {string|number|boolean|Predicate|Predicate[]} value | ||
* @param {string | number | Date | boolean | Predicate | Predicate[] | (string | number | boolean | Date)[] | null} value | ||
* @param {boolean=false} ignoreCase | ||
@@ -479,0 +479,0 @@ * @param ignoreAccent |
@@ -186,8 +186,9 @@ import { DataManager } from './manager'; | ||
* | ||
* @param {Object[]} ds - Defines the input data. | ||
* @param {Object[]} dataSource - Defines the input data. | ||
* @param {string} field - Defines the field to be sorted. | ||
* @param {Function} comparer - Defines the comparer function used to sort the records. | ||
*/ | ||
static sort(ds: Object[], field: string, comparer: Function): Object[]; | ||
static ignoreDiacritics(value: string | number | boolean): string | Object; | ||
static sort(dataSource: Object[], field: string, comparer: Function): Object[]; | ||
static ignoreDiacritics(value: string | number | Date | boolean): string | Object; | ||
static ignoreDiacriticsForArrays(valueArray: Array<string | number | Date>): Array<string | number>; | ||
private static merge; | ||
@@ -361,2 +362,4 @@ private static getVal; | ||
processOperator?: Function; | ||
in?: Function; | ||
notin?: Function; | ||
} | ||
@@ -363,0 +366,0 @@ /** |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
2830678
6.08%23514
3.92%+ Added
+ Added
- Removed
- Removed