lua-cli 3.12.1 → 3.13.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/api/logs.api.service.d.ts +6 -3
- package/dist/api/logs.api.service.d.ts.map +1 -1
- package/dist/api/logs.api.service.js +5 -4
- package/dist/api/logs.api.service.js.map +1 -1
- package/dist/cli/command-definitions.d.ts.map +1 -1
- package/dist/cli/command-definitions.js +24 -2
- package/dist/cli/command-definitions.js.map +1 -1
- package/dist/commands/channels.d.ts.map +1 -1
- package/dist/commands/channels.js +2 -11
- package/dist/commands/channels.js.map +1 -1
- package/dist/commands/chat-log-probe.d.ts +59 -0
- package/dist/commands/chat-log-probe.d.ts.map +1 -0
- package/dist/commands/chat-log-probe.js +91 -0
- package/dist/commands/chat-log-probe.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +134 -28
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/compile.d.ts +7 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +32 -2
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +7 -8
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +108 -23
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/devices.d.ts.map +1 -1
- package/dist/commands/devices.js +3 -2
- package/dist/commands/devices.js.map +1 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +43 -20
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/features.d.ts.map +1 -1
- package/dist/commands/features.js +2 -12
- package/dist/commands/features.js.map +1 -1
- package/dist/commands/governance.d.ts.map +1 -1
- package/dist/commands/governance.js +4 -8
- package/dist/commands/governance.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +12 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrations.d.ts.map +1 -1
- package/dist/commands/integrations.js +4 -2
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +61 -23
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/log-tip.d.ts +79 -0
- package/dist/commands/log-tip.d.ts.map +1 -0
- package/dist/commands/log-tip.js +91 -0
- package/dist/commands/log-tip.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +97 -136
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/marketplace.d.ts.map +1 -1
- package/dist/commands/marketplace.js +14 -25
- package/dist/commands/marketplace.js.map +1 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +17 -19
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/persona.d.ts.map +1 -1
- package/dist/commands/persona.js +4 -30
- package/dist/commands/persona.js.map +1 -1
- package/dist/commands/postprocessors.d.ts.map +1 -1
- package/dist/commands/postprocessors.js +43 -17
- package/dist/commands/postprocessors.js.map +1 -1
- package/dist/commands/preprocessors.d.ts.map +1 -1
- package/dist/commands/preprocessors.js +43 -17
- package/dist/commands/preprocessors.js.map +1 -1
- package/dist/commands/production.d.ts.map +1 -1
- package/dist/commands/production.js +2 -12
- package/dist/commands/production.js.map +1 -1
- package/dist/commands/push-helpers.d.ts +42 -0
- package/dist/commands/push-helpers.d.ts.map +1 -0
- package/dist/commands/push-helpers.js +48 -0
- package/dist/commands/push-helpers.js.map +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +269 -54
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/pushBackup.d.ts.map +1 -1
- package/dist/commands/pushBackup.js +7 -1
- package/dist/commands/pushBackup.js.map +1 -1
- package/dist/commands/resources.d.ts.map +1 -1
- package/dist/commands/resources.js +2 -12
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +51 -36
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +14 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +734 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +37 -2
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/telemetry.d.ts.map +1 -1
- package/dist/commands/telemetry.js +4 -0
- package/dist/commands/telemetry.js.map +1 -1
- package/dist/commands/test-output.helpers.d.ts +24 -0
- package/dist/commands/test-output.helpers.d.ts.map +1 -0
- package/dist/commands/test-output.helpers.js +62 -0
- package/dist/commands/test-output.helpers.js.map +1 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +236 -76
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/webhooks.d.ts.map +1 -1
- package/dist/commands/webhooks.js +34 -21
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/compiler/agent-traverser.d.ts +50 -14
- package/dist/compiler/agent-traverser.d.ts.map +1 -1
- package/dist/compiler/agent-traverser.js +191 -86
- package/dist/compiler/agent-traverser.js.map +1 -1
- package/dist/compiler/compiler.d.ts +32 -0
- package/dist/compiler/compiler.d.ts.map +1 -1
- package/dist/compiler/compiler.js +143 -18
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/index.d.ts +1 -1
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +1 -1
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/plugins/base.d.ts +21 -0
- package/dist/compiler/plugins/base.d.ts.map +1 -1
- package/dist/compiler/plugins/base.js +10 -0
- package/dist/compiler/plugins/base.js.map +1 -1
- package/dist/compiler/plugins/skill.plugin.d.ts +35 -9
- package/dist/compiler/plugins/skill.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/skill.plugin.js +131 -84
- package/dist/compiler/plugins/skill.plugin.js.map +1 -1
- package/dist/compiler/types.d.ts +33 -0
- package/dist/compiler/types.d.ts.map +1 -1
- package/dist/compiler/types.js.map +1 -1
- package/dist/compiler/utils/ast-helpers.d.ts +1 -16
- package/dist/compiler/utils/ast-helpers.d.ts.map +1 -1
- package/dist/compiler/utils/ast-helpers.js +2 -31
- package/dist/compiler/utils/ast-helpers.js.map +1 -1
- package/dist/compiler/utils/common.d.ts +14 -0
- package/dist/compiler/utils/common.d.ts.map +1 -1
- package/dist/compiler/utils/common.js +38 -0
- package/dist/compiler/utils/common.js.map +1 -1
- package/dist/compiler/utils/path-resolver.d.ts +67 -10
- package/dist/compiler/utils/path-resolver.d.ts.map +1 -1
- package/dist/compiler/utils/path-resolver.js +120 -24
- package/dist/compiler/utils/path-resolver.js.map +1 -1
- package/dist/compiler/utils/reference-resolver.d.ts +196 -0
- package/dist/compiler/utils/reference-resolver.d.ts.map +1 -0
- package/dist/compiler/utils/reference-resolver.js +1030 -0
- package/dist/compiler/utils/reference-resolver.js.map +1 -0
- package/dist/compiler/utils/schema-converter.d.ts +25 -0
- package/dist/compiler/utils/schema-converter.d.ts.map +1 -1
- package/dist/compiler/utils/schema-converter.js +83 -4
- package/dist/compiler/utils/schema-converter.js.map +1 -1
- package/dist/compiler/utils/workspace.d.ts +35 -0
- package/dist/compiler/utils/workspace.d.ts.map +1 -0
- package/dist/compiler/utils/workspace.js +121 -0
- package/dist/compiler/utils/workspace.js.map +1 -0
- package/dist/compiler/utils/zod-runtime.mjs +5334 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/backup.d.ts +19 -1
- package/dist/interfaces/backup.d.ts.map +1 -1
- package/dist/interfaces/chat.d.ts +2 -2
- package/dist/interfaces/chat.d.ts.map +1 -1
- package/dist/interfaces/logs.d.ts +7 -4
- package/dist/interfaces/logs.d.ts.map +1 -1
- package/dist/primitives/base.handler.d.ts +10 -0
- package/dist/primitives/base.handler.d.ts.map +1 -1
- package/dist/primitives/base.handler.js +73 -44
- package/dist/primitives/base.handler.js.map +1 -1
- package/dist/primitives/job.handler.d.ts +5 -0
- package/dist/primitives/job.handler.d.ts.map +1 -1
- package/dist/primitives/job.handler.js +9 -0
- package/dist/primitives/job.handler.js.map +1 -1
- package/dist/primitives/webhook.handler.d.ts +2 -1
- package/dist/primitives/webhook.handler.d.ts.map +1 -1
- package/dist/primitives/webhook.handler.js +7 -1
- package/dist/primitives/webhook.handler.js.map +1 -1
- package/dist/services/auth.d.ts +8 -0
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +19 -0
- package/dist/services/auth.js.map +1 -1
- package/dist/services/sandbox.service.d.ts.map +1 -1
- package/dist/services/sandbox.service.js +6 -2
- package/dist/services/sandbox.service.js.map +1 -1
- package/dist/utils/aliases.d.ts +7 -0
- package/dist/utils/aliases.d.ts.map +1 -0
- package/dist/utils/aliases.js +457 -0
- package/dist/utils/aliases.js.map +1 -0
- package/dist/utils/backup-helpers.d.ts +24 -0
- package/dist/utils/backup-helpers.d.ts.map +1 -1
- package/dist/utils/backup-helpers.js +94 -8
- package/dist/utils/backup-helpers.js.map +1 -1
- package/dist/utils/chat-attachments.d.ts +15 -0
- package/dist/utils/chat-attachments.d.ts.map +1 -0
- package/dist/utils/chat-attachments.js +116 -0
- package/dist/utils/chat-attachments.js.map +1 -0
- package/dist/utils/cli.d.ts +24 -6
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +23 -9
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/hints.d.ts +81 -0
- package/dist/utils/hints.d.ts.map +1 -0
- package/dist/utils/hints.js +83 -0
- package/dist/utils/hints.js.map +1 -0
- package/dist/utils/suggest.d.ts +3 -0
- package/dist/utils/suggest.d.ts.map +1 -0
- package/dist/utils/suggest.js +34 -0
- package/dist/utils/suggest.js.map +1 -0
- package/dist/utils/write-info.d.ts +9 -0
- package/dist/utils/write-info.d.ts.map +1 -0
- package/dist/utils/write-info.js +11 -0
- package/dist/utils/write-info.js.map +1 -0
- package/docs/README.md +1 -1
- package/node_modules/@lua/shared-types/dist/index.d.mts +64 -2
- package/node_modules/@lua/shared-types/dist/index.d.ts +64 -2
- package/node_modules/@lua/shared-types/dist/index.js +27 -0
- package/node_modules/@lua/shared-types/dist/index.mjs +24 -0
- package/node_modules/@lua/shared-types/src/channel.type.ts +1 -0
- package/node_modules/@lua/shared-types/src/client-tools.types.ts +47 -0
- package/node_modules/@lua/shared-types/src/index.ts +2 -0
- package/node_modules/@lua/shared-types/src/vm-execution-log.types.ts +41 -0
- package/package.json +10 -6
- package/scripts/build-vendor.mjs +53 -0
- package/scripts/vendor-entry.mjs +11 -0
- package/template/examples/skills/tools/CustomDataTool.ts +1 -5
- package/template/examples/skills/tools/PremiumFeatureTool.ts +18 -18
- package/template/package.json +1 -1
package/package.json
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lua-cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.13.0",
|
|
4
4
|
"description": "Build, test, and deploy AI agents with custom tools, webhooks, and scheduled jobs. Features LuaAgent unified configuration, streaming chat, and batch deployment.",
|
|
5
5
|
"readmeFilename": "README.md",
|
|
6
6
|
"main": "dist/api-exports.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"lua": "./dist/index.js"
|
|
8
|
+
"lua": "./dist/index.js",
|
|
9
|
+
"heylua": "./dist/index.js",
|
|
10
|
+
"lua-ai": "./dist/index.js"
|
|
9
11
|
},
|
|
10
12
|
"exports": {
|
|
11
13
|
".": "./dist/api-exports.js"
|
|
12
14
|
},
|
|
13
15
|
"scripts": {
|
|
14
16
|
"clean": "rm -rf dist",
|
|
15
|
-
"build": "npm run clean && tsc && chmod +x dist/index.js",
|
|
17
|
+
"build": "npm run clean && tsc && npm run build:vendor && chmod +x dist/index.js",
|
|
18
|
+
"build:vendor": "node scripts/build-vendor.mjs",
|
|
16
19
|
"prepack": "node scripts/resolve-workspace-deps.cjs",
|
|
17
20
|
"postpack": "git checkout package.json",
|
|
18
21
|
"prepublishOnly": "npm run build",
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
"LICENSE"
|
|
62
65
|
],
|
|
63
66
|
"dependencies": {
|
|
64
|
-
"@lua/shared-types": "
|
|
67
|
+
"@lua/shared-types": "0.0.1",
|
|
65
68
|
"@tailwindcss/postcss": "^4.1.14",
|
|
66
69
|
"@tanstack/react-query": "^5.90.11",
|
|
67
70
|
"@truestamp/canonify": "^2.1.0",
|
|
@@ -78,13 +81,15 @@
|
|
|
78
81
|
"posthog-node": "^5.26.0",
|
|
79
82
|
"ts-evaluator": "^2.0.0",
|
|
80
83
|
"ts-morph": "^27.0.0",
|
|
81
|
-
"zod": "^3.
|
|
84
|
+
"zod": "^3.25.76",
|
|
82
85
|
"zod-to-json-schema": "^3.24.6"
|
|
83
86
|
},
|
|
84
87
|
"bundledDependencies": [
|
|
85
88
|
"@lua/shared-types"
|
|
86
89
|
],
|
|
87
90
|
"devDependencies": {
|
|
91
|
+
"@swc/core": "^1.15.0",
|
|
92
|
+
"@swc/jest": "^0.2.39",
|
|
88
93
|
"@types/diff": "^7.0.2",
|
|
89
94
|
"@types/inquirer": "^9.0.9",
|
|
90
95
|
"@types/jest": "^29.5.8",
|
|
@@ -96,7 +101,6 @@
|
|
|
96
101
|
"lodash": "^4.17.21",
|
|
97
102
|
"nock": "^14.0.11",
|
|
98
103
|
"stripe": "^19.2.0",
|
|
99
|
-
"ts-jest": "^29.1.1",
|
|
100
104
|
"ts-node": "^10.9.2",
|
|
101
105
|
"typescript": "^5.9.2"
|
|
102
106
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Bundles `zod` and `zod-to-json-schema` into a single self-contained ESM
|
|
4
|
+
* file at `dist/compiler/utils/zod-runtime.mjs`.
|
|
5
|
+
*
|
|
6
|
+
* Why: `schema-converter.ts` previously did `await import('zod')` at runtime,
|
|
7
|
+
* which made the compiler depend on the user's `lua-cli/node_modules/zod`
|
|
8
|
+
* being intact. Real-world npm/pnpm installs are sometimes corrupted (empty
|
|
9
|
+
* package dirs, partial extracts, hoisting conflicts), causing the dynamic
|
|
10
|
+
* import to throw `ERR_MODULE_NOT_FOUND` and tools to ship with no
|
|
11
|
+
* `inputSchema` — a silent failure that breaks deployed agents.
|
|
12
|
+
*
|
|
13
|
+
* This script ships zod inside lua-cli's own dist folder so resolution is
|
|
14
|
+
* anchored to a path lua-cli fully controls (`import.meta.url`-relative).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { build } from 'esbuild';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
import path from 'node:path';
|
|
20
|
+
import fs from 'node:fs/promises';
|
|
21
|
+
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = path.dirname(__filename);
|
|
24
|
+
|
|
25
|
+
const packageRoot = path.resolve(__dirname, '..');
|
|
26
|
+
const entry = path.join(packageRoot, 'scripts', 'vendor-entry.mjs');
|
|
27
|
+
const outdir = path.join(packageRoot, 'dist', 'compiler', 'utils');
|
|
28
|
+
const outfile = path.join(outdir, 'zod-runtime.mjs');
|
|
29
|
+
|
|
30
|
+
await fs.mkdir(outdir, { recursive: true });
|
|
31
|
+
|
|
32
|
+
const result = await build({
|
|
33
|
+
entryPoints: [entry],
|
|
34
|
+
outfile,
|
|
35
|
+
bundle: true,
|
|
36
|
+
format: 'esm',
|
|
37
|
+
platform: 'node',
|
|
38
|
+
target: 'node18',
|
|
39
|
+
// Keep readable bundle so stack traces remain useful when something goes
|
|
40
|
+
// wrong in user-supplied zod schemas.
|
|
41
|
+
minify: false,
|
|
42
|
+
sourcemap: false,
|
|
43
|
+
legalComments: 'none',
|
|
44
|
+
metafile: true,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const stat = await fs.stat(outfile);
|
|
48
|
+
const sizeKb = (stat.size / 1024).toFixed(1);
|
|
49
|
+
|
|
50
|
+
const inputs = Object.keys(result.metafile.inputs).filter(
|
|
51
|
+
(p) => p.includes('node_modules/zod') || p.includes('node_modules/zod-to-json-schema'),
|
|
52
|
+
);
|
|
53
|
+
console.log(`✅ Vendored ${inputs.length} files into dist/compiler/utils/zod-runtime.mjs (${sizeKb} KB)`);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendor entry point for the schema converter runtime.
|
|
3
|
+
*
|
|
4
|
+
* Bundled by `scripts/build-vendor.mjs` into
|
|
5
|
+
* `dist/compiler/utils/zod-runtime.mjs` so the compiler does not depend on
|
|
6
|
+
* `node_modules/zod` resolution at runtime. See
|
|
7
|
+
* `src/compiler/utils/schema-converter.ts` for the consumer.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export { z } from 'zod';
|
|
11
|
+
export { zodToJsonSchema } from 'zod-to-json-schema';
|
|
@@ -77,11 +77,7 @@ export class UpdateMovieTool implements LuaTool {
|
|
|
77
77
|
searchText: z.string().optional().describe("Updated search text for better discoverability")
|
|
78
78
|
});
|
|
79
79
|
async execute(input: z.infer<typeof this.inputSchema>) {
|
|
80
|
-
|
|
81
|
-
if (input.searchText) {
|
|
82
|
-
updateData.searchText = input.searchText;
|
|
83
|
-
}
|
|
84
|
-
return Data.update("movies", input.movieId, updateData);
|
|
80
|
+
return Data.update("movies", input.movieId, input.updates, input.searchText);
|
|
85
81
|
}
|
|
86
82
|
}
|
|
87
83
|
|
|
@@ -27,7 +27,7 @@ export default class PremiumFeatureTool implements LuaTool {
|
|
|
27
27
|
minPrice: z.number().optional().describe("Minimum price filter"),
|
|
28
28
|
maxPrice: z.number().optional().describe("Maximum price filter"),
|
|
29
29
|
}).optional().describe("Optional filters"),
|
|
30
|
-
sortBy: z.enum(["relevance", "price_asc", "price_desc"
|
|
30
|
+
sortBy: z.enum(["relevance", "price_asc", "price_desc"]).optional().describe("Sort order")
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
/**
|
|
@@ -39,8 +39,9 @@ export default class PremiumFeatureTool implements LuaTool {
|
|
|
39
39
|
* If condition throws an error, the tool is disabled (fail-closed behavior).
|
|
40
40
|
*/
|
|
41
41
|
condition = async () => {
|
|
42
|
-
// Get the current user's data
|
|
42
|
+
// Get the current user's data (returns null when called outside a conversation)
|
|
43
43
|
const user = await User.get();
|
|
44
|
+
if (!user) return false;
|
|
44
45
|
|
|
45
46
|
// Check if user has premium subscription
|
|
46
47
|
// The 'data' field contains custom user data stored via User.update()
|
|
@@ -58,33 +59,32 @@ export default class PremiumFeatureTool implements LuaTool {
|
|
|
58
59
|
// This only runs if condition returned true
|
|
59
60
|
const { query, filters, sortBy } = input;
|
|
60
61
|
|
|
61
|
-
//
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
limit: 20,
|
|
65
|
-
};
|
|
62
|
+
// Products.search(query) — returns ProductSearchInstance (iterable, has .products)
|
|
63
|
+
const searchResult = await Products.search(query);
|
|
64
|
+
const products = searchResult.products;
|
|
66
65
|
|
|
66
|
+
// Apply filters client-side
|
|
67
|
+
let filteredResults = products;
|
|
68
|
+
|
|
67
69
|
if (filters?.category) {
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (sortBy) {
|
|
72
|
-
searchOptions.sortBy = sortBy;
|
|
70
|
+
filteredResults = filteredResults.filter(p => p.category === filters.category);
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
const searchResult = await Products.search(searchOptions);
|
|
76
|
-
const products = searchResult.products;
|
|
77
|
-
|
|
78
|
-
// Apply price filters if provided
|
|
79
|
-
let filteredResults = products;
|
|
80
73
|
if (filters?.minPrice !== undefined || filters?.maxPrice !== undefined) {
|
|
81
|
-
filteredResults =
|
|
74
|
+
filteredResults = filteredResults.filter((product) => {
|
|
82
75
|
const price = product.price || 0;
|
|
83
76
|
if (filters.minPrice !== undefined && price < filters.minPrice) return false;
|
|
84
77
|
if (filters.maxPrice !== undefined && price > filters.maxPrice) return false;
|
|
85
78
|
return true;
|
|
86
79
|
});
|
|
87
80
|
}
|
|
81
|
+
|
|
82
|
+
// Sort client-side when requested
|
|
83
|
+
if (sortBy === "price_asc") {
|
|
84
|
+
filteredResults = [...filteredResults].sort((a, b) => (a.price || 0) - (b.price || 0));
|
|
85
|
+
} else if (sortBy === "price_desc") {
|
|
86
|
+
filteredResults = [...filteredResults].sort((a, b) => (b.price || 0) - (a.price || 0));
|
|
87
|
+
}
|
|
88
88
|
|
|
89
89
|
return {
|
|
90
90
|
query,
|