@lark-base-open/base-database-cli 1.1.0 → 1.3.7
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 +86 -0
- package/LICENSE +6 -0
- package/README.md +55 -31
- package/dist/ai-functions.d.ts +42 -0
- package/dist/ai-functions.d.ts.map +1 -0
- package/dist/ai-functions.js +327 -0
- package/dist/ai-functions.js.map +1 -0
- package/dist/archive.d.ts +21 -0
- package/dist/archive.d.ts.map +1 -1
- package/dist/archive.js +65 -10
- package/dist/archive.js.map +1 -1
- package/dist/auth.d.ts +8 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +60 -6
- package/dist/auth.js.map +1 -1
- package/dist/check.d.ts +74 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +283 -0
- package/dist/check.js.map +1 -0
- package/dist/dependency-policy.d.ts +10 -0
- package/dist/dependency-policy.d.ts.map +1 -0
- package/dist/dependency-policy.js +162 -0
- package/dist/dependency-policy.js.map +1 -0
- package/dist/deploy.d.ts +1 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +122 -175
- package/dist/deploy.js.map +1 -1
- package/dist/environment-variables.d.ts +52 -0
- package/dist/environment-variables.d.ts.map +1 -0
- package/dist/environment-variables.js +563 -0
- package/dist/environment-variables.js.map +1 -0
- package/dist/environment.d.ts +1 -1
- package/dist/environment.js +1 -1
- package/dist/environment.js.map +1 -1
- package/dist/function-input-types.d.ts +10 -0
- package/dist/function-input-types.d.ts.map +1 -0
- package/dist/function-input-types.js +160 -0
- package/dist/function-input-types.js.map +1 -0
- package/dist/function-schema.d.ts.map +1 -1
- package/dist/function-schema.js +89 -36
- package/dist/function-schema.js.map +1 -1
- package/dist/init-field-retry.d.ts +17 -0
- package/dist/init-field-retry.d.ts.map +1 -0
- package/dist/init-field-retry.js +127 -0
- package/dist/init-field-retry.js.map +1 -0
- package/dist/init-journal.d.ts +98 -0
- package/dist/init-journal.d.ts.map +1 -0
- package/dist/init-journal.js +492 -0
- package/dist/init-journal.js.map +1 -0
- package/dist/init-schema.d.ts +8 -0
- package/dist/init-schema.d.ts.map +1 -0
- package/dist/init-schema.js +423 -0
- package/dist/init-schema.js.map +1 -0
- package/dist/init.d.ts +14 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +886 -243
- package/dist/init.js.map +1 -1
- package/dist/lark-cli-error.d.ts +46 -0
- package/dist/lark-cli-error.d.ts.map +1 -0
- package/dist/lark-cli-error.js +171 -0
- package/dist/lark-cli-error.js.map +1 -0
- package/dist/lark-cli.d.ts +2 -1
- package/dist/lark-cli.d.ts.map +1 -1
- package/dist/lark-cli.js +292 -29
- package/dist/lark-cli.js.map +1 -1
- package/dist/mutation-schema.d.ts +146 -0
- package/dist/mutation-schema.d.ts.map +1 -0
- package/dist/mutation-schema.js +153 -0
- package/dist/mutation-schema.js.map +1 -0
- package/dist/mutation.d.ts +10 -0
- package/dist/mutation.d.ts.map +1 -0
- package/dist/mutation.js +131 -0
- package/dist/mutation.js.map +1 -0
- package/dist/npm.d.ts +1 -0
- package/dist/npm.d.ts.map +1 -1
- package/dist/npm.js +2 -2
- package/dist/npm.js.map +1 -1
- package/dist/preview-receipt.d.ts.map +1 -1
- package/dist/preview-receipt.js +15 -5
- package/dist/preview-receipt.js.map +1 -1
- package/dist/process.d.ts +3 -1
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +16 -4
- package/dist/process.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +241 -42
- package/dist/program.js.map +1 -1
- package/dist/project-build.d.ts +25 -0
- package/dist/project-build.d.ts.map +1 -0
- package/dist/project-build.js +229 -0
- package/dist/project-build.js.map +1 -0
- package/dist/project-context.d.ts +344 -0
- package/dist/project-context.d.ts.map +1 -0
- package/dist/project-context.js +485 -0
- package/dist/project-context.js.map +1 -0
- package/dist/project-layout.d.ts +5 -0
- package/dist/project-layout.d.ts.map +1 -0
- package/dist/project-layout.js +24 -0
- package/dist/project-layout.js.map +1 -0
- package/dist/public-sql-error.d.ts +25 -0
- package/dist/public-sql-error.d.ts.map +1 -0
- package/dist/public-sql-error.js +81 -0
- package/dist/public-sql-error.js.map +1 -0
- package/dist/pull.d.ts.map +1 -1
- package/dist/pull.js +54 -15
- package/dist/pull.js.map +1 -1
- package/dist/site-readme.d.ts +3 -0
- package/dist/site-readme.d.ts.map +1 -0
- package/dist/site-readme.js +83 -0
- package/dist/site-readme.js.map +1 -0
- package/dist/workspace-fingerprint.d.ts +21 -1
- package/dist/workspace-fingerprint.d.ts.map +1 -1
- package/dist/workspace-fingerprint.js +81 -2
- package/dist/workspace-fingerprint.js.map +1 -1
- package/package.json +2 -1
- package/skills/lark-base-database/SKILL.md +70 -53
- package/skills/lark-base-database/references/ai-function.md +471 -0
- package/skills/lark-base-database/references/base-capability-routing.md +3 -3
- package/skills/lark-base-database/references/database-function-limitations.md +46 -0
- package/skills/lark-base-database/references/database-function.md +349 -0
- package/skills/lark-base-database/references/design/components/actions-fields.md +16 -0
- package/skills/lark-base-database/references/design/components/code/controls.css +122 -0
- package/skills/lark-base-database/references/design/components/code/controls.tsx +73 -0
- package/skills/lark-base-database/references/design/components/code/date-picker.tsx +42 -0
- package/skills/lark-base-database/references/design/components/code/floating.tsx +41 -0
- package/skills/lark-base-database/references/design/components/code/overlays.tsx +19 -0
- package/skills/lark-base-database/references/design/components/code/select.tsx +34 -0
- package/skills/lark-base-database/references/design/components/code/styles.d.ts +1 -0
- package/skills/lark-base-database/references/design/components/code/theme.css +49 -0
- package/skills/lark-base-database/references/design/components/code/usage.tsx +38 -0
- package/skills/lark-base-database/references/design/components/date-time-number.md +9 -0
- package/skills/lark-base-database/references/design/components/feedback-navigation.md +9 -0
- package/skills/lark-base-database/references/design/components/index.md +18 -0
- package/skills/lark-base-database/references/design/components/overlays.md +9 -0
- package/skills/lark-base-database/references/design/components/patterns/flat-business.md +7 -0
- package/skills/lark-base-database/references/design/components/selection.md +24 -0
- package/skills/lark-base-database/references/design/components.md +91 -0
- package/skills/lark-base-database/references/design/composition.md +90 -0
- package/skills/lark-base-database/references/design/control-recipes.md +107 -0
- package/skills/lark-base-database/references/design/examples.md +172 -0
- package/skills/lark-base-database/references/design/foundations.md +126 -0
- package/skills/lark-base-database/references/design/review.md +82 -0
- package/skills/lark-base-database/references/design/scenes/analysis-report.md +66 -0
- package/skills/lark-base-database/references/design/scenes/brand-showcase.md +70 -0
- package/skills/lark-base-database/references/design/scenes/business-operations.md +85 -0
- package/skills/lark-base-database/references/design/scenes/campaign-report.md +66 -0
- package/skills/lark-base-database/references/design/scenes/dashboard.md +77 -0
- package/skills/lark-base-database/references/design/scenes/festive-campaign.md +69 -0
- package/skills/lark-base-database/references/design/theme.md +27 -0
- package/skills/lark-base-database/references/design/typography.md +56 -0
- package/skills/lark-base-database/references/development.md +165 -32
- package/skills/lark-base-database/references/environment-variables.md +55 -0
- package/skills/lark-base-database/references/faas.md +41 -48
- package/skills/lark-base-database/references/file-transfer.md +25 -25
- package/skills/lark-base-database/references/frontend-design-guide.md +33 -77
- package/skills/lark-base-database/references/mutations.md +295 -0
- package/skills/lark-base-database/references/permission-design.md +24 -24
- package/skills/lark-base-database/references/release.md +54 -27
- package/skills/lark-base-database/references/style-guide.md +10 -67
- package/skills/lark-base-database/references/verification.md +17 -13
- package/skills/lark-base-database/references/workspace.md +71 -22
- package/templates/database-starter/README.md +34 -4
- package/templates/database-starter/database-functions/README.md +8 -0
- package/templates/database-starter/mutations/README.md +19 -0
- package/templates/database-starter/page/README.md +25 -19
- package/templates/database-starter/page/package-lock.json +8 -16
- package/templates/database-starter/page/package.json +2 -3
- package/templates/database-starter/page/src/App.tsx +23 -3
- package/templates/database-starter/page/src/components/UserSelectorEditor/index.tsx +32 -4
- package/templates/database-starter/page/src/components/UserSelectorPanel/index.tsx +104 -34
- package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.test.ts +55 -11
- package/templates/database-starter/page/src/components/UserSelectorPanel/user-search.ts +68 -25
- package/templates/database-starter/page/src/components/database-runtime-ready.tsx +1 -1
- package/templates/database-starter/page/src/components/database-user-menu/index.tsx +4 -7
- package/templates/database-starter/page/src/components/feedback/page-state.tsx +40 -5
- package/templates/database-starter/page/src/components/floating-button/assets/edit-active.svg +3 -0
- package/templates/database-starter/page/src/components/floating-button/assets/edit-default.svg +3 -0
- package/templates/database-starter/page/src/components/floating-button/index.tsx +75 -112
- package/templates/database-starter/page/src/components/floating-button/utils/project-meta.test.ts +107 -37
- package/templates/database-starter/page/src/components/floating-button/utils/project-meta.ts +13 -50
- package/templates/database-starter/page/src/components/ui-language.test.tsx +101 -0
- package/templates/database-starter/page/src/examples/ai-function/ImageTaskOperation.tsx +202 -0
- package/templates/database-starter/page/src/examples/ai-function/README.md +14 -0
- package/templates/database-starter/page/src/examples/ai-function/TextStreamOperation.tsx +184 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-copy.ts +173 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-delta.test.ts +30 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-delta.ts +26 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-language.test.tsx +86 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-media-panel.test.ts +201 -0
- package/templates/database-starter/page/src/examples/ai-function/ai-media-panel.tsx +382 -0
- package/templates/database-starter/page/src/lib/attachment-image.tsx +144 -0
- package/templates/database-starter/page/src/lib/database-function-inputs.generated.ts +4 -0
- package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +180 -76
- package/templates/database-starter/page/src/lib/database-runtime.test.ts +130 -10
- package/templates/database-starter/page/src/lib/database-runtime.ts +484 -51
- package/templates/database-starter/page/src/lib/date-time.ts +61 -0
- package/templates/database-starter/page/src/lib/ui-language.ts +86 -0
- package/templates/database-starter/page/src/main.tsx +1 -1
- package/templates/database-starter/page/tsconfig.json +2 -2
- package/templates/database-starter/page/vite.config.ts +1 -2
- package/templates/database-starter/prettierignore +1 -1
- package/templates/database-starter/server-functions/README.md +2 -2
- package/templates/database-starter/server-functions/package-lock.json +4 -4
- package/templates/database-starter/server-functions/package.json +1 -1
- package/dist/agent-guide.d.ts +0 -19
- package/dist/agent-guide.d.ts.map +0 -1
- package/dist/agent-guide.js +0 -31
- package/dist/agent-guide.js.map +0 -1
- package/dist/database-skill.d.ts +0 -24
- package/dist/database-skill.d.ts.map +0 -1
- package/dist/database-skill.js +0 -151
- package/dist/database-skill.js.map +0 -1
- package/skills/lark-base-database/references/base-sql-unsupported.md +0 -42
- package/skills/lark-base-database/references/database-capability-skill.md +0 -40
- package/skills/lark-base-database/references/sql-function.md +0 -289
- package/templates/database-capability/SKILL.md.tmpl +0 -58
- package/templates/database-starter/page/src/components/floating-button/chatbot-entry.test.ts +0 -23
- package/templates/database-starter/page/src/components/floating-button/chatbot-entry.tsx +0 -873
- package/templates/database-starter/page/src/components/floating-button/local-chat-panel.test.ts +0 -25
- package/templates/database-starter/page/src/components/floating-button/local-chat-panel.tsx +0 -197
- package/templates/database-starter/page/src/components/floating-button/utils/env.ts +0 -18
- package/templates/database-starter/sql/README.md +0 -8
package/dist/program.js
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
1
2
|
import { Command, Option } from 'commander';
|
|
3
|
+
import { debugAIFunction, getAIFunction, getAIFunctionTask, getAIFunctionUsage, listAIFunctions, syncAIFunctions, validateAIFunction, } from './ai-functions.js';
|
|
2
4
|
import { doctor, login, logout, whoami } from './auth.js';
|
|
5
|
+
import { CheckFailureError, checkProject } from './check.js';
|
|
3
6
|
import { deploymentStatus, deployProject } from './deploy.js';
|
|
7
|
+
import { clearEnvironmentVariable, declareEnvironmentVariable, ENVIRONMENT_VARIABLE_TARGETS, ENVIRONMENT_VARIABLE_TYPES, listEnvironmentVariables, setEnvironmentVariable, } from './environment-variables.js';
|
|
4
8
|
import { initializeProject } from './init.js';
|
|
5
|
-
import {
|
|
9
|
+
import { InitFailureError } from './init-journal.js';
|
|
10
|
+
import { runProjectLarkCli } from './lark-cli.js';
|
|
6
11
|
import { validateLarkProfile } from './profile-name.js';
|
|
7
12
|
import { pullProject } from './pull.js';
|
|
13
|
+
import { getProjectContext, summarizeProjectContext, } from './project-context.js';
|
|
8
14
|
import { installSkill } from './skill.js';
|
|
9
|
-
import { discoveryArgs, installDatabaseSkill, invocationArgs, runDatabaseSkillRequest, } from './database-skill.js';
|
|
10
15
|
function printJson(value) {
|
|
11
16
|
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
12
17
|
}
|
|
18
|
+
class JsonOutputError extends Error {
|
|
19
|
+
output;
|
|
20
|
+
constructor(output) {
|
|
21
|
+
super('Command failed with structured JSON output');
|
|
22
|
+
this.output = output;
|
|
23
|
+
this.name = 'JsonOutputError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
13
26
|
export function createBaseDatabaseProgram(options) {
|
|
14
27
|
const [defaultProfile] = options.runtimeProfiles;
|
|
15
28
|
if (!defaultProfile) {
|
|
@@ -82,44 +95,21 @@ export function createBaseDatabaseProgram(options) {
|
|
|
82
95
|
printJson({ ok: true, installed });
|
|
83
96
|
});
|
|
84
97
|
}
|
|
85
|
-
|
|
86
|
-
.command('
|
|
87
|
-
.description('
|
|
88
|
-
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
.
|
|
92
|
-
.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
appToken: args.appToken,
|
|
99
|
-
title: args.title,
|
|
100
|
-
directory: args.dir,
|
|
101
|
-
profile: defaultProfile,
|
|
102
|
-
larkProfile,
|
|
103
|
-
}),
|
|
98
|
+
program
|
|
99
|
+
.command('context')
|
|
100
|
+
.description('Print a local, read-only database project context snapshot')
|
|
101
|
+
.argument('[directory]', 'Project directory', '.')
|
|
102
|
+
.option('--json', 'Print JSON (accepted for explicit machine-readable use)', false)
|
|
103
|
+
.option('--summary', 'Omit workspace paths, fingerprints and per-resource details', false)
|
|
104
|
+
.addHelpText('after', '\nReads only local project configuration, Catalog, Function metadata and receipts. Does not authenticate, contact application APIs, build or deploy.')
|
|
105
|
+
.action((directory, commandOptions) => {
|
|
106
|
+
const context = getProjectContext({
|
|
107
|
+
directory,
|
|
108
|
+
cliVersion: options.version,
|
|
109
|
+
defaultEnvironment: defaultProfile.name,
|
|
110
|
+
larkProfile: selectedLarkProfile(),
|
|
104
111
|
});
|
|
105
|
-
|
|
106
|
-
databaseSkill
|
|
107
|
-
.command('discover')
|
|
108
|
-
.requiredOption('--app-token <token>', 'Application token')
|
|
109
|
-
.option('--page-size <count>', 'Functions per page', '20')
|
|
110
|
-
.option('--page-token <token>', 'Opaque discovery cursor')
|
|
111
|
-
.action(async (args) => {
|
|
112
|
-
const request = discoveryArgs(args.appToken, Number(args.pageSize), args.pageToken);
|
|
113
|
-
printJson(await runDatabaseSkillRequest(defaultProfile, request, selectedLarkProfile()));
|
|
114
|
-
});
|
|
115
|
-
databaseSkill
|
|
116
|
-
.command('invoke')
|
|
117
|
-
.requiredOption('--app-token <token>', 'Application token')
|
|
118
|
-
.requiredOption('--function-id <id>', 'Discovered Function ID')
|
|
119
|
-
.requiredOption('--params <json>', 'Raw business params as JSON (not an envelope)')
|
|
120
|
-
.action(async (args) => {
|
|
121
|
-
const request = invocationArgs(args.appToken, args.functionId, args.params);
|
|
122
|
-
printJson(await runDatabaseSkillRequest(defaultProfile, request, selectedLarkProfile()));
|
|
112
|
+
printJson(commandOptions.summary ? summarizeProjectContext(context) : context);
|
|
123
113
|
});
|
|
124
114
|
program
|
|
125
115
|
.command('init')
|
|
@@ -131,6 +121,7 @@ export function createBaseDatabaseProgram(options) {
|
|
|
131
121
|
.requiredOption('--name <name>', 'Application name; also names a Base created with --schema')
|
|
132
122
|
.option('--description <description>', 'Application description')
|
|
133
123
|
.option('--time-zone <timeZone>', 'Base time zone', 'Asia/Shanghai')
|
|
124
|
+
.option('--resume', 'Resume the matching initialization receipt after read-only reconciliation', false)
|
|
134
125
|
.addOption(environmentOption())
|
|
135
126
|
.action(async (directory, commandOptions) => {
|
|
136
127
|
const profile = runtimeProfile(commandOptions.env);
|
|
@@ -144,6 +135,7 @@ export function createBaseDatabaseProgram(options) {
|
|
|
144
135
|
description: commandOptions.description,
|
|
145
136
|
timeZone: commandOptions.timeZone,
|
|
146
137
|
environment: commandOptions.env,
|
|
138
|
+
resume: commandOptions.resume,
|
|
147
139
|
runtimeProfile: profile,
|
|
148
140
|
}));
|
|
149
141
|
});
|
|
@@ -163,6 +155,33 @@ export function createBaseDatabaseProgram(options) {
|
|
|
163
155
|
runtimeProfile: profile,
|
|
164
156
|
}));
|
|
165
157
|
});
|
|
158
|
+
program
|
|
159
|
+
.command('check')
|
|
160
|
+
.description('Check local Function metadata, prepare dependencies and build Page/FaaS without deploying')
|
|
161
|
+
.argument('[directory]', 'Project directory', '.')
|
|
162
|
+
.option('--no-install', 'Reuse Page/FaaS dependencies; fail if missing')
|
|
163
|
+
.option('--force-install', 'Reinstall Page and FaaS dependencies', false)
|
|
164
|
+
.option('--force-build', 'Ignore successful Page/FaaS build cache', false)
|
|
165
|
+
.option('--json', 'Emit one JSON document on success or failure and capture build output', false)
|
|
166
|
+
.addHelpText('after', '\nUses the same npm installer and build scripts as deploy. Regenerates Page Function input types from local metadata, may install dependencies and write local build output; does not contact application APIs, change bindings, upload artifacts or publish. Server-side Database Function query validation is not run.')
|
|
167
|
+
.action(async (directory, commandOptions) => {
|
|
168
|
+
try {
|
|
169
|
+
printJson(await checkProject({
|
|
170
|
+
directory,
|
|
171
|
+
install: commandOptions.install,
|
|
172
|
+
forceInstall: commandOptions.forceInstall,
|
|
173
|
+
forceBuild: commandOptions.forceBuild,
|
|
174
|
+
json: commandOptions.json,
|
|
175
|
+
runtimeProfile: defaultProfile,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (commandOptions.json && error instanceof CheckFailureError) {
|
|
180
|
+
throw new JsonOutputError(error.report);
|
|
181
|
+
}
|
|
182
|
+
throw error;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
166
185
|
program
|
|
167
186
|
.command('deploy')
|
|
168
187
|
.description('Build and publish the current database application')
|
|
@@ -187,10 +206,96 @@ export function createBaseDatabaseProgram(options) {
|
|
|
187
206
|
});
|
|
188
207
|
program
|
|
189
208
|
.command('lark-cli')
|
|
190
|
-
.description('Run lark-cli with
|
|
191
|
-
.argument('[arguments...]', '
|
|
209
|
+
.description('Run lark-cli with project routing; help, skills and schema discovery also work before init')
|
|
210
|
+
.argument('[arguments...]', 'lark-cli arguments; ordinary JSON API responses are normalized')
|
|
192
211
|
.allowUnknownOption()
|
|
193
212
|
.action(async (args) => runProjectLarkCli(args, defaultProfile, selectedLarkProfile()));
|
|
213
|
+
const environmentVariables = program
|
|
214
|
+
.command('environment-variables')
|
|
215
|
+
.alias('env-vars')
|
|
216
|
+
.description('Manage database application environment variables through the current user');
|
|
217
|
+
const targetOption = (mandatory = false) => {
|
|
218
|
+
const option = new Option('--target <target>', 'FaaS runtime environment').choices([...ENVIRONMENT_VARIABLE_TARGETS]);
|
|
219
|
+
return mandatory ? option.makeOptionMandatory() : option.default('preview');
|
|
220
|
+
};
|
|
221
|
+
const typeOption = () => new Option('--type <type>', 'Environment variable type')
|
|
222
|
+
.choices([...ENVIRONMENT_VARIABLE_TYPES])
|
|
223
|
+
.makeOptionMandatory();
|
|
224
|
+
environmentVariables
|
|
225
|
+
.command('list')
|
|
226
|
+
.description('List Config values and masked Secret values')
|
|
227
|
+
.argument('[directory]', 'Project directory', '.')
|
|
228
|
+
.addOption(targetOption())
|
|
229
|
+
.action(async (directory, commandOptions) => printJson(await listEnvironmentVariables({
|
|
230
|
+
directory,
|
|
231
|
+
target: commandOptions.target,
|
|
232
|
+
runtimeProfile: defaultProfile,
|
|
233
|
+
larkProfile: selectedLarkProfile(),
|
|
234
|
+
})));
|
|
235
|
+
environmentVariables
|
|
236
|
+
.command('declare')
|
|
237
|
+
.description('Declare a Config or Secret without setting its value')
|
|
238
|
+
.argument('<name>', 'Environment variable name')
|
|
239
|
+
.argument('[directory]', 'Project directory', '.')
|
|
240
|
+
.addOption(targetOption(true))
|
|
241
|
+
.addOption(typeOption())
|
|
242
|
+
.requiredOption('--description <description>', 'Purpose shown to users')
|
|
243
|
+
.option('--required', 'Require a value before publishing')
|
|
244
|
+
.option('--optional', 'Allow publishing without a value')
|
|
245
|
+
.option('--force', 'Replace metadata for an existing shared definition after explicit confirmation', false)
|
|
246
|
+
.action(async (name, directory, commandOptions) => {
|
|
247
|
+
if (commandOptions.required === commandOptions.optional) {
|
|
248
|
+
throw new Error('Declare whether the variable is required or optional with exactly one of --required or --optional');
|
|
249
|
+
}
|
|
250
|
+
printJson(await declareEnvironmentVariable({
|
|
251
|
+
directory,
|
|
252
|
+
name,
|
|
253
|
+
target: commandOptions.target,
|
|
254
|
+
type: commandOptions.type,
|
|
255
|
+
description: commandOptions.description,
|
|
256
|
+
required: commandOptions.required === true,
|
|
257
|
+
force: commandOptions.force,
|
|
258
|
+
runtimeProfile: defaultProfile,
|
|
259
|
+
larkProfile: selectedLarkProfile(),
|
|
260
|
+
}));
|
|
261
|
+
});
|
|
262
|
+
environmentVariables
|
|
263
|
+
.command('set')
|
|
264
|
+
.description('Set one target-environment value for an existing definition')
|
|
265
|
+
.argument('<name>', 'Environment variable name')
|
|
266
|
+
.argument('[directory]', 'Project directory', '.')
|
|
267
|
+
.addOption(targetOption(true))
|
|
268
|
+
.option('--value-stdin', 'Read the value from standard input', false)
|
|
269
|
+
.action(async (name, directory, commandOptions) => {
|
|
270
|
+
if (!commandOptions.valueStdin) {
|
|
271
|
+
throw new Error('Use --value-stdin to provide the value');
|
|
272
|
+
}
|
|
273
|
+
const value = readFileSync(0, 'utf8').replace(/\r?\n$/, '');
|
|
274
|
+
if (value === '') {
|
|
275
|
+
throw new Error('Environment variable value cannot be empty');
|
|
276
|
+
}
|
|
277
|
+
printJson(await setEnvironmentVariable({
|
|
278
|
+
directory,
|
|
279
|
+
name,
|
|
280
|
+
target: commandOptions.target,
|
|
281
|
+
value,
|
|
282
|
+
runtimeProfile: defaultProfile,
|
|
283
|
+
larkProfile: selectedLarkProfile(),
|
|
284
|
+
}));
|
|
285
|
+
});
|
|
286
|
+
environmentVariables
|
|
287
|
+
.command('clear')
|
|
288
|
+
.description('Clear one value without deleting its shared definition')
|
|
289
|
+
.argument('<name>', 'Environment variable name')
|
|
290
|
+
.argument('[directory]', 'Project directory', '.')
|
|
291
|
+
.addOption(targetOption(true))
|
|
292
|
+
.action(async (name, directory, commandOptions) => printJson(await clearEnvironmentVariable({
|
|
293
|
+
directory,
|
|
294
|
+
name,
|
|
295
|
+
target: commandOptions.target,
|
|
296
|
+
runtimeProfile: defaultProfile,
|
|
297
|
+
larkProfile: selectedLarkProfile(),
|
|
298
|
+
})));
|
|
194
299
|
const deployments = program
|
|
195
300
|
.command('deployments')
|
|
196
301
|
.description('Inspect database application deployments');
|
|
@@ -201,11 +306,105 @@ export function createBaseDatabaseProgram(options) {
|
|
|
201
306
|
.argument('[directory]', 'Project directory', '.')
|
|
202
307
|
.option('--wait', 'Poll until the task finishes', false)
|
|
203
308
|
.action(async (publishId, directory, commandOptions) => printJson(await deploymentStatus(directory, publishId, commandOptions.wait, defaultProfile, selectedLarkProfile())));
|
|
309
|
+
const aiFunctions = program
|
|
310
|
+
.command('ai-functions')
|
|
311
|
+
.description('Manage AI Functions (function_type=4) declared under ai/');
|
|
312
|
+
aiFunctions
|
|
313
|
+
.command('list')
|
|
314
|
+
.description('List AI Functions')
|
|
315
|
+
.argument('[directory]', 'Project directory', '.')
|
|
316
|
+
.action(async (directory) => printJson(await listAIFunctions({ directory, runtimeProfile: defaultProfile })));
|
|
317
|
+
aiFunctions
|
|
318
|
+
.command('pull')
|
|
319
|
+
.description('Read one AI Function config for local editing / diff')
|
|
320
|
+
.argument('<function-key>', 'AI Function key')
|
|
321
|
+
.argument('[directory]', 'Project directory', '.')
|
|
322
|
+
.action(async (functionKey, directory) => printJson(await getAIFunction(functionKey, {
|
|
323
|
+
directory,
|
|
324
|
+
runtimeProfile: defaultProfile,
|
|
325
|
+
})));
|
|
326
|
+
aiFunctions
|
|
327
|
+
.command('sync')
|
|
328
|
+
.description('Full-cover sync local ai/ declarations to the Site')
|
|
329
|
+
.argument('[directory]', 'Project directory', '.')
|
|
330
|
+
.action(async (directory) => printJson(await syncAIFunctions({ directory, runtimeProfile: defaultProfile })));
|
|
331
|
+
aiFunctions
|
|
332
|
+
.command('validate')
|
|
333
|
+
.description('Static-validate one local AI Function before saving')
|
|
334
|
+
.argument('<function-key>', 'AI Function key')
|
|
335
|
+
.argument('[directory]', 'Project directory', '.')
|
|
336
|
+
.action(async (functionKey, directory) => printJson(await validateAIFunction(functionKey, {
|
|
337
|
+
directory,
|
|
338
|
+
runtimeProfile: defaultProfile,
|
|
339
|
+
})));
|
|
340
|
+
aiFunctions
|
|
341
|
+
.command('debug')
|
|
342
|
+
.description('Debug an AI Function via unary invoke or media task submit')
|
|
343
|
+
.argument('<function-key>', 'AI Function key')
|
|
344
|
+
.argument('[directory]', 'Project directory', '.')
|
|
345
|
+
.option('--env <env>', 'Runtime env (preview|prod)', 'preview')
|
|
346
|
+
.option('--variables <json>', 'Variables JSON object', '{}')
|
|
347
|
+
.option('--messages <json>', 'Messages JSON array (text/vision)', '[]')
|
|
348
|
+
.option('--input <json>', 'Input JSON object (image/video)', '{}')
|
|
349
|
+
.action(async (functionKey, directory, commandOptions) => {
|
|
350
|
+
const env = commandOptions.env === 'prod' ? 'prod' : 'preview';
|
|
351
|
+
printJson(await debugAIFunction(functionKey, {
|
|
352
|
+
directory,
|
|
353
|
+
env,
|
|
354
|
+
input: JSON.parse(commandOptions.input),
|
|
355
|
+
messages: JSON.parse(commandOptions.messages),
|
|
356
|
+
runtimeProfile: defaultProfile,
|
|
357
|
+
variables: JSON.parse(commandOptions.variables),
|
|
358
|
+
}));
|
|
359
|
+
});
|
|
360
|
+
aiFunctions
|
|
361
|
+
.command('task')
|
|
362
|
+
.description('Get an AI Function image or video task')
|
|
363
|
+
.argument('<function-key>', 'AI Function key')
|
|
364
|
+
.argument('<task-id>', 'Media task ID')
|
|
365
|
+
.argument('[directory]', 'Project directory', '.')
|
|
366
|
+
.option('--env <env>', 'Runtime env (preview|prod)', 'preview')
|
|
367
|
+
.action(async (functionKey, taskId, directory, commandOptions) => {
|
|
368
|
+
const env = commandOptions.env === 'prod' ? 'prod' : 'preview';
|
|
369
|
+
printJson(await getAIFunctionTask(functionKey, taskId, {
|
|
370
|
+
directory,
|
|
371
|
+
env,
|
|
372
|
+
runtimeProfile: defaultProfile,
|
|
373
|
+
}));
|
|
374
|
+
});
|
|
375
|
+
aiFunctions
|
|
376
|
+
.command('usage')
|
|
377
|
+
.description('Show AI Function usage summary (totals + by-date distribution)')
|
|
378
|
+
.argument('[directory]', 'Project directory', '.')
|
|
379
|
+
.option('--env <env>', 'Filter by runtime env (preview|prod)')
|
|
380
|
+
.option('--from <yyyymmdd>', 'Start date (inclusive), e.g. 20260901')
|
|
381
|
+
.option('--to <yyyymmdd>', 'End date (inclusive), e.g. 20260908')
|
|
382
|
+
.option('--function-key <key>', 'Filter by AI Function key')
|
|
383
|
+
.option('--model <profileId>', 'Filter by model profile ID from model_profiles')
|
|
384
|
+
.option('--capability-type <type>', 'Filter by capability (text|vision|image|video)')
|
|
385
|
+
.action(async (directory, commandOptions) => {
|
|
386
|
+
printJson(await getAIFunctionUsage({
|
|
387
|
+
capabilityType: commandOptions.capabilityType,
|
|
388
|
+
directory,
|
|
389
|
+
env: commandOptions.env,
|
|
390
|
+
from: commandOptions.from,
|
|
391
|
+
functionKey: commandOptions.functionKey,
|
|
392
|
+
model: commandOptions.model,
|
|
393
|
+
runtimeProfile: defaultProfile,
|
|
394
|
+
to: commandOptions.to,
|
|
395
|
+
}));
|
|
396
|
+
});
|
|
204
397
|
return program;
|
|
205
398
|
}
|
|
206
399
|
export function runBaseDatabaseProgram(program) {
|
|
207
400
|
program.parseAsync().catch((error) => {
|
|
208
|
-
|
|
401
|
+
if (error instanceof JsonOutputError)
|
|
402
|
+
printJson(error.output);
|
|
403
|
+
else {
|
|
404
|
+
if (error instanceof InitFailureError)
|
|
405
|
+
printJson(error.report);
|
|
406
|
+
process.stderr.write(`${program.name()}: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
407
|
+
}
|
|
209
408
|
process.exitCode = 1;
|
|
210
409
|
});
|
|
211
410
|
}
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type WorkspaceNpm } from './npm.js';
|
|
2
|
+
export declare const dependencyDirectories: readonly ['page', 'server-functions'];
|
|
3
|
+
export type DependencyDirectory = (typeof dependencyDirectories)[number];
|
|
4
|
+
export type ProjectBuildStatus = 'passed' | 'cached' | 'failed';
|
|
5
|
+
export interface ProjectBuildResult {
|
|
6
|
+
target: DependencyDirectory;
|
|
7
|
+
status: ProjectBuildStatus;
|
|
8
|
+
message?: string;
|
|
9
|
+
diagnostics?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class ProjectBuildError extends Error {
|
|
12
|
+
readonly results: ProjectBuildResult[];
|
|
13
|
+
constructor(results: ProjectBuildResult[]);
|
|
14
|
+
}
|
|
15
|
+
export interface ProjectBuildOptions {
|
|
16
|
+
incremental?: boolean;
|
|
17
|
+
force?: boolean;
|
|
18
|
+
captureOutput?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function validateProjectDependencyLocks(workspace: string, npm: WorkspaceNpm): void;
|
|
21
|
+
export declare function installDependencies(workspace: string, forceInstall: boolean, npm: WorkspaceNpm, options?: {
|
|
22
|
+
captureOutput?: boolean;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
export declare function buildProject(workspace: string, env: NodeJS.ProcessEnv, npm: WorkspaceNpm, options?: ProjectBuildOptions): Promise<ProjectBuildResult[]>;
|
|
25
|
+
//# sourceMappingURL=project-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-build.d.ts","sourceRoot":"","sources":["../src/project-build.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,qBAAqB,YAAI,MAAM,EAAE,kBAAkB,CAAU,CAAC;AAE3E,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;IAAlD,YAAqB,OAAO,EAAE,kBAAkB,EAAE,EAWjD;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmBD,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,YAAY,GAChB,IAAI,CAIN;AA2FD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,IAAI,CAAC,CA4Df;AAgFD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA6C/B"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { lockRepairHint, validateDependencyLock, } from './npm.js';
|
|
5
|
+
import { CommandExecutionError } from './process.js';
|
|
6
|
+
import { workspaceInputFingerprint } from './workspace-fingerprint.js';
|
|
7
|
+
export const dependencyDirectories = ['page', 'server-functions'];
|
|
8
|
+
export class ProjectBuildError extends Error {
|
|
9
|
+
results;
|
|
10
|
+
constructor(results) {
|
|
11
|
+
const failures = results.filter((result) => result.status === 'failed');
|
|
12
|
+
super(failures
|
|
13
|
+
.map((failure) => `${failure.target} build failed: ${failure.message ?? 'unknown error'}`)
|
|
14
|
+
.join('\n'));
|
|
15
|
+
this.results = results;
|
|
16
|
+
this.name = 'ProjectBuildError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function isRecord(value) {
|
|
20
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
export function validateProjectDependencyLocks(workspace, npm) {
|
|
23
|
+
for (const directory of dependencyDirectories) {
|
|
24
|
+
validateDependencyLock(join(workspace, directory), directory, npm.version);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function dependencyFingerprint(workspace, directory, npmVersion) {
|
|
28
|
+
const hash = createHash('sha256');
|
|
29
|
+
const project = join(workspace, directory);
|
|
30
|
+
for (const filename of [
|
|
31
|
+
'package.json',
|
|
32
|
+
'package-lock.json',
|
|
33
|
+
'npm-shrinkwrap.json',
|
|
34
|
+
'.npmrc',
|
|
35
|
+
]) {
|
|
36
|
+
const path = join(project, filename);
|
|
37
|
+
hash.update(filename);
|
|
38
|
+
hash.update('\0');
|
|
39
|
+
hash.update(existsSync(path) ? readFileSync(path) : '<missing>');
|
|
40
|
+
hash.update('\0');
|
|
41
|
+
}
|
|
42
|
+
hash.update(process.version);
|
|
43
|
+
hash.update('\0');
|
|
44
|
+
hash.update(npmVersion);
|
|
45
|
+
hash.update('\0');
|
|
46
|
+
hash.update(process.platform);
|
|
47
|
+
hash.update('\0');
|
|
48
|
+
hash.update(process.arch);
|
|
49
|
+
return hash.digest('hex');
|
|
50
|
+
}
|
|
51
|
+
function dependencyStatePath(workspace, directory) {
|
|
52
|
+
return join(workspace, '.base-database-cli/state/dependencies', `${directory}.json`);
|
|
53
|
+
}
|
|
54
|
+
function readDependencyState(path) {
|
|
55
|
+
try {
|
|
56
|
+
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
57
|
+
if (isRecord(value) &&
|
|
58
|
+
typeof value.fingerprint === 'string' &&
|
|
59
|
+
typeof value.nodeVersion === 'string' &&
|
|
60
|
+
typeof value.npmVersion === 'string' &&
|
|
61
|
+
typeof value.platform === 'string' &&
|
|
62
|
+
typeof value.arch === 'string') {
|
|
63
|
+
return {
|
|
64
|
+
fingerprint: value.fingerprint,
|
|
65
|
+
nodeVersion: value.nodeVersion,
|
|
66
|
+
npmVersion: value.npmVersion,
|
|
67
|
+
platform: value.platform,
|
|
68
|
+
arch: value.arch,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// 缓存缺失或损坏时重新安装依赖。
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
function writeDependencyState(path, state) {
|
|
78
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
79
|
+
const temporary = `${path}.${String(process.pid)}.tmp`;
|
|
80
|
+
writeFileSync(temporary, `${JSON.stringify(state, null, 2)}\n`);
|
|
81
|
+
renameSync(temporary, path);
|
|
82
|
+
}
|
|
83
|
+
function canReuseDependencies(workspace, directory, fingerprint, npmVersion) {
|
|
84
|
+
const state = readDependencyState(dependencyStatePath(workspace, directory));
|
|
85
|
+
return (state?.fingerprint === fingerprint &&
|
|
86
|
+
state.nodeVersion === process.version &&
|
|
87
|
+
state.npmVersion === npmVersion &&
|
|
88
|
+
state.platform === process.platform &&
|
|
89
|
+
state.arch === process.arch &&
|
|
90
|
+
existsSync(join(workspace, directory, 'node_modules')));
|
|
91
|
+
}
|
|
92
|
+
export async function installDependencies(workspace, forceInstall, npm, options = {}) {
|
|
93
|
+
await Promise.all(dependencyDirectories.map(async (directory) => {
|
|
94
|
+
const fingerprint = dependencyFingerprint(workspace, directory, npm.version);
|
|
95
|
+
if (!forceInstall &&
|
|
96
|
+
canReuseDependencies(workspace, directory, fingerprint, npm.version)) {
|
|
97
|
+
if (!options.captureOutput) {
|
|
98
|
+
process.stderr.write(`Dependencies unchanged; skipping npm ci for ${directory}.\n`);
|
|
99
|
+
}
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const statePath = dependencyStatePath(workspace, directory);
|
|
103
|
+
rmSync(statePath, { force: true });
|
|
104
|
+
if (!options.captureOutput) {
|
|
105
|
+
process.stderr.write(`Installing ${directory} dependencies with npm@${npm.version} (Node ${process.version}).\n`);
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
await npm.run(['ci'], {
|
|
109
|
+
cwd: join(workspace, directory),
|
|
110
|
+
captureOutput: options.captureOutput,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const diagnostics = error instanceof CommandExecutionError ? error.stderr : '';
|
|
115
|
+
const lockFailure = /EUSAGE|Invalid: lock file|Missing: .*from lock file|package\.json and .*lock.*in sync/is.test(diagnostics);
|
|
116
|
+
const hint = lockFailure
|
|
117
|
+
? lockRepairHint(directory, npm.version)
|
|
118
|
+
: `Check the npm diagnostic above for ${directory}. Fix network, registry, authentication or installer errors before retrying; do not delete the lock or bypass installation.`;
|
|
119
|
+
throw new Error(`Dependency installation failed for ${directory} using npm@${npm.version}: ${error instanceof Error ? error.message : String(error)}. ${hint}`, { cause: error });
|
|
120
|
+
}
|
|
121
|
+
if (!existsSync(join(workspace, directory, 'node_modules'))) {
|
|
122
|
+
throw new Error(`npm ci completed without creating node_modules for ${directory}`);
|
|
123
|
+
}
|
|
124
|
+
writeDependencyState(statePath, {
|
|
125
|
+
fingerprint,
|
|
126
|
+
nodeVersion: process.version,
|
|
127
|
+
npmVersion: npm.version,
|
|
128
|
+
platform: process.platform,
|
|
129
|
+
arch: process.arch,
|
|
130
|
+
});
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
function buildStatePath(workspace, directory) {
|
|
134
|
+
return join(workspace, '.base-database-cli/state/check-build', `${directory}.json`);
|
|
135
|
+
}
|
|
136
|
+
function readBuildState(path) {
|
|
137
|
+
try {
|
|
138
|
+
const value = JSON.parse(readFileSync(path, 'utf8'));
|
|
139
|
+
if (isRecord(value) &&
|
|
140
|
+
value.version === 1 &&
|
|
141
|
+
typeof value.fingerprint === 'string') {
|
|
142
|
+
return { version: 1, fingerprint: value.fingerprint };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// A missing or damaged build cache is a normal cache miss.
|
|
147
|
+
}
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
function buildFingerprint(workspace, directory, env, npmVersion) {
|
|
151
|
+
const hash = createHash('sha256');
|
|
152
|
+
const input = workspaceInputFingerprint(join(workspace, directory));
|
|
153
|
+
hash.update('base-database-check-build-v1\0');
|
|
154
|
+
hash.update(input.algorithm);
|
|
155
|
+
hash.update('\0');
|
|
156
|
+
hash.update(input.sha256);
|
|
157
|
+
hash.update('\0');
|
|
158
|
+
hash.update(process.version);
|
|
159
|
+
hash.update('\0');
|
|
160
|
+
hash.update(npmVersion);
|
|
161
|
+
hash.update('\0');
|
|
162
|
+
hash.update(process.platform);
|
|
163
|
+
hash.update('\0');
|
|
164
|
+
hash.update(process.arch);
|
|
165
|
+
hash.update('\0');
|
|
166
|
+
for (const [name, value] of Object.entries(env).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0)) {
|
|
167
|
+
hash.update(name);
|
|
168
|
+
hash.update('\0');
|
|
169
|
+
hash.update(value ?? '<undefined>');
|
|
170
|
+
hash.update('\0');
|
|
171
|
+
}
|
|
172
|
+
return hash.digest('hex');
|
|
173
|
+
}
|
|
174
|
+
function writeBuildState(path, fingerprint) {
|
|
175
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
176
|
+
const temporary = `${path}.${String(process.pid)}.tmp`;
|
|
177
|
+
writeFileSync(temporary, `${JSON.stringify({ version: 1, fingerprint }, null, 2)}\n`);
|
|
178
|
+
renameSync(temporary, path);
|
|
179
|
+
}
|
|
180
|
+
function commandDiagnostics(error) {
|
|
181
|
+
if (!(error instanceof CommandExecutionError))
|
|
182
|
+
return undefined;
|
|
183
|
+
const output = [error.stdout, error.stderr]
|
|
184
|
+
.filter((value) => value.trim() !== '')
|
|
185
|
+
.join('\n')
|
|
186
|
+
.trim();
|
|
187
|
+
return output === '' ? undefined : output;
|
|
188
|
+
}
|
|
189
|
+
export async function buildProject(workspace, env, npm, options = {}) {
|
|
190
|
+
const results = await Promise.all(dependencyDirectories.map(async (directory) => {
|
|
191
|
+
const statePath = buildStatePath(workspace, directory);
|
|
192
|
+
const fingerprint = options.incremental
|
|
193
|
+
? buildFingerprint(workspace, directory, env, npm.version)
|
|
194
|
+
: undefined;
|
|
195
|
+
if (fingerprint &&
|
|
196
|
+
!options.force &&
|
|
197
|
+
readBuildState(statePath)?.fingerprint === fingerprint) {
|
|
198
|
+
if (!options.captureOutput) {
|
|
199
|
+
process.stderr.write(`Build inputs unchanged; skipping ${directory} build.\n`);
|
|
200
|
+
}
|
|
201
|
+
return { target: directory, status: 'cached' };
|
|
202
|
+
}
|
|
203
|
+
if (options.incremental)
|
|
204
|
+
rmSync(statePath, { force: true });
|
|
205
|
+
try {
|
|
206
|
+
await npm.run(['run', 'build'], {
|
|
207
|
+
cwd: join(workspace, directory),
|
|
208
|
+
env,
|
|
209
|
+
captureOutput: options.captureOutput,
|
|
210
|
+
});
|
|
211
|
+
if (fingerprint)
|
|
212
|
+
writeBuildState(statePath, fingerprint);
|
|
213
|
+
return { target: directory, status: 'passed' };
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return {
|
|
217
|
+
target: directory,
|
|
218
|
+
status: 'failed',
|
|
219
|
+
message: error instanceof Error ? error.message : String(error),
|
|
220
|
+
diagnostics: commandDiagnostics(error),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}));
|
|
224
|
+
if (results.some((result) => result.status === 'failed')) {
|
|
225
|
+
throw new ProjectBuildError(results);
|
|
226
|
+
}
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=project-build.js.map
|