@positronic/cloudflare 0.0.39 → 0.0.41

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/src/api.js CHANGED
@@ -227,6 +227,7 @@ import { Hono } from 'hono';
227
227
  import { v4 as uuidv4 } from 'uuid';
228
228
  import { AwsClient } from 'aws4fetch';
229
229
  import { parseCronExpression } from 'cron-schedule';
230
+ import Fuse from 'fuse.js';
230
231
  import { getManifest, getWebhookManifest } from './brain-runner-do.js';
231
232
  import { RESOURCE_TYPES } from '@positronic/core';
232
233
  /**
@@ -700,7 +701,7 @@ app.get('/brains/watch', function(context) {
700
701
  });
701
702
  app.get('/brains', function(context) {
702
703
  return _async_to_generator(function() {
703
- var _context_req_query, manifest, query, brainFilenames, brains, validBrains;
704
+ var _context_req_query, manifest, query, brainFilenames, brains, validBrains, queryLower, exactMatch, fuse, results;
704
705
  return _ts_generator(this, function(_state) {
705
706
  switch(_state.label){
706
707
  case 0:
@@ -713,7 +714,7 @@ app.get('/brains', function(context) {
713
714
  }, 500)
714
715
  ];
715
716
  }
716
- query = (_context_req_query = context.req.query('q')) === null || _context_req_query === void 0 ? void 0 : _context_req_query.toLowerCase().trim();
717
+ query = (_context_req_query = context.req.query('q')) === null || _context_req_query === void 0 ? void 0 : _context_req_query.trim();
717
718
  brainFilenames = manifest.list();
718
719
  return [
719
720
  4,
@@ -755,20 +756,84 @@ app.get('/brains', function(context) {
755
756
  validBrains = brains.filter(function(brain) {
756
757
  return brain !== null;
757
758
  });
758
- // If query is provided, filter brains by fuzzy matching
759
- if (query) {
760
- validBrains = validBrains.filter(function(brain) {
761
- var titleMatch = brain.title.toLowerCase().includes(query);
762
- var descriptionMatch = brain.description.toLowerCase().includes(query);
763
- var filenameMatch = brain.filename.toLowerCase().includes(query);
764
- return titleMatch || descriptionMatch || filenameMatch;
765
- });
759
+ // If no query, return all brains
760
+ if (!query) {
761
+ return [
762
+ 2,
763
+ context.json({
764
+ brains: validBrains,
765
+ count: validBrains.length
766
+ })
767
+ ];
768
+ }
769
+ // Check for exact match on title or filename first
770
+ queryLower = query.toLowerCase();
771
+ exactMatch = validBrains.find(function(brain) {
772
+ return brain.title.toLowerCase() === queryLower || brain.filename.toLowerCase() === queryLower;
773
+ });
774
+ if (exactMatch) {
775
+ return [
776
+ 2,
777
+ context.json({
778
+ brains: [
779
+ exactMatch
780
+ ],
781
+ count: 1
782
+ })
783
+ ];
784
+ }
785
+ // Use fuse.js for fuzzy matching with weighted keys
786
+ fuse = new Fuse(validBrains, {
787
+ keys: [
788
+ {
789
+ name: 'title',
790
+ weight: 2
791
+ },
792
+ {
793
+ name: 'filename',
794
+ weight: 2
795
+ },
796
+ {
797
+ name: 'description',
798
+ weight: 0.5
799
+ }
800
+ ],
801
+ includeScore: true,
802
+ threshold: 0.4,
803
+ ignoreLocation: true
804
+ });
805
+ results = fuse.search(query);
806
+ // If no results, return empty
807
+ if (results.length === 0) {
808
+ return [
809
+ 2,
810
+ context.json({
811
+ brains: [],
812
+ count: 0
813
+ })
814
+ ];
815
+ }
816
+ // If top result is significantly better than others (score difference > 0.2),
817
+ // or there's only one result, return just that one
818
+ if (results.length === 1 || results.length > 1 && results[1].score - results[0].score > 0.2) {
819
+ return [
820
+ 2,
821
+ context.json({
822
+ brains: [
823
+ results[0].item
824
+ ],
825
+ count: 1
826
+ })
827
+ ];
766
828
  }
829
+ // Return all matching results, sorted by score (best first)
767
830
  return [
768
831
  2,
769
832
  context.json({
770
- brains: validBrains,
771
- count: validBrains.length
833
+ brains: results.map(function(r) {
834
+ return r.item;
835
+ }),
836
+ count: results.length
772
837
  })
773
838
  ];
774
839
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+BF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAi5C/C,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+BF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAi8C/C,eAAe,GAAG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/cloudflare",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,13 +31,14 @@
31
31
  "clean": "rm -rf tsconfig.tsbuildinfo dist"
32
32
  },
33
33
  "dependencies": {
34
- "@positronic/core": "^0.0.39",
35
- "@positronic/spec": "^0.0.39",
36
- "@positronic/template-new-project": "^0.0.39",
34
+ "@positronic/core": "^0.0.41",
35
+ "@positronic/spec": "^0.0.41",
36
+ "@positronic/template-new-project": "^0.0.41",
37
37
  "aws4fetch": "^1.0.18",
38
38
  "caz": "^2.0.0",
39
39
  "cron-schedule": "^5.0.4",
40
40
  "dotenv": "^16.0.3",
41
+ "fuse.js": "^7.1.0",
41
42
  "hono": "^4.2.3",
42
43
  "uuid": "^9.0.1"
43
44
  },