Socket
Socket
Sign inDemoInstall

ts-pattern

Package Overview
Dependencies
Maintainers
1
Versions
151
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-pattern - npm Package Compare versions

Comparing version 3.1.4 to 3.1.5

137

lib/index.js

@@ -37,2 +37,3 @@ "use strict";

exports.not = not;
var ANONYMOUS_SELECT_KEY = '@ts-pattern/__anonymous-select-key';
function select(key) {

@@ -104,5 +105,9 @@ return key === undefined

}
var selected = {};
var doesMatch = function (value) {
return Boolean(patterns.some(function (pattern) { return matchPattern(pattern, value); }) &&
predicates.every(function (predicate) { return predicate(value); }));
return Boolean(patterns.some(function (pattern) {
return matchPattern(pattern, value, function (key, value) {
selected[key] = value;
});
}) && predicates.every(function (predicate) { return predicate(value); }));
};

@@ -114,4 +119,6 @@ return builder(value, cases.concat([

select: function (value) {
return patterns.length === 1
? selectWithPattern(patterns[0], value)
return Object.keys(selected).length
? selected[ANONYMOUS_SELECT_KEY] !== undefined
? selected[ANONYMOUS_SELECT_KEY]
: selected
: value;

@@ -170,7 +177,13 @@ },

// tells us if the value matches a given pattern.
var matchPattern = function (pattern, value) {
if (pattern === PatternType_1.__ ||
isNamedSelectPattern(pattern) ||
isAnonymousSelectPattern(pattern))
var matchPattern = function (pattern, value, select) {
if (pattern === PatternType_1.__)
return true;
if (isNamedSelectPattern(pattern)) {
select(pattern['@ts-pattern/__key'], value);
return true;
}
if (isAnonymousSelectPattern(pattern)) {
select(ANONYMOUS_SELECT_KEY, value);
return true;
}
if (pattern === PatternType_1.__.string)

@@ -186,13 +199,26 @@ return typeof value === 'string';

if (isNotPattern(pattern))
return !matchPattern(pattern['@ts-pattern/__pattern'], value);
if (isListPattern(pattern))
return Array.isArray(value)
? value.every(function (v) { return matchPattern(pattern[0], v); })
: false;
return !matchPattern(pattern['@ts-pattern/__pattern'], value, select);
if (typeof pattern !== typeof value)
return false;
if (isObject(pattern)) {
if (isListPattern(pattern)) {
if (!Array.isArray(value))
return false;
var selected_1 = {};
var listSelect_1 = function (key, value) {
selected_1[key] = (selected_1[key] || []).concat([value]);
};
var doesMatch = value.every(function (v) {
return matchPattern(pattern[0], v, listSelect_1);
});
if (doesMatch) {
Object.keys(selected_1).forEach(function (key) { return select(key, selected_1[key]); });
}
return doesMatch;
}
if (Array.isArray(pattern)) {
return Array.isArray(value) && pattern.length === value.length
? pattern.every(function (subPattern, i) { return matchPattern(subPattern, value[i]); })
? pattern.every(function (subPattern, i) {
return matchPattern(subPattern, value[i], select);
})
: false;

@@ -204,3 +230,3 @@ }

return __spreadArray([], __read(pattern.keys())).every(function (key) {
return matchPattern(pattern.get(key), value.get(key));
return matchPattern(pattern.get(key), value.get(key), select);
});

@@ -216,3 +242,3 @@ }

return Object.values(PatternType_1.__).includes(subPattern)
? matchPattern([subPattern], __spreadArray([], __read(value.values())))
? matchPattern([subPattern], __spreadArray([], __read(value.values())), select)
: value.has(subPattern);

@@ -225,4 +251,7 @@ }

return Object.keys(pattern).every(function (k) {
return matchPattern(
// @ts-ignore
return matchPattern(pattern[k], value[k]);
pattern[k],
// @ts-ignore
value[k], select);
});

@@ -232,75 +261,1 @@ }

};
var selectWithPattern = function (pattern, value) {
var positional = selectPositionalWithPattern(pattern, value);
var kwargs = selectKwargsWithPattern(pattern, value);
return positional.kind === 'some'
? positional.value
: Object.keys(kwargs).length
? kwargs
: value;
};
var none = { kind: 'none' };
var selectPositionalWithPattern = function (pattern, value) {
if (isAnonymousSelectPattern(pattern))
return { kind: 'some', value: value };
if (isObject(pattern) && isObject(value)) {
if (Array.isArray(value)) {
if (isListPattern(pattern)) {
return value.reduce(function (acc, item) {
var selection = selectPositionalWithPattern(pattern[0], item);
return selection.kind === 'none'
? acc
: acc.kind === 'none'
? { kind: 'some', value: [selection.value] }
: { kind: 'some', value: acc.value.concat([selection.value]) };
}, none);
}
if (Array.isArray(pattern)) {
return pattern.length <= value.length
? pattern.reduce(function (acc, subPattern, i) {
if (acc.kind === 'some')
return acc;
return selectPositionalWithPattern(subPattern, value[i]);
}, none)
: none;
}
}
return Object.keys(pattern).reduce(function (acc, k) {
if (acc.kind === 'some')
return acc;
// @ts-ignore
return selectPositionalWithPattern(pattern[k], value[k]);
}, none);
}
return none;
};
var selectKwargsWithPattern = function (pattern, value) {
var _a;
if (isNamedSelectPattern(pattern))
return _a = {}, _a[pattern['@ts-pattern/__key']] = value, _a;
if (isObject(pattern) && isObject(value)) {
if (Array.isArray(value)) {
if (isListPattern(pattern)) {
return value.reduce(function (acc, item) {
var selections = selectKwargsWithPattern(pattern[0], item);
return Object.keys(selections).reduce(function (acc, key) {
acc[key] = (acc[key] || []).concat([selections[key]]);
return acc;
}, acc);
}, {});
}
if (Array.isArray(pattern)) {
return pattern.length <= value.length
? pattern.reduce(function (acc, subPattern, i) {
return Object.assign(acc, selectKwargsWithPattern(subPattern, value[i]));
}, {})
: {};
}
}
return Object.keys(pattern).reduce(function (acc, k) {
// @ts-ignore
return Object.assign(acc, selectKwargsWithPattern(pattern[k], value[k]));
}, {});
}
return {};
};
{
"name": "ts-pattern",
"version": "3.1.4",
"version": "3.1.5",
"description": "Typescript pattern matching library",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc