@rsdk/nats.object-storage 5.6.1-next.0 → 5.7.0-next.0

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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import './patch';
2
2
  export { NatsObjectStorageService } from './nats-object-storage.service';
3
- export { WatchObjectStorage, type ObjectStorageWatcher, } from './watch-object-storage.decorator';
3
+ export { WatchObjectStorage, type ObjectStorageWatcher, WatchConfig, } from './watch-object-storage.decorator';
4
4
  export { NatsObjectStorageModule } from './nats-object-storage.module';
5
5
  export { NatsObjectStorage } from './nats-object-storage';
6
6
  export * from './inject-object-storage-service.decorator';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mBAAiB;AAEjB,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AACjC,mFAG0C;AAFxC,oIAAA,kBAAkB,OAAA;AAGpB,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAChC,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,4EAA0D;AAC1D,8CAA4B;AAC5B,+FAA0F;AAAjF,wJAAA,gCAAgC,OAAA;AACzC,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mBAAiB;AAEjB,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AACjC,mFAI0C;AAHxC,oIAAA,kBAAkB,OAAA;AAIpB,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAChC,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,4EAA0D;AAC1D,8CAA4B;AAC5B,+FAA0F;AAAjF,wJAAA,gCAAgC,OAAA;AACzC,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA"}
@@ -5,6 +5,7 @@ export type WatchConfig = {
5
5
  includeHistory?: boolean;
6
6
  connectionName?: string;
7
7
  domain?: string;
8
+ filter?: string;
8
9
  /**
9
10
  * Flag indicating whether the readiness probe for bucket is optional.
10
11
  * If set to `true`, an error in the probe will not affect the global system status.
@@ -1 +1 @@
1
- {"version":3,"file":"watch-object-storage.decorator.js","sourceRoot":"","sources":["../src/watch-object-storage.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,yCAA6C;AAC7C,6CAGwB;AACxB,mDAG2B;AAsB3B;;GAEG;AACU,QAAA,6BAA6B,GAAG,2BAA2B,CAAC;AAE5D,QAAA,0BAA0B,GACrC,gBAAS,CAAC,eAAe,CAAc;IACrC,GAAG,EAAE,qCAA6B;CACnC,CAAC,CAAC;AAEL;;;;;;GAMG;AACI,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAkB,EAAE;IACxE,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GACpB,gDAAkC,CAAC,4BAA4B,CAC7D,MAAM,EACN,IAAA,sBAAa,EAAC;YACZ,UAAU;YACV,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,mBAAmB;SACvC,CAAC,CACH,CAAC;QAEJ,uBAAY,CAAC,YAAY,CACvB,MAAM,EACN,6CAAkC,EAClC,IAAA,mCAAqB,EAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EACvE,gBAAgB,EAChB,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,kBAAkB,sBAwB7B"}
1
+ {"version":3,"file":"watch-object-storage.decorator.js","sourceRoot":"","sources":["../src/watch-object-storage.decorator.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,yCAA6C;AAC7C,6CAGwB;AACxB,mDAG2B;AAuB3B;;GAEG;AACU,QAAA,6BAA6B,GAAG,2BAA2B,CAAC;AAE5D,QAAA,0BAA0B,GACrC,gBAAS,CAAC,eAAe,CAAc;IACrC,GAAG,EAAE,qCAA6B;CACnC,CAAC,CAAC;AAEL;;;;;;GAMG;AACI,MAAM,kBAAkB,GAAG,CAAC,MAAmB,EAAkB,EAAE;IACxE,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GACpB,gDAAkC,CAAC,4BAA4B,CAC7D,MAAM,EACN,IAAA,sBAAa,EAAC;YACZ,UAAU;YACV,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,mBAAmB;SACvC,CAAC,CACH,CAAC;QAEJ,uBAAY,CAAC,YAAY,CACvB,MAAM,EACN,6CAAkC,EAClC,IAAA,mCAAqB,EAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EACvE,gBAAgB,EAChB,IAAI,CACL,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,kBAAkB,sBAwB7B"}
@@ -42,4 +42,12 @@ export declare class WatchObjectStorageService {
42
42
  * instance and its metadata.
43
43
  */
44
44
  private discoverWatchers;
45
+ /**
46
+ * Converts a Nats filter pattern to a regular expression.
47
+ * TODO: Remove if server-side filtering is added (issue - https://github.com/nats-io/nats.deno/issues/744)
48
+ *
49
+ * @param filter - The filter pattern (e.g., `some-name`, `part-of-some-name.>`, `part-of-some-name.*.some`).
50
+ * @returns A RegExp object for matching keys.
51
+ */
52
+ private convertFilterToRegex;
45
53
  }
@@ -70,11 +70,15 @@ let WatchObjectStorageService = class WatchObjectStorageService {
70
70
  * @param watcher - The ObjectStorageWatcher instance.
71
71
  * @returns A Promise that resolves when the watch operation is complete.
72
72
  */
73
- async runWatch({ bucket, ...options }, watcher) {
73
+ async runWatch({ bucket, filter, ...options }, watcher) {
74
74
  const storage = await this.client.bind({ bucketName: bucket });
75
+ const regex = filter ? this.convertFilterToRegex(filter) : null;
75
76
  this.watch(storage.getRawStorage(), async (event) => {
76
77
  if (!event)
77
78
  return;
79
+ if (regex && !regex.test(event.name)) {
80
+ return;
81
+ }
78
82
  await (event.deleted ? watcher.onDelete(event) : watcher.onPut(event));
79
83
  }, options);
80
84
  }
@@ -102,6 +106,22 @@ let WatchObjectStorageService = class WatchObjectStorageService {
102
106
  return acc;
103
107
  }, []);
104
108
  }
109
+ /**
110
+ * Converts a Nats filter pattern to a regular expression.
111
+ * TODO: Remove if server-side filtering is added (issue - https://github.com/nats-io/nats.deno/issues/744)
112
+ *
113
+ * @param filter - The filter pattern (e.g., `some-name`, `part-of-some-name.>`, `part-of-some-name.*.some`).
114
+ * @returns A RegExp object for matching keys.
115
+ */
116
+ convertFilterToRegex(filter) {
117
+ // Escape special characters
118
+ const escaped = filter.replaceAll(/[-/\\^$+?.*()|[\]{}]/g, String.raw `\$&`);
119
+ const pattern = escaped
120
+ .replaceAll(/(?<=^|\\\.)\\\*(?=$|\\\.)/g, '[^.]+') // One segment surrounded by dots, beginning of line or end of line
121
+ .replaceAll(/(?<=^|\\\.)>(?=$|\\\.)/g, '.*'); // Many segments surrounded by dots, beginning of line or end of line
122
+ // Wrap the result in the start and end of the string
123
+ return new RegExp(`^${pattern}$`);
124
+ }
105
125
  };
106
126
  exports.WatchObjectStorageService = WatchObjectStorageService;
107
127
  exports.WatchObjectStorageService = WatchObjectStorageService = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"watch-object-storage.service.js","sourceRoot":"","sources":["../src/watch-object-storage.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch-object-storage.service.js","sourceRoot":"","sources":["../src/watch-object-storage.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,uCAAgD;AAChD,qCAA0C;AAI1C,+EAAyE;AAKzE,qFAA8E;AAE9E,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAGjB;IACA;IACA;IAEA;IANnB,YAEmB,MAAe,EACf,SAA2B,EAC3B,MAAgC,EAEhC,cAAuB;QAJvB,WAAM,GAAN,MAAM,CAAS;QACf,cAAS,GAAT,SAAS,CAAkB;QAC3B,WAAM,GAAN,MAAM,CAA0B;QAEhC,mBAAc,GAAd,cAAc,CAAS;IACvC,CAAC;IAEJ;;;OAGG;IACI,KAAK,CAAC,UAAU;QACrB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE/C,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW;QACtB,kBAAkB;IACpB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK,CAChB,OAAoB,EACpB,QAAqD,EACrD,IAGC;QAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;oBACzD,KAAK,EAAE,KAAK;oBACZ,GAAG,EAAE,KAAK;iBACX,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,QAAQ,CACpB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAe,EAC3C,OAA6B;QAE7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,IAAI,CAAC,KAAK,CACR,OAAO,CAAC,aAAa,EAAE,EACvB,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB;QAItB,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACf;;;iBAGK;YACL,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;YACjE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,GAAG,CAAC;YACb,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CACpD,2DAA0B,EAC1B,OAAO,CACR,CAAC;YAEF,IAAI,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBAChE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAiE,CAClE,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,oBAAoB,CAAC,MAAc;QACzC,4BAA4B;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,OAAO;aACpB,UAAU,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC,mEAAmE;aACrH,UAAU,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC,qEAAqE;QAErH,qDAAqD;QACrD,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AA5IY,8DAAyB;oCAAzB,yBAAyB;IAEjC,WAAA,IAAA,mBAAY,EAAC,yBAAyB,CAAC,CAAA;IAIvC,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;6CAFE,uBAAgB;QACnB,sDAAwB;GALxC,yBAAyB,CA4IrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/nats.object-storage",
3
- "version": "5.6.1-next.0",
3
+ "version": "5.7.0-next.0",
4
4
  "description": "Nats NestJS object storage",
5
5
  "main": "dist/index.js",
6
6
  "license": "Apache License 2.0",
@@ -38,5 +38,5 @@
38
38
  "rxjs": "^7.8.1"
39
39
  },
40
40
  "nx": {},
41
- "gitHead": "25bcd4d3fd8b6be48b6cab88db6f7c5f3bedb51a"
41
+ "gitHead": "1f7660ae22d235f67cc712ae91cab7a70423ab6f"
42
42
  }
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ export { NatsObjectStorageService } from './nats-object-storage.service';
4
4
  export {
5
5
  WatchObjectStorage,
6
6
  type ObjectStorageWatcher,
7
+ WatchConfig,
7
8
  } from './watch-object-storage.decorator';
8
9
  export { NatsObjectStorageModule } from './nats-object-storage.module';
9
10
  export { NatsObjectStorage } from './nats-object-storage';
@@ -16,6 +16,7 @@ export type WatchConfig = {
16
16
  includeHistory?: boolean;
17
17
  connectionName?: string;
18
18
  domain?: string;
19
+ filter?: string;
19
20
 
20
21
  /**
21
22
  * Flag indicating whether the readiness probe for bucket is optional.
@@ -76,16 +76,21 @@ export class WatchObjectStorageService {
76
76
  * @returns A Promise that resolves when the watch operation is complete.
77
77
  */
78
78
  private async runWatch(
79
- { bucket, ...options }: WatchConfig,
79
+ { bucket, filter, ...options }: WatchConfig,
80
80
  watcher: ObjectStorageWatcher,
81
81
  ): Promise<void> {
82
82
  const storage = await this.client.bind({ bucketName: bucket });
83
+ const regex = filter ? this.convertFilterToRegex(filter) : null;
83
84
 
84
85
  this.watch(
85
86
  storage.getRawStorage(),
86
87
  async (event) => {
87
88
  if (!event) return;
88
89
 
90
+ if (regex && !regex.test(event.name)) {
91
+ return;
92
+ }
93
+
89
94
  await (event.deleted ? watcher.onDelete(event) : watcher.onPut(event));
90
95
  },
91
96
  options,
@@ -127,4 +132,23 @@ export class WatchObjectStorageService {
127
132
  [] as { instance: ObjectStorageWatcher; metadata: WatchConfig }[],
128
133
  );
129
134
  }
135
+
136
+ /**
137
+ * Converts a Nats filter pattern to a regular expression.
138
+ * TODO: Remove if server-side filtering is added (issue - https://github.com/nats-io/nats.deno/issues/744)
139
+ *
140
+ * @param filter - The filter pattern (e.g., `some-name`, `part-of-some-name.>`, `part-of-some-name.*.some`).
141
+ * @returns A RegExp object for matching keys.
142
+ */
143
+ private convertFilterToRegex(filter: string): RegExp {
144
+ // Escape special characters
145
+ const escaped = filter.replaceAll(/[-/\\^$+?.*()|[\]{}]/g, String.raw`\$&`);
146
+
147
+ const pattern = escaped
148
+ .replaceAll(/(?<=^|\\\.)\\\*(?=$|\\\.)/g, '[^.]+') // One segment surrounded by dots, beginning of line or end of line
149
+ .replaceAll(/(?<=^|\\\.)>(?=$|\\\.)/g, '.*'); // Many segments surrounded by dots, beginning of line or end of line
150
+
151
+ // Wrap the result in the start and end of the string
152
+ return new RegExp(`^${pattern}$`);
153
+ }
130
154
  }