Socket
Socket
Sign inDemoInstall

@effect/query

Package Overview
Dependencies
2
Maintainers
3
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.0 to 0.3.0

4

internal_effect_untraced/cache.js

@@ -28,6 +28,6 @@ "use strict";

get(request) {
return Debug.bodyWithTrace(trace => (0, _Function.pipe)(Effect.map(Ref.get(this.state), state => HashMap.get(state, request)), Effect.some, Effect.orElseFail(_Function.constVoid)).traced(trace));
return Debug.bodyWithTrace(trace => Effect.orElseFail(_Function.constVoid)(Effect.some(Effect.map(Ref.get(this.state), state => HashMap.get(state, request)))).traced(trace));
}
lookup(request) {
return Debug.bodyWithTrace(trace => Effect.flatMap(Ref.make(Option.none()), ref => Ref.modify(this.state, state => (0, _Function.pipe)(HashMap.get(state, request), Option.match(() => [Either.left(ref), HashMap.set(state, request, ref)], ref => [Either.right(ref), state])))).traced(trace));
return Debug.bodyWithTrace(trace => Effect.flatMap(Ref.make(Option.none()), ref => Ref.modify(this.state, state => Option.match(() => [Either.left(ref), HashMap.set(state, request, ref)], ref => [Either.right(ref), state])(HashMap.get(state, request)))).traced(trace));
}

@@ -34,0 +34,0 @@ set(request, result) {

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

var Equal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Equal"));
var _Function = /*#__PURE__*/require("@effect/data/Function");
var Hash = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Hash"));

@@ -47,3 +46,3 @@ var Cause = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/io/Cause"));

exports.isDataSource = isDataSource;
const make = /*#__PURE__*/Debug.untracedMethod(restore => (identifier, runAll) => new DataSourceImpl(identifier, requests => Effect.suspendSucceed(() => {
const make = /*#__PURE__*/Debug.untracedMethod(restore => (identifier, runAll) => new DataSourceImpl(identifier, requests => Effect.suspend(() => {
const map = completedRequestMap.empty();

@@ -60,3 +59,3 @@ return Effect.as(Effect.provideService(completedRequestMap.Tag, map)(restore(runAll)(requests)), map);

const innerMap = completedRequestMap.empty();
return (0, _Function.pipe)(restore(run)(newRequests), Effect.provideService(completedRequestMap.Tag, innerMap), Effect.map(() => completedRequestMap.combine(outerMap, innerMap)));
return Effect.map(() => completedRequestMap.combine(outerMap, innerMap))(Effect.provideService(completedRequestMap.Tag, innerMap)(restore(run)(newRequests)));
})));

@@ -71,3 +70,3 @@ /** @internal */

exports.batchN = batchN;
const contramap = /*#__PURE__*/Debug.untracedDual(2, restore => (self, f) => new DataSourceImpl(`${self.identifier}.contramap(${f.description})`, requests => restore(self.runAll)((0, _Function.pipe)(requests, Chunk.map(Chunk.map(restore(f.value)))))));
const contramap = /*#__PURE__*/Debug.untracedDual(2, restore => (self, f) => new DataSourceImpl(`${self.identifier}.contramap(${f.description})`, requests => restore(self.runAll)(Chunk.map(Chunk.map(restore(f.value)))(requests))));
/** @internal */

@@ -81,11 +80,11 @@ exports.contramap = contramap;

exports.contramapEffect = contramapEffect;
const eitherWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new DataSourceImpl(`${self.identifier}.eitherWith(${that.identifier})(${f.description})`, batch => (0, _Function.pipe)(Effect.forEach(batch, requests => {
const [as, bs] = (0, _Function.pipe)(requests, Chunk.partitionMap(restore(f.value)));
const eitherWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new DataSourceImpl(`${self.identifier}.eitherWith(${that.identifier})(${f.description})`, batch => Effect.map(Chunk.reduce(completedRequestMap.empty(), (acc, curr) => completedRequestMap.combine(acc, curr)))(Effect.forEach(batch, requests => {
const [as, bs] = Chunk.partitionMap(restore(f.value))(requests);
return Effect.zipWithPar(restore(self.runAll)(Chunk.of(as)), restore(that.runAll)(Chunk.of(bs)), (self, that) => completedRequestMap.combine(self, that));
}), Effect.map(Chunk.reduce(completedRequestMap.empty(), (acc, curr) => completedRequestMap.combine(acc, curr))))));
}))));
/** @internal */
exports.eitherWith = eitherWith;
const fromFunction = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWith(completedRequestMap.Tag, map => (0, _Function.pipe)(requests, Chunk.forEach(request => completedRequestMap.set(map, request,
const fromFunction = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWith(completedRequestMap.Tag, map => Chunk.forEach(request => completedRequestMap.set(map, request,
// @ts-expect-error
Either.right(restore(f)(request))))))));
Either.right(restore(f)(request))))(requests))));
/** @internal */

@@ -96,3 +95,3 @@ exports.fromFunction = fromFunction;

exports.fromFunctionBatched = fromFunctionBatched;
const fromFunctionBatchedEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWith(completedRequestMap.Tag, map => (0, _Function.pipe)(Effect.match(restore(f)(requests), e => (0, _Function.pipe)(requests, Chunk.map(k => [k, Either.left(e)])), bs => (0, _Function.pipe)(requests, Chunk.zip((0, _Function.pipe)(bs, Chunk.map(Either.right))))), Effect.map(Chunk.forEach(([k, v]) => completedRequestMap.set(map, k, v)))))));
const fromFunctionBatchedEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWith(completedRequestMap.Tag, map => Effect.map(Chunk.forEach(([k, v]) => completedRequestMap.set(map, k, v)))(Effect.match(restore(f)(requests), e => Chunk.map(k => [k, Either.left(e)])(requests), bs => Chunk.zip(Chunk.map(Either.right)(bs))(requests))))));
/** @internal */

@@ -103,3 +102,3 @@ exports.fromFunctionBatchedEffect = fromFunctionBatchedEffect;

exports.fromFunctionBatchedOption = fromFunctionBatchedOption;
const fromFunctionBatchedOptionEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWithEffect(completedRequestMap.Tag, map => Effect.map(Effect.match(restore(f)(requests), e => (0, _Function.pipe)(requests, Chunk.map(k => [k, Either.left(e)])), bs => (0, _Function.pipe)(requests, Chunk.zip((0, _Function.pipe)(bs, Chunk.map(Either.right))))), Chunk.forEach(([k, v]) => completedRequestMap.setOption(map, k, v))))));
const fromFunctionBatchedOptionEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f) => makeBatched(name, requests => Effect.serviceWithEffect(completedRequestMap.Tag, map => Effect.map(Effect.match(restore(f)(requests), e => Chunk.map(k => [k, Either.left(e)])(requests), bs => Chunk.zip(Chunk.map(Either.right)(bs))(requests)), Chunk.forEach(([k, v]) => completedRequestMap.setOption(map, k, v))))));
/** @internal */

@@ -110,3 +109,3 @@ exports.fromFunctionBatchedOptionEffect = fromFunctionBatchedOptionEffect;

exports.fromFunctionBatchedWith = fromFunctionBatchedWith;
const fromFunctionBatchedWithEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f, g) => makeBatched(name, requests => Effect.serviceWithEffect(completedRequestMap.Tag, map => Effect.map(Effect.match(restore(f)(requests), e => (0, _Function.pipe)(requests, Chunk.map(k => [k, Either.left(e)])), bs => (0, _Function.pipe)(bs, Chunk.map(b => [restore(g)(b), Either.right(b)]))), Chunk.forEach(([k, v]) => completedRequestMap.set(map, k, v))))));
const fromFunctionBatchedWithEffect = /*#__PURE__*/Debug.untracedMethod(restore => (name, f, g) => makeBatched(name, requests => Effect.serviceWithEffect(completedRequestMap.Tag, map => Effect.map(Effect.match(restore(f)(requests), e => Chunk.map(k => [k, Either.left(e)])(requests), bs => Chunk.map(b => [restore(g)(b), Either.right(b)])(bs)), Chunk.forEach(([k, v]) => completedRequestMap.set(map, k, v))))));
/** @internal */

@@ -113,0 +112,0 @@ exports.fromFunctionBatchedWithEffect = fromFunctionBatchedWithEffect;

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

var Chunk = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Chunk"));
var _Function = /*#__PURE__*/require("@effect/data/Function");
var HashMap = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/HashMap"));

@@ -53,3 +52,3 @@ var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Option"));

exports.make = make;
const combine = (self, that) => new ParallelImpl(HashMap.reduceWithIndex(self.map, that.map, (map, value, key) => HashMap.set(map, key, (0, _Function.pipe)(HashMap.get(map, key), Option.match(() => value, Chunk.concat(value))))));
const combine = (self, that) => new ParallelImpl(HashMap.reduceWithIndex(self.map, that.map, (map, value, key) => HashMap.set(map, key, Option.match(() => value, Chunk.concat(value))(HashMap.get(map, key)))));
/**

@@ -56,0 +55,0 @@ * Returns `true` if this collection of requests is empty, `false` otherwise.

@@ -6,4 +6,4 @@ "use strict";

});
exports.zipParRight = exports.zipParLeft = exports.zipPar = exports.zipLeft = exports.zipBatchedRight = exports.zipBatchedLeft = exports.zipBatched = exports.zip = exports.unwrap = exports.unsandbox = exports.unright = exports.unrefineWith = exports.unrefine = exports.unoption = exports.unleft = exports.unit = exports.uncached = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.timed = exports.sync = exports.suspend = exports.summarized = exports.succeedSome = exports.succeedNone = exports.succeed = exports.someOrFail = exports.someOrElseEffect = exports.someOrElse = exports.some = exports.serviceWithQuery = exports.serviceWithEffect = exports.serviceWith = exports.service = exports.sandboxWith = exports.sandbox = exports.runLog = exports.runCache = exports.run = exports.right = exports.refineOrDieWith = exports.refineOrDie = exports.race = exports.provideSomeLayer = exports.provideLayer = exports.provideContext = exports.partitionQueryPar = exports.partitionQuery = exports.orDieWith = exports.orDie = exports.optional = exports.never = exports.maxBatchSize = exports.matchQuery = exports.matchCauseQuery = exports.match = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.mapDataSources = exports.mapBoth = exports.map = exports.left = exports.fromRequestUncached = exports.fromRequest = exports.fromOption = exports.fromEither = exports.fromEffect = exports.forEachPar = exports.forEachBatched = exports.forEach = exports.flatten = exports.flatMap = exports.failSync = exports.failCauseSync = exports.failCause = exports.fail = exports.ensuring = exports.either = exports.dieSync = exports.die = exports.contramapContext = exports.contextWithQuery = exports.contextWithEffect = exports.contextWith = exports.context = exports.collectAllPar = exports.collectAllBatched = exports.collectAll = exports.catchAllCause = exports.catchAll = exports.cached = exports.asUnit = exports.asSomeError = exports.as = exports.around = exports.absolve = exports.QueryTypeId = void 0;
exports.zipWithPar = exports.zipWithBatchedContinuation = exports.zipWithBatched = exports.zipWith = exports.zipRight = void 0;
exports.zipParLeft = exports.zipPar = exports.zipLeft = exports.zipBatchedRight = exports.zipBatchedLeft = exports.zipBatched = exports.zip = exports.unwrap = exports.unsandbox = exports.unright = exports.unrefineWith = exports.unrefine = exports.unoption = exports.unleft = exports.unit = exports.uncached = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.timed = exports.sync = exports.suspend = exports.summarized = exports.succeedSome = exports.succeedNone = exports.succeed = exports.someOrFail = exports.someOrElseEffect = exports.someOrElse = exports.some = exports.serviceWithQuery = exports.serviceWithEffect = exports.serviceWith = exports.service = exports.sandboxWith = exports.sandbox = exports.runLog = exports.runCache = exports.run = exports.right = exports.refineOrDieWith = exports.refineOrDie = exports.race = exports.provideSomeLayer = exports.provideLayer = exports.provideContext = exports.partitionQueryPar = exports.partitionQuery = exports.orDieWith = exports.orDie = exports.optional = exports.never = exports.maxBatchSize = exports.matchQuery = exports.matchCauseQuery = exports.match = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.mapDataSources = exports.mapBoth = exports.map = exports.left = exports.isQuery = exports.fromRequestUncached = exports.fromRequest = exports.fromOption = exports.fromEither = exports.fromEffect = exports.forEachPar = exports.forEachBatched = exports.forEach = exports.flatten = exports.flatMap = exports.failSync = exports.failCauseSync = exports.failCause = exports.fail = exports.ensuring = exports.either = exports.dieSync = exports.die = exports.contramapContext = exports.contextWithQuery = exports.contextWithEffect = exports.contextWith = exports.context = exports.collectAllPar = exports.collectAllBatched = exports.collectAll = exports.catchAllCause = exports.catchAll = exports.cached = exports.asUnit = exports.asSomeError = exports.as = exports.around = exports.absolve = exports.QueryTypeId = void 0;
exports.zipWithPar = exports.zipWithBatchedContinuation = exports.zipWithBatched = exports.zipWith = exports.zipRight = exports.zipParRight = void 0;
var Chunk = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Chunk"));

@@ -40,3 +40,3 @@ var Duration = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Duration"));

function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var _a, _b;
var _a;
/** @internal */

@@ -48,2 +48,5 @@ const QuerySymbolKey = "@effect/query/Query";

exports.QueryTypeId = QueryTypeId;
const isQuery = u => typeof u === "object" && u !== null && QueryTypeId in u;
/** @internal */
exports.isQuery = isQuery;
const queryVariance = {

@@ -56,10 +59,14 @@ _R: _ => _,

class QueryImpl {
constructor(step, trace) {
this.step = step;
this.trace = trace;
get [QueryTypeId]() {
return queryVariance;
}
constructor(i0, i1 = undefined, i2 = undefined) {
this.i0 = i0;
this.i1 = i1;
this.i2 = i2;
this._tag = "Commit";
this.trace = undefined;
this[_a] = queryVariance;
this[_b] = queryVariance;
}
[(_a = QueryTypeId, Equal.symbol)](that) {
[Equal.symbol](that) {
return this === that;

@@ -72,3 +79,3 @@ }

if (trace) {
return new QueryImpl(matchCauseQuery(this, failCause, succeed).step.traced(trace));
return new QueryImpl(matchCauseQuery(this, failCause, succeed).i0.traced(trace));
}

@@ -81,3 +88,3 @@ return this;

}
_b = Effect.EffectTypeId;
_a = Effect.EffectTypeId;
const cachingEnabled = /*#__PURE__*/FiberRef.unsafeMake(true);

@@ -101,3 +108,3 @@ const currentCache = /*#__PURE__*/FiberRef.unsafeMake( /*#__PURE__*/cache.unsafeMake());

exports.asUnit = asUnit;
const cached = /*#__PURE__*/Debug.untracedMethod(() => self => (0, _Function.pipe)(fromEffect(FiberRef.getAndSet(cachingEnabled, true)), flatMap(previous => ensuring(self, fromEffect(FiberRef.set(cachingEnabled, previous))))));
const cached = /*#__PURE__*/Debug.untracedMethod(() => self => flatMap(previous => ensuring(self, fromEffect(FiberRef.set(cachingEnabled, previous))))(fromEffect(FiberRef.getAndSet(cachingEnabled, true))));
/** @internal */

@@ -132,3 +139,3 @@ exports.cached = cached;

exports.contextWithQuery = contextWithQuery;
const contramapContext = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.contramapContext(Effect.map(self.step, result => contramapContextResult(result, f)), context => restore(f.value)(context)).traced(trace)));
const contramapContext = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.contramapContext(Effect.map(self.i0, result => contramapContextResult(result, f)), context => restore(f.value)(context)).traced(trace)));
/** @internal */

@@ -148,3 +155,3 @@ exports.contramapContext = contramapContext;

exports.ensuring = ensuring;
const fail = /*#__PURE__*/Debug.methodWithTrace(trace => error => new QueryImpl(Effect.succeed(Result.fail(Cause.fail(error))).traced(trace)));
const fail = /*#__PURE__*/Debug.methodWithTrace(trace => error => new QueryImpl(Effect.succeed(Result.fail(Cause.fail(error))).traced(trace), "Fail", error));
/** @internal */

@@ -161,3 +168,3 @@ exports.fail = fail;

exports.failCauseSync = failCauseSync;
const flatMap = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.flatMap(self.step, result => {
const flatMap = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.flatMap(self.i0, result => {
switch (result._tag) {

@@ -170,3 +177,3 @@ case "Blocked":

{
return restore(f)(result.value).step;
return restore(f)(result.value).i0;
}

@@ -192,3 +199,3 @@ case "Fail":

} else {
result = zipWith(result, restore(f)(next.value), (chunk, a) => (0, _Function.pipe)(chunk, Chunk.append(a)));
result = zipWith(result, restore(f)(next.value), (chunk, a) => Chunk.append(a)(chunk));
}

@@ -208,3 +215,3 @@ }

} else {
result = zipWithBatched(result, restore(f)(next.value), (chunk, a) => (0, _Function.pipe)(chunk, Chunk.append(a)));
result = zipWithBatched(result, restore(f)(next.value), (chunk, a) => Chunk.append(a)(chunk));
}

@@ -222,5 +229,5 @@ }

if (Chunk.size(chunk) === 1) {
return map(restore(f)((0, _Function.pipe)(chunk, Chunk.unsafeGet(0))), Chunk.of);
return map(restore(f)(Chunk.unsafeGet(0)(chunk)), Chunk.of);
}
return new QueryImpl(Effect.map(Effect.forEachPar(chunk, a => restore(f)(a).step), collectAllParResult));
return new QueryImpl(Effect.map(Effect.forEachPar(chunk, a => restore(f)(a).i0), collectAllParResult));
}));

@@ -247,3 +254,3 @@ /** @internal */

exports.left = left;
const map = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.map(self.step, result => mapResult(result, restore(f))).traced(trace)));
const map = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.map(self.i0, result => mapResult(result, restore(f))).traced(trace)));
/** @internal */

@@ -254,3 +261,3 @@ exports.map = map;

exports.mapBoth = mapBoth;
const mapDataSources = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.map(self.step, result => mapDataSourcesResult(result, restore(f))).traced(trace)));
const mapDataSources = /*#__PURE__*/Debug.dualWithTrace(2, (trace, restore) => (self, f) => new QueryImpl(Effect.map(self.i0, result => mapDataSourcesResult(result, restore(f))).traced(trace)));
/** @internal */

@@ -270,3 +277,3 @@ exports.mapDataSources = mapDataSources;

exports.match = match;
const matchCauseQuery = /*#__PURE__*/Debug.dualWithTrace(3, (trace, restore) => (self, onFailure, onSuccess) => new QueryImpl(Effect.matchCauseEffect(self.step, cause => restore(onFailure)(cause).step, result => {
const matchCauseQuery = /*#__PURE__*/Debug.dualWithTrace(3, (trace, restore) => (self, onFailure, onSuccess) => new QueryImpl(Effect.matchCauseEffect(self.i0, cause => restore(onFailure)(cause).i0, result => {
switch (result._tag) {

@@ -279,7 +286,7 @@ case "Blocked":

{
return restore(onSuccess)(result.value).step;
return restore(onSuccess)(result.value).i0;
}
case "Fail":
{
return restore(onFailure)(result.cause).step;
return restore(onFailure)(result.cause).i0;
}

@@ -290,3 +297,3 @@ }

exports.matchCauseQuery = matchCauseQuery;
const matchQuery = /*#__PURE__*/Debug.untracedDual(3, restore => (self, onFailure, onSuccess) => matchCauseQuery(self, cause => (0, _Function.pipe)(Cause.failureOrCause(cause), Either.match(restore(onFailure), a => failCause(a))), restore(onSuccess)));
const matchQuery = /*#__PURE__*/Debug.untracedDual(3, restore => (self, onFailure, onSuccess) => matchCauseQuery(self, cause => Either.match(restore(onFailure), a => failCause(a))(Cause.failureOrCause(cause)), restore(onSuccess)));
/** @internal */

@@ -300,3 +307,3 @@ exports.matchQuery = matchQuery;

exports.never = never;
const optional = /*#__PURE__*/Debug.untracedMethod(() => self => matchCauseQuery(self, cause => (0, _Function.pipe)(Cause.stripSomeDefects(cause, defect => queryFailure.isQueryFailure(defect) ? Option.some(void 0) : Option.none()), Option.match(succeedNone, failCause)), succeedSome));
const optional = /*#__PURE__*/Debug.untracedMethod(() => self => matchCauseQuery(self, cause => Option.match(succeedNone, failCause)(Cause.stripSomeDefects(cause, defect => queryFailure.isQueryFailure(defect) ? Option.some(void 0) : Option.none())), succeedSome));
/** @internal */

@@ -319,3 +326,3 @@ exports.optional = optional;

exports.provideContext = provideContext;
const provideLayer = /*#__PURE__*/Debug.dualWithTrace(2, trace => (self, layer) => new QueryImpl(Effect.scoped((0, _Function.pipe)(Effect.exit(Layer.build(layer.value)), Effect.flatMap(Exit.match(e => Effect.succeed(Result.fail(e)), c => provideContext(self, described.make(c, layer.description)).step)))).traced(trace)));
const provideLayer = /*#__PURE__*/Debug.dualWithTrace(2, trace => (self, layer) => new QueryImpl(Effect.scoped(Effect.flatMap(Exit.match(e => Effect.succeed(Result.fail(e)), c => provideContext(self, described.make(c, layer.description)).i0))(Effect.exit(Layer.build(layer.value)))).traced(trace)));
/** @internal */

@@ -354,4 +361,4 @@ exports.provideLayer = provideLayer;

});
const raceInternal = (query, fiber) => new QueryImpl(Effect.raceWith(query.step, Fiber.join(fiber), coordinate, coordinate));
return new QueryImpl(Effect.raceWith(self.step, that.step, coordinate, coordinate).traced(trace));
const raceInternal = (query, fiber) => new QueryImpl(Effect.raceWith(query.i0, Fiber.join(fiber), coordinate, coordinate));
return new QueryImpl(Effect.raceWith(self.i0, that.i0, coordinate, coordinate).traced(trace));
});

@@ -363,6 +370,6 @@ /** @internal */

exports.refineOrDie = refineOrDie;
const refineOrDieWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, pf, f) => catchAll(self, e => (0, _Function.pipe)(restore(pf)(e), Option.match(() => die(restore(f)(e)), fail))));
const refineOrDieWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, pf, f) => catchAll(self, e => Option.match(() => die(restore(f)(e)), fail)(restore(pf)(e))));
/** @internal */
exports.refineOrDieWith = refineOrDieWith;
const right = /*#__PURE__*/Debug.untracedMethod(() => self => matchQuery(self, e => fail(Either.right(e)), e => (0, _Function.pipe)(e, Either.match(a => fail(Either.left(a)), succeed))));
const right = /*#__PURE__*/Debug.untracedMethod(() => self => matchQuery(self, e => fail(Either.right(e)), e => Either.match(a => fail(Either.left(a)), succeed)(e)));
/** @internal */

@@ -374,3 +381,3 @@ exports.right = right;

const runCache = /*#__PURE__*/Debug.dualWithTrace(2, trace => (self, cache) => {
const runInternal = query => Effect.flatMap(query.step, result => {
const runInternal = query => Effect.flatMap(query.i0, result => {
switch (result._tag) {

@@ -437,3 +444,3 @@ case "Blocked":

exports.someOrFail = someOrFail;
const succeed = /*#__PURE__*/Debug.methodWithTrace(trace => value => new QueryImpl(Effect.succeed(Result.done(value)).traced(trace)));
const succeed = /*#__PURE__*/Debug.methodWithTrace(trace => value => new QueryImpl(Effect.succeed(Result.done(value)).traced(trace), "Succeed", value));
/** @internal */

@@ -469,3 +476,3 @@ exports.succeed = succeed;

const timeoutTo = /*#__PURE__*/Debug.untracedDual(4, restore => (self, def, f, duration) => {
const race = (query, fiber) => new QueryImpl(Effect.raceWith(query.step, Fiber.join(fiber), (leftExit, rightFiber) => Exit.matchEffect(leftExit, cause => Effect.zipRight(Fiber.interrupt(rightFiber), Effect.succeed(Result.fail(cause))), result => {
const race = (query, fiber) => new QueryImpl(Effect.raceWith(query.i0, Fiber.join(fiber), (leftExit, rightFiber) => Exit.matchEffect(leftExit, cause => Effect.zipRight(Fiber.interrupt(rightFiber), Effect.succeed(Result.fail(cause))), result => {
switch (result._tag) {

@@ -495,7 +502,7 @@ case "Blocked":

}), (rightExit, leftFiber) => Effect.zipRight(Fiber.interrupt(leftFiber), Effect.succeed(Result.fromExit(rightExit)))));
return flatMap(fromEffect((0, _Function.pipe)(Effect.sleep(duration), Effect.interruptible, Effect.as(def), Effect.fork)), fiber => race(map(self, restore(f)), fiber));
return flatMap(fromEffect(Effect.fork(Effect.as(def)(Effect.interruptible(Effect.sleep(duration))))), fiber => race(map(self, restore(f)), fiber));
});
/** @internal */
exports.timeoutTo = timeoutTo;
const uncached = /*#__PURE__*/Debug.untracedMethod(() => self => (0, _Function.pipe)(fromEffect(FiberRef.getAndSet(cachingEnabled, false)), flatMap(previous => ensuring(self, fromEffect(FiberRef.set(cachingEnabled, previous))))));
const uncached = /*#__PURE__*/Debug.untracedMethod(() => self => flatMap(previous => ensuring(self, fromEffect(FiberRef.set(cachingEnabled, previous))))(fromEffect(FiberRef.getAndSet(cachingEnabled, false))));
/** @internal */

@@ -515,3 +522,3 @@ exports.uncached = uncached;

exports.unrefine = unrefine;
const unrefineWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, pf, f) => catchAllCause(self, cause => (0, _Function.pipe)(Cause.find(cause, cause => Cause.isDieType(cause) ? restore(pf)(cause.defect) : Option.none()), Option.match(() => failCause(Cause.map(cause, restore(f))), fail))));
const unrefineWith = /*#__PURE__*/Debug.untracedDual(3, restore => (self, pf, f) => catchAllCause(self, cause => Option.match(() => failCause(Cause.map(cause, restore(f))), fail)(Cause.find(cause, cause => Cause.isDieType(cause) ? restore(pf)(cause.defect) : Option.none()))));
/** @internal */

@@ -555,3 +562,3 @@ exports.unrefineWith = unrefineWith;

exports.zipParRight = zipParRight;
const zipWith = /*#__PURE__*/Debug.dualWithTrace(3, (trace, restore) => (self, that, f) => new QueryImpl(Effect.flatMap(self.step, result => {
const zipWith = /*#__PURE__*/Debug.dualWithTrace(3, (trace, restore) => (self, that, f) => new QueryImpl(Effect.flatMap(self.i0, result => {
switch (result._tag) {

@@ -567,3 +574,3 @@ case "Blocked":

{
return Effect.map(that.step, thatResult => {
return Effect.map(that.i0, thatResult => {
switch (thatResult._tag) {

@@ -589,3 +596,3 @@ case "Blocked":

{
return Effect.map(that.step, thatResult => {
return Effect.map(that.i0, thatResult => {
switch (thatResult._tag) {

@@ -615,3 +622,3 @@ case "Blocked":

exports.zipWith = zipWith;
const zipWithBatched = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new QueryImpl(Effect.zipWith(self.step, that.step, (selfResult, thatResult) => {
const zipWithBatched = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new QueryImpl(Effect.zipWith(self.i0, that.i0, (selfResult, thatResult) => {
if (Result.isBlocked(selfResult) && Result.isBlocked(thatResult)) {

@@ -642,3 +649,3 @@ return Result.blocked(BlockedRequests.par(selfResult.blockedRequests, thatResult.blockedRequests), zipWithBatchedContinuation(selfResult.continue, thatResult.continue, restore(f)));

exports.zipWithBatched = zipWithBatched;
const zipWithPar = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new QueryImpl(Effect.zipWithPar(self.step, that.step, (selfResult, thatResult) => {
const zipWithPar = /*#__PURE__*/Debug.untracedDual(3, restore => (self, that, f) => new QueryImpl(Effect.zipWithPar(self.i0, that.i0, (selfResult, thatResult) => {
if (Result.isBlocked(selfResult) && Result.isBlocked(thatResult)) {

@@ -675,4 +682,4 @@ return Result.blocked(BlockedRequests.par(selfResult.blockedRequests, thatResult.blockedRequests), zipWithParContinuation(selfResult.continue, thatResult.continue, restore(f)));

const blockedRequests = Chunk.flatten(sequential);
const leftovers = (0, _Function.pipe)(completedRequestMap.requests(completedRequests), HashSet.difference(Chunk.map(blockedRequests, blockedRequest => blockedRequest.request)));
return (0, _Function.pipe)(Effect.forEachDiscard(blockedRequests, blockedRequest => Ref.set(blockedRequest.result, completedRequestMap.get(completedRequests, blockedRequest.request))), Effect.zipRight(Effect.forEachDiscard(leftovers, request => Effect.flatMap(Ref.make(completedRequestMap.get(completedRequests, request)), ref => Cache.set(currentCache, request, ref)))));
const leftovers = HashSet.difference(Chunk.map(blockedRequests, blockedRequest => blockedRequest.request))(completedRequestMap.requests(completedRequests));
return Effect.zipRight(Effect.forEachDiscard(leftovers, request => Effect.flatMap(Ref.make(completedRequestMap.get(completedRequests, request)), ref => Cache.set(currentCache, request, ref))))(Effect.forEachDiscard(blockedRequests, blockedRequest => Ref.set(blockedRequest.result, completedRequestMap.get(completedRequests, blockedRequest.request))));
}))));

@@ -687,3 +694,3 @@ };

for (let i = 0; i < self.length; i++) {
const a = (0, _Function.pipe)(self, Chunk.unsafeGet(i));
const a = Chunk.unsafeGet(i)(self);
const e = f(a);

@@ -732,7 +739,7 @@ if (Either.isLeft(e)) {

for (let i = 0; i < chunk.length; i++) {
array[indices[i]] = (0, _Function.pipe)(chunk, Chunk.unsafeGet(i));
array[indices[i]] = Chunk.unsafeGet(i)(chunk);
}
return map(fromEffect(Effect.collectAll(effects.map(tuple => tuple[0]))), chunk => {
for (let i = 0; i < chunk.length; i++) {
array[effects[i][1]] = (0, _Function.pipe)(chunk, Chunk.unsafeGet(i));
array[effects[i][1]] = Chunk.unsafeGet(i)(chunk);
}

@@ -979,3 +986,3 @@ return Chunk.fromIterable(array);

for (let i = 0; i < chunk.length; i++) {
array[indices[i]] = (0, _Function.pipe)(chunk, Chunk.unsafeGet(i));
array[indices[i]] = Chunk.unsafeGet(i)(chunk);
}

@@ -982,0 +989,0 @@ for (let i = 0; i < done.length; i++) {

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

var Chunk = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Chunk"));
var _Function = /*#__PURE__*/require("@effect/data/Function");
var HashMap = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/HashMap"));

@@ -45,3 +44,3 @@ var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Option"));

exports.make = make;
const combine = (self, that) => new SequentialImpl(HashMap.reduceWithIndex(that.map, self.map, (map, value, key) => HashMap.set(map, key, (0, _Function.pipe)(HashMap.get(map, key), Option.match(() => Chunk.empty(), Chunk.concat(value))))));
const combine = (self, that) => new SequentialImpl(HashMap.reduceWithIndex(that.map, self.map, (map, value, key) => HashMap.set(map, key, Option.match(() => Chunk.empty(), Chunk.concat(value))(HashMap.get(map, key)))));
/**

@@ -48,0 +47,0 @@ * Returns whether this collection of batches of requests is empty.

{
"name": "@effect/query",
"version": "0.2.0",
"version": "0.3.0",
"license": "MIT",

@@ -10,4 +10,4 @@ "repository": {

"dependencies": {
"@effect/data": "~0.2.0",
"@effect/io": "~0.3.0"
"@effect/data": "~0.5.0",
"@effect/io": "~0.10.0"
},

@@ -14,0 +14,0 @@ "publishConfig": {

@@ -12,3 +12,3 @@ /**

import type * as Debug from "@effect/io/Debug";
import type * as Effect from "@effect/io/Effect";
import * as Effect from "@effect/io/Effect";
import type * as Layer from "@effect/io/Layer";

@@ -391,2 +391,20 @@ import type * as Cache from "@effect/query/Cache";

/**
* This function returns `true` if the specified value is an `Query` value,
* `false` otherwise.
*
* This function can be useful for checking the type of a value before
* attempting to operate on it as an `Query` value. For example, you could
* use `isQuery` to check the type of a value before using it as an
* argument to a function that expects an `Query` value.
*
* @param u - The value to check for being an `Query` value.
*
* @returns `true` if the specified value is an `Query` value, `false`
* otherwise.
*
* @since 1.0.0
* @category refinements
*/
export declare const isQuery: (u: unknown) => u is Query<any, any, any>;
/**
* "Zooms in" on the value in the `Left` side of an `Either`, moving the

@@ -393,0 +411,0 @@ * possibility that the value is a `Right` to the error channel.

@@ -6,4 +6,4 @@ "use strict";

});
exports.zipParRight = exports.zipParLeft = exports.zipPar = exports.zipLeft = exports.zipBatchedRight = exports.zipBatchedLeft = exports.zipBatched = exports.zip = exports.unwrap = exports.unsandbox = exports.unright = exports.unrefineWith = exports.unrefine = exports.unoption = exports.unleft = exports.unit = exports.uncached = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.timed = exports.sync = exports.suspend = exports.summarized = exports.succeedSome = exports.succeedNone = exports.succeed = exports.someOrFail = exports.someOrElseEffect = exports.someOrElse = exports.some = exports.serviceWithQuery = exports.serviceWithEffect = exports.serviceWith = exports.service = exports.sandboxWith = exports.sandbox = exports.runLog = exports.runCache = exports.run = exports.right = exports.refineOrDieWith = exports.refineOrDie = exports.race = exports.provideSomeLayer = exports.provideLayer = exports.provideContext = exports.partitionQueryPar = exports.partitionQuery = exports.orDieWith = exports.orDie = exports.optional = exports.never = exports.maxBatchSize = exports.matchQuery = exports.matchCauseQuery = exports.match = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.mapDataSources = exports.mapBoth = exports.map = exports.left = exports.fromRequestUncached = exports.fromRequest = exports.fromOption = exports.fromEither = exports.fromEffect = exports.forEachPar = exports.forEachBatched = exports.forEach = exports.flatten = exports.flatMap = exports.failSync = exports.failCauseSync = exports.failCause = exports.fail = exports.ensuring = exports.either = exports.dieSync = exports.die = exports.contramapContext = exports.contextWithQuery = exports.contextWithEffect = exports.contextWith = exports.context = exports.collectAllPar = exports.collectAllBatched = exports.collectAll = exports.catchAllCause = exports.catchAll = exports.cached = exports.asUnit = exports.asSomeError = exports.as = exports.around = exports.absolve = exports.QueryTypeId = void 0;
exports.zipWithPar = exports.zipWithBatched = exports.zipWith = exports.zipRight = void 0;
exports.zipParLeft = exports.zipPar = exports.zipLeft = exports.zipBatchedRight = exports.zipBatchedLeft = exports.zipBatched = exports.zip = exports.unwrap = exports.unsandbox = exports.unright = exports.unrefineWith = exports.unrefine = exports.unoption = exports.unleft = exports.unit = exports.uncached = exports.timeoutTo = exports.timeoutFailCause = exports.timeoutFail = exports.timeout = exports.timed = exports.sync = exports.suspend = exports.summarized = exports.succeedSome = exports.succeedNone = exports.succeed = exports.someOrFail = exports.someOrElseEffect = exports.someOrElse = exports.some = exports.serviceWithQuery = exports.serviceWithEffect = exports.serviceWith = exports.service = exports.sandboxWith = exports.sandbox = exports.runLog = exports.runCache = exports.run = exports.right = exports.refineOrDieWith = exports.refineOrDie = exports.race = exports.provideSomeLayer = exports.provideLayer = exports.provideContext = exports.partitionQueryPar = exports.partitionQuery = exports.orDieWith = exports.orDie = exports.optional = exports.never = exports.maxBatchSize = exports.matchQuery = exports.matchCauseQuery = exports.match = exports.mapErrorCause = exports.mapError = exports.mapEffect = exports.mapDataSources = exports.mapBoth = exports.map = exports.left = exports.isQuery = exports.fromRequestUncached = exports.fromRequest = exports.fromOption = exports.fromEither = exports.fromEffect = exports.forEachPar = exports.forEachBatched = exports.forEach = exports.flatten = exports.flatMap = exports.failSync = exports.failCauseSync = exports.failCause = exports.fail = exports.ensuring = exports.either = exports.dieSync = exports.die = exports.contramapContext = exports.contextWithQuery = exports.contextWithEffect = exports.contextWith = exports.context = exports.collectAllPar = exports.collectAllBatched = exports.collectAll = exports.catchAllCause = exports.catchAll = exports.cached = exports.asUnit = exports.asSomeError = exports.as = exports.around = exports.absolve = exports.QueryTypeId = void 0;
exports.zipWithPar = exports.zipWithBatched = exports.zipWith = exports.zipRight = exports.zipParRight = void 0;
var internal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/query/internal_effect_untraced/query"));

@@ -323,2 +323,21 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

/**
* This function returns `true` if the specified value is an `Query` value,
* `false` otherwise.
*
* This function can be useful for checking the type of a value before
* attempting to operate on it as an `Query` value. For example, you could
* use `isQuery` to check the type of a value before using it as an
* argument to a function that expects an `Query` value.
*
* @param u - The value to check for being an `Query` value.
*
* @returns `true` if the specified value is an `Query` value, `false`
* otherwise.
*
* @since 1.0.0
* @category refinements
*/
exports.fromRequestUncached = fromRequestUncached;
const isQuery = internal.isQuery;
/**
* "Zooms in" on the value in the `Left` side of an `Either`, moving the

@@ -330,3 +349,3 @@ * possibility that the value is a `Right` to the error channel.

*/
exports.fromRequestUncached = fromRequestUncached;
exports.isQuery = isQuery;
const left = internal.left;

@@ -333,0 +352,0 @@ /**

@@ -58,3 +58,3 @@ import * as Chunk from "@effect/data/Chunk"

new DataSourceImpl(identifier, (requests) =>
Effect.suspendSucceed(() => {
Effect.suspend(() => {
const map = completedRequestMap.empty()

@@ -61,0 +61,0 @@ return Effect.as(Effect.provideService(completedRequestMap.Tag, map)(restore(runAll)(requests)), map)

@@ -12,3 +12,3 @@ /**

import type * as Debug from "@effect/io/Debug"
import type * as Effect from "@effect/io/Effect"
import * as Effect from "@effect/io/Effect"
import type * as Layer from "@effect/io/Layer"

@@ -79,3 +79,3 @@ import type * as Cache from "@effect/query/Cache"

/** @internal */
readonly step: Effect.Effect<R, never, Result.Result<R, E, A>>
readonly i0: Effect.Effect<R, never, Result.Result<R, E, A>>
}

@@ -466,3 +466,23 @@

/**
* This function returns `true` if the specified value is an `Query` value,
* `false` otherwise.
*
* This function can be useful for checking the type of a value before
* attempting to operate on it as an `Query` value. For example, you could
* use `isQuery` to check the type of a value before using it as an
* argument to a function that expects an `Query` value.
*
* @param u - The value to check for being an `Query` value.
*
* @returns `true` if the specified value is an `Query` value, `false`
* otherwise.
*
* @since 1.0.0
* @category refinements
*/
export const isQuery: (u: unknown) => u is Query<any, any, any> = internal.isQuery
/**
* "Zooms in" on the value in the `Left` side of an `Either`, moving the

@@ -469,0 +489,0 @@ * possibility that the value is a `Right` to the error channel.

@@ -15,3 +15,5 @@ {

"noEmit": false,
"lib": ["ES2021"],
"lib": [
"ES2021"
],
"sourceMap": true,

@@ -29,3 +31,2 @@ "declarationMap": true,

"forceConsistentCasingInFileNames": true,
"suppressImplicitAnyIndexErrors": true,
"stripInternal": true,

@@ -42,7 +43,17 @@ "noImplicitAny": true,

"paths": {
"@effect/io/*": ["./node_modules/@effect/io/src/*"],
"@effect/query": ["./src/index.ts"],
"@effect/query/test/*": ["./test/*"],
"@effect/query/examples/*": ["./examples/*"],
"@effect/query/*": ["./src/*"]
"@effect/io/*": [
"./node_modules/@effect/io/src/*"
],
"@effect/query": [
"./src/index.ts"
],
"@effect/query/test/*": [
"./test/*"
],
"@effect/query/examples/*": [
"./examples/*"
],
"@effect/query/*": [
"./src/*"
]
},

@@ -59,3 +70,7 @@ "plugins": [

"include": [],
"exclude": ["node_modules", "build", "lib"]
"exclude": [
"node_modules",
"build",
"lib"
]
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc