@@ -1891,6 +1891,15 @@ class Interval {
18911891 }
18921892 return logic_1.ThreeValuedLogic.and(lowFn(this.low, item, precision), highFn(this.high, item, precision));
18931893 }
1894+ properContains(item, precision) {
1895+ if (item == null) {
1896+ return null;
1897+ }
1898+ else if (item.isInterval) {
1899+ throw new Error('Argument to contains must be a point');
1900+ }
1901+ return logic_1.ThreeValuedLogic.and(cmp.lessThan(this.start(), item, precision), cmp.greaterThan(this.end(), item, precision));
1902+ }
18941903 properlyIncludes(other, precision) {
18951904 if (other == null || !other.isInterval) {
18961905 throw new Error('Argument to properlyIncludes must be an interval');
@@ -4800,7 +4809,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
48004809 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
48014810};
48024811Object.defineProperty(exports, "__esModule", { value: true });
4803- exports.doContains = exports.doExcept = exports.doIncludes = exports.doIntersect = exports.doProperIncludes = exports.doAfter = exports.doUnion = exports.doBefore = void 0;
4812+ exports.doProperContains = exports. doContains = exports.doExcept = exports.doIncludes = exports.doIntersect = exports.doProperIncludes = exports.doAfter = exports.doUnion = exports.doBefore = void 0;
48044813__exportStar(require("./expression"), exports);
48054814__exportStar(require("./aggregate"), exports);
48064815__exportStar(require("./arithmetic"), exports);
@@ -4839,6 +4848,7 @@ Object.defineProperty(exports, "doIntersect", { enumerable: true, get: function
48394848Object.defineProperty(exports, "doIncludes", { enumerable: true, get: function () { return interval_1.doIncludes; } });
48404849Object.defineProperty(exports, "doExcept", { enumerable: true, get: function () { return interval_1.doExcept; } });
48414850Object.defineProperty(exports, "doContains", { enumerable: true, get: function () { return interval_1.doContains; } });
4851+ Object.defineProperty(exports, "doProperContains", { enumerable: true, get: function () { return interval_1.doProperContains; } });
48424852
48434853},{"./aggregate":15,"./arithmetic":16,"./clinical":18,"./comparison":19,"./conditional":20,"./datetime":21,"./declaration":22,"./expression":23,"./external":25,"./instance":26,"./interval":27,"./list":29,"./literal":30,"./logical":31,"./message":32,"./nullological":33,"./overloaded":34,"./parameters":35,"./quantity":36,"./query":37,"./ratio":38,"./reusable":39,"./string":40,"./structured":41,"./type":42}],25:[function(require,module,exports){
48444854"use strict";
@@ -4991,6 +5001,7 @@ var __importStar = (this && this.__importStar) || (function () {
49915001Object.defineProperty(exports, "__esModule", { value: true });
49925002exports.Collapse = exports.Expand = exports.Ends = exports.Starts = exports.End = exports.Start = exports.Size = exports.Width = exports.OverlapsBefore = exports.OverlapsAfter = exports.Overlaps = exports.MeetsBefore = exports.MeetsAfter = exports.Meets = exports.Interval = void 0;
49935003exports.doContains = doContains;
5004+ exports.doProperContains = doProperContains;
49945005exports.doIncludes = doIncludes;
49955006exports.doProperIncludes = doProperIncludes;
49965007exports.doAfter = doAfter;
@@ -5050,6 +5061,10 @@ exports.Interval = Interval;
50505061function doContains(interval, item, precision) {
50515062 return interval.contains(item, precision);
50525063}
5064+ // Delegated to by overloaded#ProperContains and overloaded#ProperIn
5065+ function doProperContains(interval, item, precision) {
5066+ return interval.properContains(item, precision);
5067+ }
50535068// Delegated to by overloaded#Includes and overloaded#IncludedIn
50545069function doIncludes(interval, subinterval, precision) {
50555070 return interval.includes(subinterval, precision);
@@ -5861,6 +5876,7 @@ exports.doUnion = doUnion;
58615876exports.doExcept = doExcept;
58625877exports.doIntersect = doIntersect;
58635878exports.doContains = doContains;
5879+ exports.doProperContains = doProperContains;
58645880exports.doIncludes = doIncludes;
58655881exports.doProperIncludes = doProperIncludes;
58665882const immutable_1 = require("immutable");
@@ -5990,6 +6006,15 @@ exports.IndexOf = IndexOf;
59906006function doContains(container, item) {
59916007 return container.some((element) => (0, comparison_1.equals)(element, item) || (element == null && item == null));
59926008}
6009+ // Delegated to by overloaded#ProperContains and overloaded#ProperIn
6010+ function doProperContains(container, item) {
6011+ // The "proper" membership operators have list semantics, not set semantics.
6012+ // The intent here is that given list semantics and a `distinct` operator,
6013+ // one can achieve set semantics, but the reverse isn't possible.
6014+ // These proper membership operators can then be described as
6015+ // the regular membership operators, plus the list is strictly larger.
6016+ return container.length > 1 && doContains(container, item);
6017+ }
59936018// Delegated to by overloaded#Includes and overloaded@IncludedIn
59946019function doIncludes(list, sublist) {
59956020 if (list == null || sublist == null) {
@@ -6427,7 +6452,7 @@ var __importStar = (this && this.__importStar) || (function () {
64276452 };
64286453})();
64296454Object.defineProperty(exports, "__esModule", { value: true });
6430- exports.Precision = exports.SameOrBefore = exports.SameOrAfter = exports.SameAs = exports.Before = exports.After = exports.Length = exports.ProperIncludedIn = exports.ProperIncludes = exports.IncludedIn = exports.Includes = exports.Contains = exports.In = exports.Indexer = exports.Intersect = exports.Except = exports.Union = exports.NotEqual = exports.Equivalent = exports.Equal = void 0;
6455+ exports.Precision = exports.SameOrBefore = exports.SameOrAfter = exports.SameAs = exports.Before = exports.After = exports.Length = exports.ProperContains = exports.ProperIn = exports. ProperIncludedIn = exports.ProperIncludes = exports.IncludedIn = exports.Includes = exports.Contains = exports.In = exports.Indexer = exports.Intersect = exports.Except = exports.Union = exports.NotEqual = exports.Equivalent = exports.Equal = void 0;
64316456/* eslint-disable @typescript-eslint/ban-ts-comment */
64326457const expression_1 = require("./expression");
64336458const logic_1 = require("../datatypes/logic");
@@ -6675,6 +6700,44 @@ class ProperIncludedIn extends expression_1.Expression {
66756700 }
66766701}
66776702exports.ProperIncludedIn = ProperIncludedIn;
6703+ class ProperIn extends expression_1.Expression {
6704+ constructor(json) {
6705+ super(json);
6706+ this.precision = json.precision != null ? json.precision.toLowerCase() : undefined;
6707+ }
6708+ async exec(ctx) {
6709+ const [item, container] = await this.execArgs(ctx);
6710+ if (container == null) {
6711+ return false;
6712+ }
6713+ if ((0, util_1.typeIsArray)(container)) {
6714+ return LIST.doProperContains(container, item);
6715+ }
6716+ else {
6717+ return IVL.doProperContains(container, item, this.precision);
6718+ }
6719+ }
6720+ }
6721+ exports.ProperIn = ProperIn;
6722+ class ProperContains extends expression_1.Expression {
6723+ constructor(json) {
6724+ super(json);
6725+ this.precision = json.precision != null ? json.precision.toLowerCase() : undefined;
6726+ }
6727+ async exec(ctx) {
6728+ const [container, item] = await this.execArgs(ctx);
6729+ if (container == null) {
6730+ return false;
6731+ }
6732+ if ((0, util_1.typeIsArray)(container)) {
6733+ return LIST.doProperContains(container, item);
6734+ }
6735+ else {
6736+ return IVL.doProperContains(container, item, this.precision);
6737+ }
6738+ }
6739+ }
6740+ exports.ProperContains = ProperContains;
66786741class Length extends expression_1.Expression {
66796742 constructor(json) {
66806743 super(json);
0 commit comments