Socket
Socket
Sign inDemoInstall

s-array

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

s-array - npm Package Compare versions

Comparing version 0.4.7 to 0.4.8

10

es/index.d.ts
export interface SArray<T> {
(): T[];
concat(...others: SArray<T>[]): SArray<T>;
concat(...others: (() => T | T[])[]): SArray<T>;
every(pred: (v: T) => boolean): () => boolean;

@@ -17,3 +17,3 @@ filter(pred: (v: T) => boolean): SArray<T>;

mapS<U>(fn: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: (() => U)[], from: number[], to: number[]) => void): SSignalArray<U>;
mapSample<U>(fn: (v: T) => U, exit?: (v: T, i: number) => void, move?: (from: number[], to: number[]) => void): SArray<U>;
mapSample<U>(fn: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): SArray<U>;
orderBy<U>(key: (v: T) => U): SArray<T>;

@@ -36,7 +36,7 @@ }

export declare function lift<T>(seq: () => T[]): SArray<T>;
export declare function mapS<T, U>(seq: () => T[], enter: (v: T, m?: U | undefined, i?: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: (() => U)[], from: number[], to: number[]) => void): () => (() => U)[];
export declare function mapS<T, U>(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: (() => U)[], from: number[], to: number[]) => void): () => (() => U)[];
export declare function mapSample<T, U>(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): () => U[];
export declare function forEach<T>(seq: () => T[], enter: (v: T, i: number) => void, exit?: (v: T, i: number) => void, move?: (from: number[], to: number[]) => void): () => T[];
export declare function combine<T>(seq: () => (() => T)[]): () => T[];
export declare function map<T, U>(seq: () => T[], enter: (v: T, m?: U | undefined, i?: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): () => U[];
export declare function map<T, U>(seq: () => T[], enter: (v: T, m: U | undefined, i: number) => U, exit?: (v: T, m: U, i: number) => void, move?: (items: T[], mapped: U[], from: number[], to: number[]) => void): () => U[];
export declare function find<T>(seq: () => T[], pred: (v: T) => boolean): () => T | undefined;

@@ -47,3 +47,3 @@ export declare function includes<T>(seq: () => T[], o: T): () => boolean;

export declare function filter<T>(seq: () => T[], predicate: (v: T) => boolean): () => T[];
export declare function concat<T>(seq: () => T[], ...others: (() => T)[]): () => T[];
export declare function concat<T>(seq: () => T[], ...others: (() => T | T[])[]): () => T[];
export declare function reduce<T, U>(seq: () => T[], fn: (r: U, t: T, i: number, s: T[]) => U, seed: U | (() => U)): () => U;

@@ -50,0 +50,0 @@ export declare function reduceRight<T, U>(seq: () => T[], fn: (r: U, t: T, i: number, s: T[]) => U, seed: U | (() => U)): () => U;

@@ -185,3 +185,3 @@ // synchronous array signals for S.js

return S.on(seq, function mapSample() {
var new_items = seq(), new_len = new_items.length, temp, tempdisposers, from = null, to = null, i, j, k, item;
var new_items = seq(), new_len = new_items.length, new_indices, item_indices, temp, tempdisposers, from = null, to = null, i, j, start, end, new_end, item;
// fast path for empty arrays

@@ -209,5 +209,5 @@ if (new_len === 0) {

else if (len === 0) {
for (i = 0; i < new_len; i++) {
item = items[i] = new_items[i];
mapped[i] = S.root(mapper);
for (j = 0; j < new_len; j++) {
items[j] = new_items[j];
mapped[j] = S.root(mapper);
}

@@ -217,2 +217,3 @@ len = new_len;

else {
new_indices = new Map();
temp = new Array(new_len);

@@ -222,31 +223,55 @@ tempdisposers = new Array(new_len);

from = [], to = [];
// skip common prefix and suffix
for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++)
;
for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) {
temp[new_end] = mapped[end];
tempdisposers[new_end] = disposers[end];
}
// 0) prepare a map of all indices in new_items, scanning backwards so we can pop them off in natural order
for (j = new_end; j >= start; j--) {
item = new_items[j];
item_indices = new_indices.get(item);
if (item_indices === undefined) {
new_indices.set(item, [j]);
}
else {
item_indices.push(j);
}
}
// 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them
NEXT: for (i = 0, k = 0; i < len; i++) {
for (i = start; i <= end; i++) {
item = items[i];
for (j = 0; j < new_len; j++, k = (k + 1) % new_len) {
if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) {
temp[k] = mapped[i];
tempdisposers[k] = disposers[i];
if (move && i !== k) {
from.push(i);
to.push(k);
}
k = (k + 1) % new_len;
continue NEXT;
item_indices = new_indices.get(item);
if (item_indices !== undefined && item_indices.length > 0) {
j = item_indices.pop();
temp[j] = mapped[i];
tempdisposers[j] = disposers[i];
if (move && i !== j) {
from.push(i);
to.push(j);
}
}
if (exit)
exit(item, mapped[i], i);
disposers[i]();
else {
if (exit)
exit(item, mapped[i], i);
disposers[i]();
}
}
if (move && from.length)
if (move && (from.length !== 0 || end !== len - 1)) {
end++, new_end++;
while (end < len) {
from.push(end++);
to.push(new_end++);
}
move(items, mapped, from, to);
}
// 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value
for (i = 0; i < new_len; i++) {
if (temp.hasOwnProperty(i.toString())) {
mapped[i] = temp[i];
disposers[i] = tempdisposers[i];
for (j = start; j < new_len; j++) {
if (temp.hasOwnProperty(j)) {
mapped[j] = temp[j];
disposers[j] = tempdisposers[j];
}
else {
mapped[i] = S.root(mapper);
mapped[j] = S.root(mapper);
}

@@ -261,4 +286,4 @@ }

function mapper(disposer) {
disposers[i] = disposer;
return enter(new_items[i], mapped[i], i);
disposers[j] = disposer;
return enter(new_items[j], mapped[j], j);
}

@@ -265,0 +290,0 @@ });

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('s-js')) :
typeof define === 'function' && define.amd ? define(['exports', 's-js'], factory) :
(factory((global.SArray = global.SArray || {}),global.S));
(factory((global.SArray = {}),global.S));
}(this, (function (exports,S) { 'use strict';
S = 'default' in S ? S['default'] : S;
S = S && S.hasOwnProperty('default') ? S['default'] : S;

@@ -192,3 +192,3 @@ // synchronous array signals for S.js

return S.on(seq, function mapSample() {
var new_items = seq(), new_len = new_items.length, temp, tempdisposers, from = null, to = null, i, j, k, item;
var new_items = seq(), new_len = new_items.length, new_indices, item_indices, temp, tempdisposers, from = null, to = null, i, j, start, end, new_end, item;
// fast path for empty arrays

@@ -216,5 +216,5 @@ if (new_len === 0) {

else if (len === 0) {
for (i = 0; i < new_len; i++) {
item = items[i] = new_items[i];
mapped[i] = S.root(mapper);
for (j = 0; j < new_len; j++) {
items[j] = new_items[j];
mapped[j] = S.root(mapper);
}

@@ -224,2 +224,3 @@ len = new_len;

else {
new_indices = new Map();
temp = new Array(new_len);

@@ -229,31 +230,55 @@ tempdisposers = new Array(new_len);

from = [], to = [];
// skip common prefix and suffix
for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++)
;
for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) {
temp[new_end] = mapped[end];
tempdisposers[new_end] = disposers[end];
}
// 0) prepare a map of all indices in new_items, scanning backwards so we can pop them off in natural order
for (j = new_end; j >= start; j--) {
item = new_items[j];
item_indices = new_indices.get(item);
if (item_indices === undefined) {
new_indices.set(item, [j]);
}
else {
item_indices.push(j);
}
}
// 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them
NEXT: for (i = 0, k = 0; i < len; i++) {
for (i = start; i <= end; i++) {
item = items[i];
for (j = 0; j < new_len; j++, k = (k + 1) % new_len) {
if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) {
temp[k] = mapped[i];
tempdisposers[k] = disposers[i];
if (move && i !== k) {
from.push(i);
to.push(k);
}
k = (k + 1) % new_len;
continue NEXT;
item_indices = new_indices.get(item);
if (item_indices !== undefined && item_indices.length > 0) {
j = item_indices.pop();
temp[j] = mapped[i];
tempdisposers[j] = disposers[i];
if (move && i !== j) {
from.push(i);
to.push(j);
}
}
if (exit)
exit(item, mapped[i], i);
disposers[i]();
else {
if (exit)
exit(item, mapped[i], i);
disposers[i]();
}
}
if (move && from.length)
if (move && (from.length !== 0 || end !== len - 1)) {
end++, new_end++;
while (end < len) {
from.push(end++);
to.push(new_end++);
}
move(items, mapped, from, to);
}
// 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value
for (i = 0; i < new_len; i++) {
if (temp.hasOwnProperty(i.toString())) {
mapped[i] = temp[i];
disposers[i] = tempdisposers[i];
for (j = start; j < new_len; j++) {
if (temp.hasOwnProperty(j)) {
mapped[j] = temp[j];
disposers[j] = tempdisposers[j];
}
else {
mapped[i] = S.root(mapper);
mapped[j] = S.root(mapper);
}

@@ -268,4 +293,4 @@ }

function mapper(disposer) {
disposers[i] = disposer;
return enter(new_items[i], mapped[i], i);
disposers[j] = disposer;
return enter(new_items[j], mapped[j], j);
}

@@ -272,0 +297,0 @@ });

@@ -7,3 +7,3 @@ // synchronous array signals for S.js

concat(...others : SArray<T>[]) : SArray<T>;
concat(...others : (() => T | T[])[]) : SArray<T>;
every(pred : (v : T) => boolean) : () => boolean;

@@ -23,3 +23,3 @@ filter(pred : (v : T) => boolean) : SArray<T>;

mapS<U>(fn : (v : T, m : U | undefined, i : number) => U, exit? : (v : T, m : U, i : number) => void, move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void) : SSignalArray<U>;
mapSample<U>(fn : (v : T) => U, exit? : (v : T, i : number) => void, move? : (from : number[], to : number[]) => void) : SArray<U>;
mapSample<U>(fn : (v : T, m : U | undefined, i : number) => U, exit? : (v : T, m : U, i : number) => void, move? : (items : T[], mapped : U[], from : number[], to : number[]) => void) : SArray<U>;
orderBy<U>(key : (v : T) => U) : SArray<T>;

@@ -44,2 +44,20 @@ }

// inline ES6 Map type definition, as we want Typescript to target ES5, but with Map
interface Map<K, V> {
clear(): void;
delete(key: K): boolean;
forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
get(key: K): V | undefined;
has(key: K): boolean;
set(key: K, value: V): this;
readonly size: number;
}
interface MapConstructor {
new (): Map<any, any>;
new <K, V>(entries?: [K, V][]): Map<K, V>;
readonly prototype: Map<any, any>;
}
declare var Map: MapConstructor;
export default function SArray<T>(values : T[]) : SDataArray<T> {

@@ -195,3 +213,3 @@ if (!Array.isArray(values))

seq : () => T[],
enter : (v : T, m? : U | undefined, i? : number) => U,
enter : (v : T, m : U | undefined, i : number) => U,
exit? : (v : T, m : U, i : number) => void,

@@ -268,7 +286,7 @@ move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void

this : () => T[],
enter : (v : T, m? : U | undefined, i? : number) => U,
enter : (v : T, m : U | undefined, i : number) => U,
exit? : (v : T, m : U, i : number) => void,
move? : (items : T[], mapped : (() => U)[], from : number[], to : number[]) => void
) {
var r = lift(mapS(this, enter, exit, move)) as any as SSignalArray<T>;
var r = lift(mapS(this, enter, exit, move)) as SSignalArray<U>;
r.combine = chainCombine;

@@ -294,2 +312,4 @@ return r;

new_len = new_items.length,
new_indices : Map<T, number[]>,
item_indices : number[] | undefined,
temp : U[],

@@ -301,3 +321,5 @@ tempdisposers : (() => void)[],

j : number,
k : number,
start : number,
end : number,
new_end : number,
item : T;

@@ -325,8 +347,9 @@

} else if (len === 0) {
for (i = 0; i < new_len; i++) {
item = items[i] = new_items[i];
mapped[i] = S.root(mapper);
for (j = 0; j < new_len; j++) {
items[j] = new_items[j];
mapped[j] = S.root(mapper);
}
len = new_len;
} else {
new_indices = new Map<T, number[]>();
temp = new Array(new_len);

@@ -336,28 +359,54 @@ tempdisposers = new Array(new_len);

// skip common prefix and suffix
for (start = 0, end = Math.min(len, new_len); start < end && items[start] === new_items[start]; start++);
for (end = len - 1, new_end = new_len - 1; end >= 0 && new_end >= 0 && items[end] === new_items[new_end]; end--, new_end--) {
temp[new_end] = mapped[end];
tempdisposers[new_end] = disposers[end];
}
// 0) prepare a map of all indices in new_items, scanning backwards so we can pop them off in natural order
for (j = new_end; j >= start; j--) {
item = new_items[j];
item_indices = new_indices.get(item);
if (item_indices === undefined) {
new_indices.set(item, [j]);
} else {
item_indices.push(j);
}
}
// 1) step through all old items and see if they can be found in the new set; if so, save them in a temp array and mark them moved; if not, exit them
NEXT:
for (i = 0, k = 0; i < len; i++) {
for (i = start; i <= end; i++) {
item = items[i];
for (j = 0; j < new_len; j++, k = (k + 1) % new_len) {
if (item === new_items[k] && !temp.hasOwnProperty(k.toString())) {
temp[k] = mapped[i];
tempdisposers[k] = disposers[i];
if (move && i !== k) { from.push(i); to.push(k); }
k = (k + 1) % new_len;
continue NEXT;
item_indices = new_indices.get(item);
if (item_indices !== undefined && item_indices.length > 0) {
j = item_indices.pop()!;
temp[j] = mapped[i];
tempdisposers[j] = disposers[i];
if (move && i !== j) {
from.push(i);
to.push(j);
}
} else {
if (exit) exit(item, mapped[i], i);
disposers[i]();
}
if (exit) exit(item, mapped[i], i);
disposers[i]();
}
if (move && from.length) move(items, mapped, from, to);
if (move && (from.length !== 0 || end !== len - 1)) {
end++, new_end++;
while (end < len) {
from.push(end++);
to.push(new_end++);
}
move(items, mapped, from, to);
}
// 2) set all the new values, pulling from the temp array if copied, otherwise entering the new value
for (i = 0; i < new_len; i++) {
if (temp.hasOwnProperty(i.toString())) {
mapped[i] = temp[i];
disposers[i] = tempdisposers[i];
for (j = start; j < new_len; j++) {
if (temp.hasOwnProperty(j as any)) {
mapped[j] = temp[j];
disposers[j] = tempdisposers[j];
} else {
mapped[i] = S.root(mapper);
mapped[j] = S.root(mapper);
}

@@ -376,4 +425,4 @@ }

function mapper(disposer : () => void) {
disposers[i] = disposer;
return enter(new_items[i], mapped[i], i);
disposers[j] = disposer;
return enter(new_items[j], mapped[j], j);
}

@@ -470,3 +519,3 @@ });

seq : () => T[],
enter : (v : T, m? : U | undefined, i? : number) => U,
enter : (v : T, m : U | undefined, i : number) => U,
exit? : (v : T, m : U, i : number) => void,

@@ -481,3 +530,3 @@ move? : (items : T[], mapped : U[], from : number[], to : number[]) => void

this : () => T[],
enter : (v : T, m? : U | undefined, i? : number) => U,
enter : (v : T, m : U | undefined, i : number) => U,
exit? : (v : T, m : U, i : number) => void,

@@ -577,3 +626,3 @@ move? : (items : T[], mapped : U[], from : number[], to : number[]) => void

export function concat<T>(seq : () => T[], ...others : (() => T)[]) {
export function concat<T>(seq : () => T[], ...others : (() => T | T[])[]) {
return S(function concat() {

@@ -588,3 +637,3 @@ var s = seq();

function chainConcat<T>(this : () => T[], ...others : (() => T)[]) {
function chainConcat<T>(this : () => T[], ...others : (() => T | T[])[]) {
return lift(concat(this, ...others));

@@ -591,0 +640,0 @@ }

{
"name": "s-array",
"version": "0.4.7",
"version": "0.4.8",
"description": "Array library for S.js",

@@ -8,4 +8,4 @@ "main": "index.js",

"types": "es/index.d.ts",
"dependencies": {
"s-js": "^0.4.2"
"peerDependencies": {
"s-js": "^0.4.7"
},

@@ -15,6 +15,6 @@ "devDependencies": {

"karma": "^1.7.0",
"karma-chrome-launcher": "^2.1.1",
"karma-jasmine": "^1.1.0",
"karma-chrome-launcher": "^2.1.1",
"rollup": "^0.41.6",
"typescript": "^2.3.2"
"typescript": "^2.6.1"
},

@@ -21,0 +21,0 @@ "scripts": {

export default {
entry: 'es/index.js',
dest: 'index.js',
format: 'umd',
moduleName: 'SArray',
exports: 'named',
input: 'es/index.js',
output: {
file: 'index.js',
format: 'umd',
exports: 'named'
},
name: 'SArray',
external: ['s-js'],
globals: { 's-js': "S"}
}
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