@kapeta/local-cluster-service 0.70.2 → 0.70.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [0.70.3](https://github.com/kapetacom/local-cluster-service/compare/v0.70.2...v0.70.3) (2024-09-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * better dedupe of refs ([48f676e](https://github.com/kapetacom/local-cluster-service/commit/48f676e0f6780580c2b77cdb8e6f3336f6633e77))
7
+ * match full pattern in lazy check ([5b5e9d7](https://github.com/kapetacom/local-cluster-service/commit/5b5e9d7cfaf3e6e9b3eacf378e90362e99433d86))
8
+
1
9
  ## [0.70.2](https://github.com/kapetacom/local-cluster-service/compare/v0.70.1...v0.70.2) (2024-09-09)
2
10
 
3
11
 
@@ -104,7 +104,7 @@ class PageQueue extends node_events_1.EventEmitter {
104
104
  generator.on('page_refs', async ({ event, references }) => {
105
105
  try {
106
106
  const matchesExistingPages = (url) => {
107
- return [...this.pages.keys()].some((path) => new RegExp(path.replaceAll('/*', '/[^/]+')).test(url));
107
+ return [...this.pages.keys()].some((path) => new RegExp(`^${path.replaceAll('/*', '/[^/]+')}$`).test(url.replace(/\?.*$/gi, '')));
108
108
  };
109
109
  const initialPrompts = [];
110
110
  const resourcePromises = references.map(async (reference) => {
@@ -125,16 +125,16 @@ class PageQueue extends node_events_1.EventEmitter {
125
125
  case 'javascript':
126
126
  //console.log('Ignoring reference', reference);
127
127
  break;
128
- case 'html':
129
- //console.log('Adding page generator for', reference);
130
- if (matchesExistingPages(reference.url)) {
128
+ case 'html': {
129
+ const normalizedPath = (0, page_utils_1.normalizePath)(reference.url);
130
+ if (matchesExistingPages(normalizedPath)) {
131
131
  break;
132
132
  }
133
- this.pages.set(reference.url, reference.description);
133
+ this.pages.set(normalizedPath, reference.description);
134
134
  initialPrompts.push({
135
135
  name: reference.name,
136
136
  title: reference.title,
137
- path: reference.url,
137
+ path: normalizedPath,
138
138
  method: 'GET',
139
139
  storage_prefix: this.systemId + '_',
140
140
  prompt: `Implement a page for ${reference.name} at ${reference.url} with the following description: ${reference.description}.\n` +
@@ -145,6 +145,7 @@ class PageQueue extends node_events_1.EventEmitter {
145
145
  theme: this.theme,
146
146
  });
147
147
  break;
148
+ }
148
149
  }
149
150
  });
150
151
  // Wait for resources to be generated
@@ -7,6 +7,7 @@ import { Response } from 'express';
7
7
  import { ConversationItem } from './stream';
8
8
  import { ImagePrompt } from './PageGenerator';
9
9
  export declare const SystemIdHeader = "System-Id";
10
+ export declare function normalizePath(path: string): string;
10
11
  export declare function writePageToDisk(systemId: string, event: StormEventPage): Promise<{
11
12
  path: string;
12
13
  }>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeConversationToFile = exports.readConversationFromFile = exports.readPageFromDisk = exports.readPageFromDiskAsString = exports.resolveReadPath = exports.getSystemBaseDir = exports.hasPageOnDisk = exports.writeImageToDisk = exports.writeAssetToDisk = exports.writePageToDisk = exports.SystemIdHeader = void 0;
6
+ exports.writeConversationToFile = exports.readConversationFromFile = exports.readPageFromDisk = exports.readPageFromDiskAsString = exports.resolveReadPath = exports.getSystemBaseDir = exports.hasPageOnDisk = exports.writeImageToDisk = exports.writeAssetToDisk = exports.writePageToDisk = exports.normalizePath = exports.SystemIdHeader = void 0;
7
7
  const node_os_1 = __importDefault(require("node:os"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const fs_extra_1 = __importDefault(require("fs-extra"));
@@ -14,6 +14,7 @@ function normalizePath(path) {
14
14
  .replace(/:[a-z][a-z_]*\b/gi, '*')
15
15
  .replace(/\{[a-z-.]+}/gi, '*');
16
16
  }
17
+ exports.normalizePath = normalizePath;
17
18
  async function writePageToDisk(systemId, event) {
18
19
  const baseDir = getSystemBaseDir(systemId);
19
20
  const filePath = getFilePath(event.payload.method);
@@ -104,7 +104,7 @@ class PageQueue extends node_events_1.EventEmitter {
104
104
  generator.on('page_refs', async ({ event, references }) => {
105
105
  try {
106
106
  const matchesExistingPages = (url) => {
107
- return [...this.pages.keys()].some((path) => new RegExp(path.replaceAll('/*', '/[^/]+')).test(url));
107
+ return [...this.pages.keys()].some((path) => new RegExp(`^${path.replaceAll('/*', '/[^/]+')}$`).test(url.replace(/\?.*$/gi, '')));
108
108
  };
109
109
  const initialPrompts = [];
110
110
  const resourcePromises = references.map(async (reference) => {
@@ -125,16 +125,16 @@ class PageQueue extends node_events_1.EventEmitter {
125
125
  case 'javascript':
126
126
  //console.log('Ignoring reference', reference);
127
127
  break;
128
- case 'html':
129
- //console.log('Adding page generator for', reference);
130
- if (matchesExistingPages(reference.url)) {
128
+ case 'html': {
129
+ const normalizedPath = (0, page_utils_1.normalizePath)(reference.url);
130
+ if (matchesExistingPages(normalizedPath)) {
131
131
  break;
132
132
  }
133
- this.pages.set(reference.url, reference.description);
133
+ this.pages.set(normalizedPath, reference.description);
134
134
  initialPrompts.push({
135
135
  name: reference.name,
136
136
  title: reference.title,
137
- path: reference.url,
137
+ path: normalizedPath,
138
138
  method: 'GET',
139
139
  storage_prefix: this.systemId + '_',
140
140
  prompt: `Implement a page for ${reference.name} at ${reference.url} with the following description: ${reference.description}.\n` +
@@ -145,6 +145,7 @@ class PageQueue extends node_events_1.EventEmitter {
145
145
  theme: this.theme,
146
146
  });
147
147
  break;
148
+ }
148
149
  }
149
150
  });
150
151
  // Wait for resources to be generated
@@ -7,6 +7,7 @@ import { Response } from 'express';
7
7
  import { ConversationItem } from './stream';
8
8
  import { ImagePrompt } from './PageGenerator';
9
9
  export declare const SystemIdHeader = "System-Id";
10
+ export declare function normalizePath(path: string): string;
10
11
  export declare function writePageToDisk(systemId: string, event: StormEventPage): Promise<{
11
12
  path: string;
12
13
  }>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeConversationToFile = exports.readConversationFromFile = exports.readPageFromDisk = exports.readPageFromDiskAsString = exports.resolveReadPath = exports.getSystemBaseDir = exports.hasPageOnDisk = exports.writeImageToDisk = exports.writeAssetToDisk = exports.writePageToDisk = exports.SystemIdHeader = void 0;
6
+ exports.writeConversationToFile = exports.readConversationFromFile = exports.readPageFromDisk = exports.readPageFromDiskAsString = exports.resolveReadPath = exports.getSystemBaseDir = exports.hasPageOnDisk = exports.writeImageToDisk = exports.writeAssetToDisk = exports.writePageToDisk = exports.normalizePath = exports.SystemIdHeader = void 0;
7
7
  const node_os_1 = __importDefault(require("node:os"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const fs_extra_1 = __importDefault(require("fs-extra"));
@@ -14,6 +14,7 @@ function normalizePath(path) {
14
14
  .replace(/:[a-z][a-z_]*\b/gi, '*')
15
15
  .replace(/\{[a-z-.]+}/gi, '*');
16
16
  }
17
+ exports.normalizePath = normalizePath;
17
18
  async function writePageToDisk(systemId, event) {
18
19
  const baseDir = getSystemBaseDir(systemId);
19
20
  const filePath = getFilePath(event.payload.method);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapeta/local-cluster-service",
3
- "version": "0.70.2",
3
+ "version": "0.70.3",
4
4
  "description": "Manages configuration, ports and service discovery for locally running Kapeta systems",
5
5
  "type": "commonjs",
6
6
  "exports": {
@@ -8,7 +8,7 @@ import { stormClient, UIPagePrompt } from './stormClient';
8
8
  import { ReferenceClassification, StormEvent, StormEventPage, StormImage, UIShell } from './events';
9
9
  import { EventEmitter } from 'node:events';
10
10
  import { PromiseQueue } from './PromiseQueue';
11
- import { hasPageOnDisk } from './page-utils';
11
+ import { hasPageOnDisk, normalizePath } from './page-utils';
12
12
 
13
13
  export interface ImagePrompt {
14
14
  name: string;
@@ -137,7 +137,9 @@ export class PageQueue extends EventEmitter {
137
137
  generator.on('page_refs', async ({ event, references }) => {
138
138
  try {
139
139
  const matchesExistingPages = (url: string) => {
140
- return [...this.pages.keys()].some((path) => new RegExp(path.replaceAll('/*', '/[^/]+')).test(url));
140
+ return [...this.pages.keys()].some((path) =>
141
+ new RegExp(`^${path.replaceAll('/*', '/[^/]+')}$`).test(url.replace(/\?.*$/gi, ''))
142
+ );
141
143
  };
142
144
  const initialPrompts: InitialPrompt[] = [];
143
145
  const resourcePromises = references.map(async (reference) => {
@@ -161,17 +163,17 @@ export class PageQueue extends EventEmitter {
161
163
  case 'javascript':
162
164
  //console.log('Ignoring reference', reference);
163
165
  break;
164
- case 'html':
165
- //console.log('Adding page generator for', reference);
166
- if (matchesExistingPages(reference.url)) {
166
+ case 'html': {
167
+ const normalizedPath = normalizePath(reference.url);
168
+ if (matchesExistingPages(normalizedPath)) {
167
169
  break;
168
170
  }
169
- this.pages.set(reference.url, reference.description);
171
+ this.pages.set(normalizedPath, reference.description);
170
172
 
171
173
  initialPrompts.push({
172
174
  name: reference.name,
173
175
  title: reference.title,
174
- path: reference.url,
176
+ path: normalizedPath,
175
177
  method: 'GET',
176
178
  storage_prefix: this.systemId + '_',
177
179
  prompt:
@@ -183,6 +185,7 @@ export class PageQueue extends EventEmitter {
183
185
  theme: this.theme,
184
186
  });
185
187
  break;
188
+ }
186
189
  }
187
190
  });
188
191
 
@@ -15,7 +15,7 @@ import { ImagePrompt } from './PageGenerator';
15
15
 
16
16
  export const SystemIdHeader = 'System-Id';
17
17
 
18
- function normalizePath(path: string) {
18
+ export function normalizePath(path: string) {
19
19
  return path
20
20
  .replace(/\?.*$/gi, '')
21
21
  .replace(/:[a-z][a-z_]*\b/gi, '*')