@electric-sql/experimental 0.1.1 → 0.1.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,15 +29,19 @@ module.exports = __toCommonJS(src_exports);
29
29
  var import_client = require("@electric-sql/client");
30
30
  function matchStream(stream, operations, matchFn, timeout = 6e4) {
31
31
  return new Promise((resolve, reject) => {
32
- const unsubscribe = stream.subscribe((messages) => {
33
- const message = messages.filter(import_client.isChangeMessage).find((message2) => {
34
- const operation = message2.headers.operation;
35
- return operations.includes(operation) && matchFn(message2);
36
- });
37
- if (message) {
38
- return finish(message);
32
+ const unsubscribe = stream.subscribe(
33
+ (messages) => {
34
+ const message = messages.filter(
35
+ (msg) => (0, import_client.isChangeMessage)(msg)
36
+ ).find((message2) => {
37
+ const operation = message2.headers.operation;
38
+ return operations.includes(operation) && matchFn(message2);
39
+ });
40
+ if (message) {
41
+ return finish(message);
42
+ }
39
43
  }
40
- });
44
+ );
41
45
  const timeoutId = setTimeout(() => {
42
46
  const msg = `matchStream timed out after ${timeout}ms`;
43
47
  console.error(msg);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/match.ts"],"sourcesContent":["export * from './match'\n","import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe((messages) => {\n const message = messages.filter(isChangeMessage).find((message) => {\n const operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n })\n\n const timeoutId = setTimeout(() => {\n const msg = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>) {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message) => message.value[column] === value\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAQO;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO,UAAU,CAAC,aAAa;AAC7D,YAAM,UAAU,SAAS,OAAO,6BAAe,EAAE,KAAK,CAACA,aAAY;AACjE,cAAM,YAAYA,SAAQ,QAAQ;AAElC,eAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,MAC1D,CAAC;AAED,UAAI,SAAS;AACX,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF,CAAC;AAED,UAAM,YAAY,WAAW,MAAM;AACjC,YAAM,MAAM,+BAA+B,OAAO;AAElD,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAA2B;AACzC,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAAY,QAAQ,MAAM,MAAM,MAAM;AAChD;","names":["message"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/match.ts"],"sourcesContent":["export * from './match'\n","import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n type Message,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe(\n (messages: Array<unknown>) => {\n const message = messages\n .filter((msg): msg is ChangeMessage<T> =>\n isChangeMessage(msg as Message<Row<never>>)\n )\n .find((message) => {\n const operation: Operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n }\n )\n\n const timeoutId: NodeJS.Timeout = setTimeout(() => {\n const msg: string = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>): void {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message: ChangeMessage<T>) => message.value[column] === value\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBASO;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO;AAAA,MACrC,CAAC,aAA6B;AAC5B,cAAM,UAAU,SACb;AAAA,UAAO,CAAC,YACP,+BAAgB,GAA0B;AAAA,QAC5C,EACC,KAAK,CAACA,aAAY;AACjB,gBAAM,YAAuBA,SAAQ,QAAQ;AAE7C,iBAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,QAC1D,CAAC;AAEH,YAAI,SAAS;AACX,iBAAO,OAAO,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAA4B,WAAW,MAAM;AACjD,YAAM,MAAc,+BAA+B,OAAO;AAE1D,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAAiC;AAC/C,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAA8B,QAAQ,MAAM,MAAM,MAAM;AAClE;","names":["message"]}
@@ -0,0 +1,6 @@
1
+ import { Row, ShapeStreamInterface, Operation, ChangeMessage, Value, GetExtensions } from '@electric-sql/client';
2
+
3
+ declare function matchStream<T extends Row<unknown>>(stream: ShapeStreamInterface<T>, operations: Array<Operation>, matchFn: (message: ChangeMessage<T>) => boolean, timeout?: number): Promise<ChangeMessage<T>>;
4
+ declare function matchBy<T extends Row<unknown>>(column: string, value: Value<GetExtensions<T>>): (message: ChangeMessage<T>) => boolean;
5
+
6
+ export { matchBy, matchStream };
@@ -1,2 +1,2 @@
1
- import{isChangeMessage as h}from"@electric-sql/client";function T(n,t,s,a=6e4){return new Promise((i,u)=>{let m=n.subscribe(e=>{let o=e.filter(h).find(r=>{let p=r.headers.operation;return t.includes(p)&&s(r)});if(o)return g(o)}),c=setTimeout(()=>{let e=`matchStream timed out after ${a}ms`;console.error(e),u(e)},a);function g(e){return clearTimeout(c),m(),i(e)}})}function l(n,t){return s=>s.value[n]===t}export{l as matchBy,T as matchStream};
1
+ import{isChangeMessage as h}from"@electric-sql/client";function f(s,t,a,o=6e4){return new Promise((i,g)=>{let u=s.subscribe(e=>{let r=e.filter(n=>h(n)).find(n=>{let p=n.headers.operation;return t.includes(p)&&a(n)});if(r)return c(r)}),m=setTimeout(()=>{let e=`matchStream timed out after ${o}ms`;console.error(e),g(e)},o);function c(e){return clearTimeout(m),u(),i(e)}})}function M(s,t){return a=>a.value[s]===t}export{M as matchBy,f as matchStream};
2
2
  //# sourceMappingURL=index.browser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe((messages) => {\n const message = messages.filter(isChangeMessage).find((message) => {\n const operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n })\n\n const timeoutId = setTimeout(() => {\n const msg = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>) {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message) => message.value[column] === value\n}\n"],"mappings":"AAAA,OACE,mBAAAA,MAOK,uBAEA,SAASC,EACdC,EACAC,EACAC,EACAC,EAAU,IACiB,CAC3B,OAAO,IAAI,QAA0B,CAACC,EAASC,IAAW,CACxD,IAAMC,EAA0BN,EAAO,UAAWO,GAAa,CAC7D,IAAMC,EAAUD,EAAS,OAAOT,CAAe,EAAE,KAAMU,GAAY,CACjE,IAAMC,EAAYD,EAAQ,QAAQ,UAElC,OAAOP,EAAW,SAASQ,CAAS,GAAKP,EAAQM,CAAO,CAC1D,CAAC,EAED,GAAIA,EACF,OAAOE,EAAOF,CAAO,CAEzB,CAAC,EAEKG,EAAY,WAAW,IAAM,CACjC,IAAMC,EAAM,+BAA+BT,CAAO,KAElD,QAAQ,MAAMS,CAAG,EAEjBP,EAAOO,CAAG,CACZ,EAAGT,CAAO,EAEV,SAASO,EAAOF,EAA2B,CACzC,oBAAaG,CAAS,EAEtBL,EAAY,EAELF,EAAQI,CAAO,CACxB,CACF,CAAC,CACH,CAEO,SAASK,EACdC,EACAC,EACwC,CACxC,OAAQP,GAAYA,EAAQ,MAAMM,CAAM,IAAMC,CAChD","names":["isChangeMessage","matchStream","stream","operations","matchFn","timeout","resolve","reject","unsubscribe","messages","message","operation","finish","timeoutId","msg","matchBy","column","value"]}
1
+ {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n type Message,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe(\n (messages: Array<unknown>) => {\n const message = messages\n .filter((msg): msg is ChangeMessage<T> =>\n isChangeMessage(msg as Message<Row<never>>)\n )\n .find((message) => {\n const operation: Operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n }\n )\n\n const timeoutId: NodeJS.Timeout = setTimeout(() => {\n const msg: string = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>): void {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message: ChangeMessage<T>) => message.value[column] === value\n}\n"],"mappings":"AAAA,OACE,mBAAAA,MAQK,uBAEA,SAASC,EACdC,EACAC,EACAC,EACAC,EAAU,IACiB,CAC3B,OAAO,IAAI,QAA0B,CAACC,EAASC,IAAW,CACxD,IAAMC,EAA0BN,EAAO,UACpCO,GAA6B,CAC5B,IAAMC,EAAUD,EACb,OAAQE,GACPX,EAAgBW,CAA0B,CAC5C,EACC,KAAMD,GAAY,CACjB,IAAME,EAAuBF,EAAQ,QAAQ,UAE7C,OAAOP,EAAW,SAASS,CAAS,GAAKR,EAAQM,CAAO,CAC1D,CAAC,EAEH,GAAIA,EACF,OAAOG,EAAOH,CAAO,CAEzB,CACF,EAEMI,EAA4B,WAAW,IAAM,CACjD,IAAMH,EAAc,+BAA+BN,CAAO,KAE1D,QAAQ,MAAMM,CAAG,EAEjBJ,EAAOI,CAAG,CACZ,EAAGN,CAAO,EAEV,SAASQ,EAAOH,EAAiC,CAC/C,oBAAaI,CAAS,EAEtBN,EAAY,EAELF,EAAQI,CAAO,CACxB,CACF,CAAC,CACH,CAEO,SAASK,EACdC,EACAC,EACwC,CACxC,OAAQP,GAA8BA,EAAQ,MAAMM,CAAM,IAAMC,CAClE","names":["isChangeMessage","matchStream","stream","operations","matchFn","timeout","resolve","reject","unsubscribe","messages","message","msg","operation","finish","timeoutId","matchBy","column","value"]}
@@ -4,15 +4,19 @@ import {
4
4
  } from "@electric-sql/client";
5
5
  function matchStream(stream, operations, matchFn, timeout = 6e4) {
6
6
  return new Promise((resolve, reject) => {
7
- const unsubscribe = stream.subscribe((messages) => {
8
- const message = messages.filter(isChangeMessage).find((message2) => {
9
- const operation = message2.headers.operation;
10
- return operations.includes(operation) && matchFn(message2);
11
- });
12
- if (message) {
13
- return finish(message);
7
+ const unsubscribe = stream.subscribe(
8
+ (messages) => {
9
+ const message = messages.filter(
10
+ (msg) => isChangeMessage(msg)
11
+ ).find((message2) => {
12
+ const operation = message2.headers.operation;
13
+ return operations.includes(operation) && matchFn(message2);
14
+ });
15
+ if (message) {
16
+ return finish(message);
17
+ }
14
18
  }
15
- });
19
+ );
16
20
  const timeoutId = setTimeout(() => {
17
21
  const msg = `matchStream timed out after ${timeout}ms`;
18
22
  console.error(msg);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe((messages) => {\n const message = messages.filter(isChangeMessage).find((message) => {\n const operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n })\n\n const timeoutId = setTimeout(() => {\n const msg = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>) {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message) => message.value[column] === value\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAOK;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO,UAAU,CAAC,aAAa;AAC7D,YAAM,UAAU,SAAS,OAAO,eAAe,EAAE,KAAK,CAACA,aAAY;AACjE,cAAM,YAAYA,SAAQ,QAAQ;AAElC,eAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,MAC1D,CAAC;AAED,UAAI,SAAS;AACX,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF,CAAC;AAED,UAAM,YAAY,WAAW,MAAM;AACjC,YAAM,MAAM,+BAA+B,OAAO;AAElD,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAA2B;AACzC,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAAY,QAAQ,MAAM,MAAM,MAAM;AAChD;","names":["message"]}
1
+ {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n type Message,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe(\n (messages: Array<unknown>) => {\n const message = messages\n .filter((msg): msg is ChangeMessage<T> =>\n isChangeMessage(msg as Message<Row<never>>)\n )\n .find((message) => {\n const operation: Operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n }\n )\n\n const timeoutId: NodeJS.Timeout = setTimeout(() => {\n const msg: string = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>): void {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message: ChangeMessage<T>) => message.value[column] === value\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAQK;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO;AAAA,MACrC,CAAC,aAA6B;AAC5B,cAAM,UAAU,SACb;AAAA,UAAO,CAAC,QACP,gBAAgB,GAA0B;AAAA,QAC5C,EACC,KAAK,CAACA,aAAY;AACjB,gBAAM,YAAuBA,SAAQ,QAAQ;AAE7C,iBAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,QAC1D,CAAC;AAEH,YAAI,SAAS;AACX,iBAAO,OAAO,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAA4B,WAAW,MAAM;AACjD,YAAM,MAAc,+BAA+B,OAAO;AAE1D,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAAiC;AAC/C,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAA8B,QAAQ,MAAM,MAAM,MAAM;AAClE;","names":["message"]}
package/dist/index.mjs CHANGED
@@ -4,15 +4,19 @@ import {
4
4
  } from "@electric-sql/client";
5
5
  function matchStream(stream, operations, matchFn, timeout = 6e4) {
6
6
  return new Promise((resolve, reject) => {
7
- const unsubscribe = stream.subscribe((messages) => {
8
- const message = messages.filter(isChangeMessage).find((message2) => {
9
- const operation = message2.headers.operation;
10
- return operations.includes(operation) && matchFn(message2);
11
- });
12
- if (message) {
13
- return finish(message);
7
+ const unsubscribe = stream.subscribe(
8
+ (messages) => {
9
+ const message = messages.filter(
10
+ (msg) => isChangeMessage(msg)
11
+ ).find((message2) => {
12
+ const operation = message2.headers.operation;
13
+ return operations.includes(operation) && matchFn(message2);
14
+ });
15
+ if (message) {
16
+ return finish(message);
17
+ }
14
18
  }
15
- });
19
+ );
16
20
  const timeoutId = setTimeout(() => {
17
21
  const msg = `matchStream timed out after ${timeout}ms`;
18
22
  console.error(msg);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe((messages) => {\n const message = messages.filter(isChangeMessage).find((message) => {\n const operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n })\n\n const timeoutId = setTimeout(() => {\n const msg = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>) {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message) => message.value[column] === value\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAOK;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO,UAAU,CAAC,aAAa;AAC7D,YAAM,UAAU,SAAS,OAAO,eAAe,EAAE,KAAK,CAACA,aAAY;AACjE,cAAM,YAAYA,SAAQ,QAAQ;AAElC,eAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,MAC1D,CAAC;AAED,UAAI,SAAS;AACX,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF,CAAC;AAED,UAAM,YAAY,WAAW,MAAM;AACjC,YAAM,MAAM,+BAA+B,OAAO;AAElD,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAA2B;AACzC,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAAY,QAAQ,MAAM,MAAM,MAAM;AAChD;","names":["message"]}
1
+ {"version":3,"sources":["../src/match.ts"],"sourcesContent":["import {\n isChangeMessage,\n type ShapeStreamInterface,\n type ChangeMessage,\n type GetExtensions,\n type Operation,\n type Row,\n type Value,\n type Message,\n} from '@electric-sql/client'\n\nexport function matchStream<T extends Row<unknown>>(\n stream: ShapeStreamInterface<T>,\n operations: Array<Operation>,\n matchFn: (message: ChangeMessage<T>) => boolean,\n timeout = 60000 // ms\n): Promise<ChangeMessage<T>> {\n return new Promise<ChangeMessage<T>>((resolve, reject) => {\n const unsubscribe: () => void = stream.subscribe(\n (messages: Array<unknown>) => {\n const message = messages\n .filter((msg): msg is ChangeMessage<T> =>\n isChangeMessage(msg as Message<Row<never>>)\n )\n .find((message) => {\n const operation: Operation = message.headers.operation\n\n return operations.includes(operation) && matchFn(message)\n })\n\n if (message) {\n return finish(message)\n }\n }\n )\n\n const timeoutId: NodeJS.Timeout = setTimeout(() => {\n const msg: string = `matchStream timed out after ${timeout}ms`\n\n console.error(msg)\n\n reject(msg)\n }, timeout)\n\n function finish(message: ChangeMessage<T>): void {\n clearTimeout(timeoutId)\n\n unsubscribe()\n\n return resolve(message)\n }\n })\n}\n\nexport function matchBy<T extends Row<unknown>>(\n column: string,\n value: Value<GetExtensions<T>>\n): (message: ChangeMessage<T>) => boolean {\n return (message: ChangeMessage<T>) => message.value[column] === value\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAQK;AAEA,SAAS,YACd,QACA,YACA,SACA,UAAU,KACiB;AAC3B,SAAO,IAAI,QAA0B,CAAC,SAAS,WAAW;AACxD,UAAM,cAA0B,OAAO;AAAA,MACrC,CAAC,aAA6B;AAC5B,cAAM,UAAU,SACb;AAAA,UAAO,CAAC,QACP,gBAAgB,GAA0B;AAAA,QAC5C,EACC,KAAK,CAACA,aAAY;AACjB,gBAAM,YAAuBA,SAAQ,QAAQ;AAE7C,iBAAO,WAAW,SAAS,SAAS,KAAK,QAAQA,QAAO;AAAA,QAC1D,CAAC;AAEH,YAAI,SAAS;AACX,iBAAO,OAAO,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAA4B,WAAW,MAAM;AACjD,YAAM,MAAc,+BAA+B,OAAO;AAE1D,cAAQ,MAAM,GAAG;AAEjB,aAAO,GAAG;AAAA,IACZ,GAAG,OAAO;AAEV,aAAS,OAAO,SAAiC;AAC/C,mBAAa,SAAS;AAEtB,kBAAY;AAEZ,aAAO,QAAQ,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,QACd,QACA,OACwC;AACxC,SAAO,CAAC,YAA8B,QAAQ,MAAM,MAAM,MAAM;AAClE;","names":["message"]}
package/package.json CHANGED
@@ -1,36 +1,13 @@
1
1
  {
2
2
  "name": "@electric-sql/experimental",
3
- "version": "0.1.1",
4
3
  "description": "Experimental TypeScript features for ElectricSQL.",
5
- "type": "module",
6
- "main": "dist/cjs/index.cjs",
7
- "module": "dist/index.legacy-esm.js",
8
- "types": "dist/index.d.ts",
9
- "exports": {
10
- "./package.json": "./package.json",
11
- ".": {
12
- "types": "./dist/index.d.ts",
13
- "import": "./dist/index.mjs",
14
- "default": "./dist/cjs/index.cjs"
15
- }
16
- },
17
- "files": [
18
- "dist",
19
- "src"
20
- ],
21
- "sideEffects": false,
22
- "repository": {
23
- "type": "git",
24
- "url": "git+https://github.com/electric-sql/electric.git"
25
- },
4
+ "version": "0.1.2-beta.1",
26
5
  "author": "ElectricSQL team and contributors.",
27
- "license": "Apache-2",
28
6
  "bugs": {
29
7
  "url": "https://github.com/electric-sql/electric/issues"
30
8
  },
31
- "homepage": "https://electric-sql.com",
32
9
  "dependencies": {
33
- "@electric-sql/client": "0.9.1"
10
+ "@electric-sql/client": "1.0.0-beta.2"
34
11
  },
35
12
  "devDependencies": {
36
13
  "@types/pg": "^8.11.6",
@@ -50,9 +27,37 @@
50
27
  "uuid": "^10.0.0",
51
28
  "vitest": "^2.0.2"
52
29
  },
30
+ "exports": {
31
+ "./package.json": "./package.json",
32
+ ".": {
33
+ "import": {
34
+ "types": "./dist/index.d.ts",
35
+ "default": "./dist/index.mjs"
36
+ },
37
+ "require": {
38
+ "types": "./dist/cjs/index.d.cts",
39
+ "default": "./dist/cjs/index.cjs"
40
+ }
41
+ }
42
+ },
43
+ "files": [
44
+ "dist",
45
+ "src"
46
+ ],
47
+ "homepage": "https://electric-sql.com",
48
+ "license": "Apache-2",
49
+ "main": "dist/cjs/index.cjs",
50
+ "module": "dist/index.legacy-esm.js",
53
51
  "optionalDependencies": {
54
52
  "@rollup/rollup-darwin-arm64": "^4.18.1"
55
53
  },
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "git+https://github.com/electric-sql/electric.git"
57
+ },
58
+ "sideEffects": false,
59
+ "type": "module",
60
+ "types": "dist/index.d.ts",
56
61
  "typesVersions": {
57
62
  "*": {
58
63
  "*": [
@@ -61,10 +66,10 @@
61
66
  }
62
67
  },
63
68
  "scripts": {
64
- "test": "pnpm exec vitest",
65
- "typecheck": "tsc -p tsconfig.json",
66
- "build": "shx rm -rf dist && concurrently \"tsup\" \"tsc -p tsconfig.build.json\"",
69
+ "build": "shx rm -rf dist && tsup && tsc -p tsconfig.build.json",
70
+ "format": "eslint . --fix",
67
71
  "stylecheck": "eslint . --quiet",
68
- "format": "eslint . --fix"
72
+ "test": "pnpm exec vitest",
73
+ "typecheck": "tsc -p tsconfig.json"
69
74
  }
70
75
  }
package/src/match.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  type Operation,
7
7
  type Row,
8
8
  type Value,
9
+ type Message,
9
10
  } from '@electric-sql/client'
10
11
 
11
12
  export function matchStream<T extends Row<unknown>>(
@@ -15,27 +16,33 @@ export function matchStream<T extends Row<unknown>>(
15
16
  timeout = 60000 // ms
16
17
  ): Promise<ChangeMessage<T>> {
17
18
  return new Promise<ChangeMessage<T>>((resolve, reject) => {
18
- const unsubscribe: () => void = stream.subscribe((messages) => {
19
- const message = messages.filter(isChangeMessage).find((message) => {
20
- const operation = message.headers.operation
21
-
22
- return operations.includes(operation) && matchFn(message)
23
- })
24
-
25
- if (message) {
26
- return finish(message)
19
+ const unsubscribe: () => void = stream.subscribe(
20
+ (messages: Array<unknown>) => {
21
+ const message = messages
22
+ .filter((msg): msg is ChangeMessage<T> =>
23
+ isChangeMessage(msg as Message<Row<never>>)
24
+ )
25
+ .find((message) => {
26
+ const operation: Operation = message.headers.operation
27
+
28
+ return operations.includes(operation) && matchFn(message)
29
+ })
30
+
31
+ if (message) {
32
+ return finish(message)
33
+ }
27
34
  }
28
- })
35
+ )
29
36
 
30
- const timeoutId = setTimeout(() => {
31
- const msg = `matchStream timed out after ${timeout}ms`
37
+ const timeoutId: NodeJS.Timeout = setTimeout(() => {
38
+ const msg: string = `matchStream timed out after ${timeout}ms`
32
39
 
33
40
  console.error(msg)
34
41
 
35
42
  reject(msg)
36
43
  }, timeout)
37
44
 
38
- function finish(message: ChangeMessage<T>) {
45
+ function finish(message: ChangeMessage<T>): void {
39
46
  clearTimeout(timeoutId)
40
47
 
41
48
  unsubscribe()
@@ -49,5 +56,5 @@ export function matchBy<T extends Row<unknown>>(
49
56
  column: string,
50
57
  value: Value<GetExtensions<T>>
51
58
  ): (message: ChangeMessage<T>) => boolean {
52
- return (message) => message.value[column] === value
59
+ return (message: ChangeMessage<T>) => message.value[column] === value
53
60
  }