@lark-base-open/base-database-cli 1.5.0 → 1.7.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/CHANGELOG.md +35 -0
- package/README.md +4 -0
- package/dist/agent-tools.d.ts +1 -0
- package/dist/agent-tools.d.ts.map +1 -1
- package/dist/agent-tools.js +3 -1
- package/dist/agent-tools.js.map +1 -1
- package/dist/app-builder/core.d.mts.map +1 -1
- package/dist/app-builder/core.mjs +8 -4
- package/dist/app-builder/core.mjs.map +1 -1
- package/dist/app-builder/package.json +1 -1
- package/dist/base-binding.d.ts +12 -0
- package/dist/base-binding.d.ts.map +1 -0
- package/dist/base-binding.js +62 -0
- package/dist/base-binding.js.map +1 -0
- package/dist/bot-handoff.d.ts +16 -0
- package/dist/bot-handoff.d.ts.map +1 -0
- package/dist/bot-handoff.js +165 -0
- package/dist/bot-handoff.js.map +1 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +25 -2
- package/dist/check.js.map +1 -1
- package/dist/contract-conversion.d.ts +1 -0
- package/dist/contract-conversion.d.ts.map +1 -1
- package/dist/contract-conversion.js +11 -0
- package/dist/contract-conversion.js.map +1 -1
- package/dist/contract-dependencies.d.ts +16 -0
- package/dist/contract-dependencies.d.ts.map +1 -0
- package/dist/contract-dependencies.js +52 -0
- package/dist/contract-dependencies.js.map +1 -0
- package/dist/deploy.d.ts +2 -8
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +15 -98
- package/dist/deploy.js.map +1 -1
- package/dist/distribution-commands.d.ts.map +1 -1
- package/dist/distribution-commands.js +10 -5
- package/dist/distribution-commands.js.map +1 -1
- package/dist/function-contracts.d.ts.map +1 -1
- package/dist/function-contracts.js +10 -15
- package/dist/function-contracts.js.map +1 -1
- package/dist/init-journal.d.ts +10 -0
- package/dist/init-journal.d.ts.map +1 -1
- package/dist/init-journal.js +5 -2
- package/dist/init-journal.js.map +1 -1
- package/dist/init.d.ts +29 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +201 -19
- package/dist/init.js.map +1 -1
- package/dist/lark-cli.d.ts +7 -0
- package/dist/lark-cli.d.ts.map +1 -1
- package/dist/lark-cli.js +113 -17
- package/dist/lark-cli.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +28 -1
- package/dist/program.js.map +1 -1
- package/dist/sdk-codegen.d.ts +3 -1
- package/dist/sdk-codegen.d.ts.map +1 -1
- package/dist/sdk-codegen.js +37 -13
- package/dist/sdk-codegen.js.map +1 -1
- package/dist/sdk-compatibility.js +1 -1
- package/dist/sdk-compatibility.js.map +1 -1
- package/dist/tables-add.d.ts +15 -0
- package/dist/tables-add.d.ts.map +1 -0
- package/dist/tables-add.js +94 -0
- package/dist/tables-add.js.map +1 -0
- package/dist/unified-functions.d.ts +4 -2
- package/dist/unified-functions.d.ts.map +1 -1
- package/dist/unified-functions.js +60 -17
- package/dist/unified-functions.js.map +1 -1
- package/package.json +1 -1
- package/skills/lark-base-database/SKILL.md +3 -1
- package/skills/lark-base-database/references/base-table-design.md +37 -0
- package/skills/lark-base-database/references/collaborator-handoff.md +62 -0
- package/skills/lark-base-database/references/database-function.md +3 -1
- package/skills/lark-base-database/references/development.md +13 -1
- package/skills/lark-base-database/references/faas.md +7 -3
- package/skills/lark-base-database/references/mutations.md +34 -0
- package/skills/lark-base-database/references/permission-design.md +1 -0
- package/skills/lark-base-database/references/release.md +1 -1
- package/skills/lark-base-database/references/style-guide.md +1 -1
- package/skills/lark-base-database/references/workspace.md +27 -10
- package/templates/database-starter-v2/README.md +1 -1
- package/templates/database-starter-v2/package-lock.json +5 -5
- package/templates/database-starter-v2/page/package.json +1 -1
- package/templates/database-starter-v2/server/package.json +1 -1
package/dist/sdk-codegen.js
CHANGED
|
@@ -1,29 +1,51 @@
|
|
|
1
|
-
import { sdkInstallGuidance } from './sdk-install.js';
|
|
2
1
|
import { projectCapabilities } from './project-capabilities.js';
|
|
3
2
|
import { createRequire } from 'node:module';
|
|
4
3
|
import { execFileSync } from 'node:child_process';
|
|
5
4
|
import { existsSync, lstatSync, cpSync, mkdirSync, realpathSync, symlinkSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
6
5
|
import { tmpdir } from 'node:os';
|
|
7
|
-
import { join, dirname, relative } from 'node:path';
|
|
8
|
-
import { serverDirectory } from './project-layout.js';
|
|
6
|
+
import { join, dirname, relative, isAbsolute, sep } from 'node:path';
|
|
7
|
+
import { projectLayout, serverDirectory } from './project-layout.js';
|
|
9
8
|
const SDK = '@lark-base-open/base-database-app-sdk';
|
|
10
9
|
export class SDKCodegenError extends Error {
|
|
11
10
|
code;
|
|
12
|
-
|
|
11
|
+
nextActions;
|
|
12
|
+
constructor(code, message, nextActions = []) {
|
|
13
13
|
super(`${code}: ${message}`);
|
|
14
14
|
this.code = code;
|
|
15
|
+
this.nextActions = nextActions;
|
|
15
16
|
this.name = 'SDKCodegenError';
|
|
16
17
|
}
|
|
17
18
|
toJSON() {
|
|
18
|
-
return {
|
|
19
|
+
return {
|
|
20
|
+
code: this.code,
|
|
21
|
+
message: this.message,
|
|
22
|
+
...(this.nextActions.length ? { nextActions: this.nextActions } : {}),
|
|
23
|
+
};
|
|
19
24
|
}
|
|
20
25
|
}
|
|
21
26
|
const locations = (root) => ['page', serverDirectory(root), ''].map((p) => join(root, p, 'package.json'));
|
|
22
27
|
export function requiresSDKCodegen(root) {
|
|
23
28
|
return projectCapabilities(root).sdkCodegen;
|
|
24
29
|
}
|
|
25
|
-
function
|
|
26
|
-
|
|
30
|
+
function dependencyRecovery(root) {
|
|
31
|
+
const layout = projectLayout(root);
|
|
32
|
+
const install = layout.version === 2
|
|
33
|
+
? 'npm ci'
|
|
34
|
+
: layout.dependencies
|
|
35
|
+
.map((directory) => `npm ci --prefix ${directory}`)
|
|
36
|
+
.join('; ');
|
|
37
|
+
return [
|
|
38
|
+
`From the project root, restore dependencies from the existing manifests and lockfiles: ${install}. Keep the declared SDK version unchanged.`,
|
|
39
|
+
'If dependencies are already installed but the SDK lacks codegen, keep the current SDK and upgrade only with user authorization; follow its Migration instructions.',
|
|
40
|
+
'Once codegen is available, use the same CLI and environment to run contracts generate, then check --json.',
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
function unavailable(root, missingExport = false) {
|
|
44
|
+
throw new SDKCodegenError('SDK_CODEGEN_UNAVAILABLE', missingExport
|
|
45
|
+
? 'The installed SDK codegen does not export generateFunctionClients.'
|
|
46
|
+
: 'Cannot resolve the installed SDK codegen entry. Project dependencies may not be installed, or the installed SDK may not provide codegen.', missingExport
|
|
47
|
+
? dependencyRecovery(root).slice(1)
|
|
48
|
+
: dependencyRecovery(root));
|
|
27
49
|
}
|
|
28
50
|
/** Resolve/snapshot reads package bytes only; project modules execute only in the restricted child. */
|
|
29
51
|
export function runSDKCodegen(root, data) {
|
|
@@ -38,7 +60,7 @@ export function runSDKCodegen(root, data) {
|
|
|
38
60
|
catch { }
|
|
39
61
|
}
|
|
40
62
|
if (!entry)
|
|
41
|
-
unavailable();
|
|
63
|
+
unavailable(root);
|
|
42
64
|
const temp = mkdtempSync(join(tmpdir(), 'base-codegen-'));
|
|
43
65
|
try {
|
|
44
66
|
let packageRoot = dirname(entry);
|
|
@@ -47,7 +69,7 @@ export function runSDKCodegen(root, data) {
|
|
|
47
69
|
.name !== SDK) {
|
|
48
70
|
const parent = dirname(packageRoot);
|
|
49
71
|
if (parent === packageRoot)
|
|
50
|
-
unavailable();
|
|
72
|
+
unavailable(root);
|
|
51
73
|
packageRoot = parent;
|
|
52
74
|
}
|
|
53
75
|
snapshotPackage(packageRoot, join(temp, 'node_modules', SDK), new Map());
|
|
@@ -87,8 +109,10 @@ globalThis.WebSocket = undefined;
|
|
|
87
109
|
catch {
|
|
88
110
|
throw new SDKCodegenError('SDK_CODEGEN_FAILED', 'Isolated SDK codegen failed, timed out, or returned invalid JSON');
|
|
89
111
|
}
|
|
90
|
-
if (!result.ok &&
|
|
91
|
-
|
|
112
|
+
if (!result.ok &&
|
|
113
|
+
result.code === 'SDK_CODEGEN_UNAVAILABLE' &&
|
|
114
|
+
result.message === 'SDK codegen export missing')
|
|
115
|
+
unavailable(root, true);
|
|
92
116
|
if (!result.ok)
|
|
93
117
|
throw new SDKCodegenError(result.code ?? 'SDK_CODEGEN_FAILED', (result.message ?? 'SDK codegen failed') +
|
|
94
118
|
(result.code === 'CONTRACT_DATA_INVALID'
|
|
@@ -139,7 +163,7 @@ function resolvePackage(name, from) {
|
|
|
139
163
|
return realpathSync(candidate);
|
|
140
164
|
const parent = dirname(directory);
|
|
141
165
|
if (parent === directory)
|
|
142
|
-
throw new SDKCodegenError('SDK_CODEGEN_UNAVAILABLE', `Missing installed SDK dependency
|
|
166
|
+
throw new SDKCodegenError('SDK_CODEGEN_UNAVAILABLE', `Missing installed SDK dependency: ${name}. Restore this project's existing locked dependencies and keep the SDK version unchanged.`);
|
|
143
167
|
directory = parent;
|
|
144
168
|
}
|
|
145
169
|
}
|
|
@@ -170,7 +194,7 @@ function snapshotPackage(source, destination, copied) {
|
|
|
170
194
|
p.startsWith('.env.')))
|
|
171
195
|
return false;
|
|
172
196
|
const real = realpathSync(path), rel = relative(source, real);
|
|
173
|
-
if (rel
|
|
197
|
+
if (rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel))
|
|
174
198
|
throw new SDKCodegenError('SDK_CODEGEN_UNAVAILABLE', 'SDK package contains external symbolic links');
|
|
175
199
|
return true;
|
|
176
200
|
},
|
package/dist/sdk-codegen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-codegen.js","sourceRoot":"","sources":["../src/sdk-codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sdk-codegen.js","sourceRoot":"","sources":["../src/sdk-codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ export function checkSDKCompatibility(workspace, command = 'base-database-cli')
|
|
|
57
57
|
const nextActions = [
|
|
58
58
|
`Keep the installed SDK by default: use its package-local docs and examples; do not apply newer Skill API examples.`,
|
|
59
59
|
`Only with user authorization, upgrade: ${upgradeCommand}`,
|
|
60
|
-
`For an authorized upgrade, read the target SDK CHANGELOG.md
|
|
60
|
+
`For an authorized upgrade, read the target SDK CHANGELOG.md and package-local docs for upgrade and compatibility guidance on every crossed incompatible version, migrate affected calls, then run ${command} contracts generate, ${command} check --json and the project build. Do not use type assertions or caller-supplied generics to bypass migration errors.`,
|
|
61
61
|
];
|
|
62
62
|
warnings.push({
|
|
63
63
|
code: 'SDK_BEHIND_CLI',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-compatibility.js","sourceRoot":"","sources":["../src/sdk-compatibility.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sdk-compatibility.js","sourceRoot":"","sources":["../src/sdk-compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type RuntimeProfile } from './environment.js';
|
|
2
|
+
export interface AddTablesOptions {
|
|
3
|
+
directory: string;
|
|
4
|
+
tableIds: string[];
|
|
5
|
+
runtimeProfile?: RuntimeProfile;
|
|
6
|
+
larkProfile?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function addTables(options: AddTablesOptions): Promise<{
|
|
9
|
+
ok: boolean;
|
|
10
|
+
changed: boolean;
|
|
11
|
+
addedTableIds: string[];
|
|
12
|
+
tableIds: string[];
|
|
13
|
+
nextAction: string;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=tables-add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables-add.d.ts","sourceRoot":"","sources":["../src/tables-add.ts"],"names":[],"mappings":"AAaA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAO1B,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB;;;;;;GAqGxD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { existsSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { applyEdits, modify } from 'jsonc-parser';
|
|
5
|
+
import { CONFIG_FILE_NAME, readConfig } from './config.js';
|
|
6
|
+
import { collectBaseBinding } from './base-binding.js';
|
|
7
|
+
import { sourceStatePath } from './draft-state.js';
|
|
8
|
+
import { assertProjectRuntimeProfile, ONLINE_RUNTIME_PROFILE, } from './environment.js';
|
|
9
|
+
import { resolveLarkProfileEnvironment, responseData, runLarkCli, } from './lark-cli.js';
|
|
10
|
+
function replaceFile(file, content) {
|
|
11
|
+
const temporary = file + '.' + randomUUID() + '.tmp';
|
|
12
|
+
try {
|
|
13
|
+
writeFileSync(temporary, content, { flag: 'wx', mode: 0o600 });
|
|
14
|
+
renameSync(temporary, file);
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
rmSync(temporary, { force: true });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Stage local declarations; the existing deploy transaction applies the binding.
|
|
21
|
+
export async function addTables(options) {
|
|
22
|
+
const workspace = resolve(options.directory);
|
|
23
|
+
const configPath = sourceStatePath(workspace, CONFIG_FILE_NAME);
|
|
24
|
+
const catalogPath = sourceStatePath(workspace, 'catalog.json');
|
|
25
|
+
const originalConfig = readFileSync(configPath, 'utf8');
|
|
26
|
+
const originalCatalog = existsSync(catalogPath)
|
|
27
|
+
? readFileSync(catalogPath, 'utf8')
|
|
28
|
+
: undefined;
|
|
29
|
+
const config = readConfig(workspace);
|
|
30
|
+
const runtime = options.runtimeProfile ?? ONLINE_RUNTIME_PROFILE;
|
|
31
|
+
assertProjectRuntimeProfile(config.runtimeProfile, runtime);
|
|
32
|
+
const ids = [...new Set(options.tableIds)];
|
|
33
|
+
if (!ids.length || ids.some((id) => !id.trim() || id.trim() !== id))
|
|
34
|
+
throw new Error('Provide one or more non-empty table IDs');
|
|
35
|
+
const binding = collectBaseBinding(config, (message) => {
|
|
36
|
+
throw new Error(message);
|
|
37
|
+
});
|
|
38
|
+
if (!binding)
|
|
39
|
+
throw new Error('TABLE_BINDING_REQUIRED: tables add requires an existing Base binding');
|
|
40
|
+
const addedTableIds = ids.filter((id) => !binding.tableIds.includes(id));
|
|
41
|
+
const tableIds = [...binding.tableIds, ...addedTableIds];
|
|
42
|
+
const { env } = resolveLarkProfileEnvironment(await runtime.commandEnvironment(), options.larkProfile, config.larkProfile, runtime);
|
|
43
|
+
const catalog = responseData(runLarkCli([
|
|
44
|
+
'api',
|
|
45
|
+
'GET',
|
|
46
|
+
`/open-apis/base/v3/sites/${encodeURIComponent(config.appToken)}/catalog`,
|
|
47
|
+
'--params',
|
|
48
|
+
JSON.stringify({ tableIds }),
|
|
49
|
+
], env, workspace));
|
|
50
|
+
if (!Array.isArray(catalog.tables))
|
|
51
|
+
throw new Error('INVALID_CATALOG: Missing tables');
|
|
52
|
+
const wanted = new Set(tableIds);
|
|
53
|
+
const found = new Set();
|
|
54
|
+
const tables = catalog.tables.filter((table) => {
|
|
55
|
+
if (!table || typeof table !== 'object')
|
|
56
|
+
throw new Error('INVALID_CATALOG: Invalid table');
|
|
57
|
+
const value = table;
|
|
58
|
+
if (typeof value.id !== 'string')
|
|
59
|
+
throw new Error('INVALID_CATALOG: Invalid table ID');
|
|
60
|
+
// Do not import runtime tables or declarations from another workspace.
|
|
61
|
+
if (!wanted.has(value.id))
|
|
62
|
+
return false;
|
|
63
|
+
if (value.baseToken !== binding.baseToken || found.has(value.id))
|
|
64
|
+
throw new Error('INVALID_CATALOG: Invalid or duplicate requested table');
|
|
65
|
+
found.add(value.id);
|
|
66
|
+
return true;
|
|
67
|
+
});
|
|
68
|
+
const missing = tableIds.filter((id) => !found.has(id));
|
|
69
|
+
if (missing.length)
|
|
70
|
+
throw new Error(`CATALOG_TABLES_MISSING: Catalog did not return requested tables: ${missing.join(', ')}. Verify table access and candidate Catalog support; local configuration was not changed.`);
|
|
71
|
+
const bindings = config.bindings;
|
|
72
|
+
const first = binding.names[0];
|
|
73
|
+
const nextConfig = addedTableIds.length
|
|
74
|
+
? applyEdits(originalConfig, modify(originalConfig, ['bindings', first, 'tableIds'], [...bindings[first].tableIds, ...addedTableIds], { formattingOptions: { insertSpaces: true, tabSize: 2 } }))
|
|
75
|
+
: originalConfig;
|
|
76
|
+
if (readFileSync(configPath, 'utf8') !== originalConfig ||
|
|
77
|
+
(existsSync(catalogPath)
|
|
78
|
+
? readFileSync(catalogPath, 'utf8')
|
|
79
|
+
: undefined) !== originalCatalog)
|
|
80
|
+
throw new Error('WORKSPACE_CHANGED: Local configuration changed while reading Catalog; retry using the current declarations');
|
|
81
|
+
// Catalog is a refreshable local cache. Write it first so a failed read never
|
|
82
|
+
// changes declarations; an interrupted local write can be retried normally.
|
|
83
|
+
replaceFile(catalogPath, JSON.stringify({ ...catalog, tables }, null, 2) + '\n');
|
|
84
|
+
if (nextConfig !== originalConfig)
|
|
85
|
+
replaceFile(configPath, nextConfig);
|
|
86
|
+
return {
|
|
87
|
+
ok: true,
|
|
88
|
+
changed: addedTableIds.length > 0,
|
|
89
|
+
addedTableIds,
|
|
90
|
+
tableIds,
|
|
91
|
+
nextAction: 'Tables are staged locally. Run check and deploy to apply bindings with the source in one draft commit.',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=tables-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables-add.js","sourceRoot":"","sources":["../src/tables-add.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,11 @@ export interface PutFunctionsOptions {
|
|
|
13
13
|
env: NodeJS.ProcessEnv;
|
|
14
14
|
cwd?: string;
|
|
15
15
|
}
|
|
16
|
-
export
|
|
16
|
+
export interface ValidateFunctionsOptions extends PutFunctionsOptions {
|
|
17
|
+
tableIds?: string[];
|
|
18
|
+
}
|
|
17
19
|
export declare function functionEnv(value?: string): 'preview' | 'prod';
|
|
18
|
-
export declare function assertFunctionResults(data: Record<string, unknown>, expectedIds: readonly string[]): string[];
|
|
20
|
+
export declare function assertFunctionResults(data: Record<string, unknown>, expectedIds: readonly string[], validationFunctions?: FunctionWrite[]): string[];
|
|
19
21
|
export declare function putFunctions(options: PutFunctionsOptions): Record<string, unknown> & {
|
|
20
22
|
deletedFunctionIds: string[];
|
|
21
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-functions.d.ts","sourceRoot":"","sources":["../src/unified-functions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unified-functions.d.ts","sourceRoot":"","sources":["../src/unified-functions.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;AAC9D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,wBAAgB,WAAW,CAAC,KAAK,GAAE,MAAkB,GAAG,SAAS,GAAG,MAAM,CAIzE;AACD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,mBAAmB,CAAC,EAAE,aAAa,EAAE,GACpC,MAAM,EAAE,CAiCV;AACD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB5D;AA0CD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqCzB;AACD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AACD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,iBAAiB,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,SAAsB,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CA0C3B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,CAAC,EAAE,MAAM,EACZ,GAAG,SAAsB,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAoC3B;AACD,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatPublicSQLError } from './public-sql-error.js';
|
|
2
|
+
import { LarkCliError, safeDiagnostic, batchResults, } from './lark-cli-error.js';
|
|
2
3
|
import { responseData, runLarkCli } from './lark-cli.js';
|
|
3
4
|
export function functionEnv(value = 'preview') {
|
|
4
5
|
if (value !== 'preview' && value !== 'prod')
|
|
5
6
|
throw new Error('env must be preview or prod');
|
|
6
7
|
return value;
|
|
7
8
|
}
|
|
8
|
-
export function assertFunctionResults(data, expectedIds) {
|
|
9
|
+
export function assertFunctionResults(data, expectedIds, validationFunctions) {
|
|
9
10
|
const unknown = () => {
|
|
10
11
|
throw new Error('FUNCTION_RESPONSE_UNKNOWN: incomplete or invalid batch receipt; read back the affected Functions before retrying or publishing');
|
|
11
12
|
};
|
|
@@ -32,7 +33,9 @@ export function assertFunctionResults(data, expectedIds) {
|
|
|
32
33
|
return unknown();
|
|
33
34
|
const failures = data.results.filter((item) => item.code !== 0);
|
|
34
35
|
if (failures.length)
|
|
35
|
-
throw new Error(
|
|
36
|
+
throw new Error((validationFunctions &&
|
|
37
|
+
functionValidationMessage(batchResults(data), validationFunctions)) ||
|
|
38
|
+
`Function batch failed: ${JSON.stringify(failures)}`);
|
|
36
39
|
return deletedFunctionIds;
|
|
37
40
|
}
|
|
38
41
|
export function putFunctions(options) {
|
|
@@ -49,21 +52,61 @@ export function putFunctions(options) {
|
|
|
49
52
|
const deletedFunctionIds = assertFunctionResults(data, options.functions.map((item) => item.functionId));
|
|
50
53
|
return { ...data, deletedFunctionIds };
|
|
51
54
|
}
|
|
55
|
+
function functionValidationMessage(results, functions) {
|
|
56
|
+
const failures = results?.filter((item) => item.code !== 0);
|
|
57
|
+
if (!failures?.some((item) => functions.some((fn) => fn.functionId === item.functionKey && fn.functionType === 'sql')))
|
|
58
|
+
return undefined;
|
|
59
|
+
const lines = [];
|
|
60
|
+
for (const item of failures) {
|
|
61
|
+
const fn = functions.find((fn) => fn.functionId === item.functionKey);
|
|
62
|
+
if (!fn)
|
|
63
|
+
return undefined;
|
|
64
|
+
let namedParameters = false;
|
|
65
|
+
try {
|
|
66
|
+
const spec = JSON.parse(fn.spec);
|
|
67
|
+
namedParameters =
|
|
68
|
+
Array.isArray(spec.meta?.params) &&
|
|
69
|
+
spec.meta.params.some((param) => typeof param?.name === 'string' && param.name.trim() !== '');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
/* Local metadata validation owns malformed specs. */
|
|
73
|
+
}
|
|
74
|
+
const diagnostics = item.publicError
|
|
75
|
+
? formatPublicSQLError(item.publicError, { namedParameters })
|
|
76
|
+
: (item.message ?? String(item.code));
|
|
77
|
+
lines.push(`- ${fn.functionId}: ${diagnostics}`);
|
|
78
|
+
}
|
|
79
|
+
return [
|
|
80
|
+
`${functions.every((fn) => fn.functionType === 'sql') ? 'Database Function query' : 'Function'} validation failed for ${failures.length}/${functions.length} functions:`,
|
|
81
|
+
...lines,
|
|
82
|
+
].join('\n');
|
|
83
|
+
}
|
|
52
84
|
export function validateFunctions(options) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
85
|
+
try {
|
|
86
|
+
const data = responseData(runLarkCli([
|
|
87
|
+
'api',
|
|
88
|
+
'POST',
|
|
89
|
+
`/open-apis/base/v3/sites/${encodeURIComponent(options.token)}/functions/validate`,
|
|
90
|
+
'--data',
|
|
91
|
+
JSON.stringify({
|
|
92
|
+
...(options.tableIds?.length ? { tableIds: options.tableIds } : {}),
|
|
93
|
+
kinds: options.kinds,
|
|
94
|
+
functions: options.functions,
|
|
95
|
+
}),
|
|
96
|
+
], options.env, options.cwd));
|
|
97
|
+
assertFunctionResults(data, options.functions.map((item) => item.functionId), options.functions);
|
|
98
|
+
if (data.valid !== true)
|
|
99
|
+
throw new Error('Function validation failed without item diagnostics');
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof LarkCliError) {
|
|
104
|
+
const message = functionValidationMessage(error.details.results, options.functions);
|
|
105
|
+
if (message)
|
|
106
|
+
throw new LarkCliError({ ...error.details, message });
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
67
110
|
}
|
|
68
111
|
export function functionPage(data, state, logId, cli = 'base-database-cli') {
|
|
69
112
|
if (data.apiVersion !== 2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-functions.js","sourceRoot":"","sources":["../src/unified-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"unified-functions.js","sourceRoot":"","sources":["../src/unified-functions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -22,7 +22,7 @@ metadata:
|
|
|
22
22
|
|
|
23
23
|
| 用户任务 | 执行路径 | 主要命令 | 进入阶段前读取 |
|
|
24
24
|
| ------------------------ | ------------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
25
|
-
| 新建系统 | 明确需求与访问模型 → 确定 Base 来源 → 初始化 → 开发 → Preview 交付 | `init` → `deploy` | [工程与环境](references/workspace.md)、[权限设计](references/permission-design.md) |
|
|
25
|
+
| 新建系统 | 明确需求与访问模型 → 确定 Base 来源 → 设计底表 → 初始化 → 开发 → Preview 交付 | `init` → `deploy` | [工程与环境](references/workspace.md)、[底表设计](references/base-table-design.md)、[权限设计](references/permission-design.md) |
|
|
26
26
|
| 修改已有系统 | 确认现有工程 → 判断影响范围 → 增量修改 → 验证与交付 | 按影响范围修改,必要时 `deploy` | [增量修改与追加绑定](references/workspace.md#增量修改与追加绑定),再读取受影响的协议 |
|
|
27
27
|
| 恢复远端工程 | 确认本地状态和应用 → 恢复源码与 Catalog → 继续原任务 | 按来源选择 `pull` 或 `init` | [工程与环境](references/workspace.md) |
|
|
28
28
|
| 设计或评审 | 按评审范围分析并输出,不创建资源或发布 | 只读分析 | [工程质量](references/style-guide.md),涉及权限、查询或视觉时读取对应专项 |
|
|
@@ -57,9 +57,11 @@ metadata:
|
|
|
57
57
|
| 为 Page 或 FaaS 添加、升级第三方 npm 依赖 | [Page 开发中的依赖策略](references/development.md#第三方依赖策略) |
|
|
58
58
|
| 附件上传、展示、下载、追加或移除 | [文件传输](references/file-transfer.md),实现前核对目标环境能力 |
|
|
59
59
|
| binding、身份过滤、角色或数据可见性 | [权限设计](references/permission-design.md) |
|
|
60
|
+
| 以机器人(bot)身份搭建,并把新建的 Base 与应用管理员交给发起人 | [bot 建站与交接](references/collaborator-handoff.md):显式声明 bot 身份,向用户报告 init 返回的 `handoff` 授权结果 |
|
|
60
61
|
| 自动化、表单、仪表盘等原生能力,或能力归属不明 | [原生 Base 能力路由](references/base-capability-routing.md) |
|
|
61
62
|
| 原生 workflow 通知与站内入口 | [通知集成](references/notifications.md) |
|
|
62
63
|
| 固定单表的基础创建、更新、删除、附件增量或批量写入 | [Mutation Function](references/mutations.md) |
|
|
64
|
+
| 新建表、新增字段,或调整底表的视图、选项颜色、公式字段 | [底表设计](references/base-table-design.md) |
|
|
63
65
|
|
|
64
66
|
新建或整体改版先在内部规划中确定视觉方案,再实现设计变量和组件。业务建模与通用工程取舍按[工程质量](references/style-guide.md)执行;默认不创建额外设计文件。新建站点或修改业务能力时,按[站点 README](references/release.md#站点-readme)维护随源码制品上传的项目说明;用户要求其他文档时按要求交付。
|
|
65
67
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 底表设计
|
|
2
|
+
|
|
3
|
+
从零建 Base、在已有 Base 中新增表或字段时读取。
|
|
4
|
+
|
|
5
|
+
## 前提:人也会直接看底表
|
|
6
|
+
|
|
7
|
+
应用页面不是数据的唯一入口。底表的 Base 协作者会长期直接打开 Base 浏览、筛选、修改和统计数据,底表是这个应用的第二个界面。设计表结构时同时考虑两类读者:Database Function、Mutation、FaaS 和外部 Agent 读写字段,人在表格里看视图。
|
|
8
|
+
|
|
9
|
+
## 两层设计
|
|
10
|
+
|
|
11
|
+
- **存储层**:有类型的业务事实。金额、数量用数字,时间用日期,人用人员,引用其他实体用关联,有限取值用单选或多选。这一层给程序读写,保持规范化:一个事实只存一处,不存 JSON、拼接串或带单位、币种符号的格式化文本。
|
|
12
|
+
- **呈现层**:主字段的选择、字段顺序、选项颜色、数字和日期格式、视图,以及只读的公式字段。它们决定人打开表格时能否看懂,不改变存储字段的读写方式;写入仍按 [Mutation](mutations.md) 或 [FaaS](faas.md) 协议处理。
|
|
13
|
+
|
|
14
|
+
人习惯在一行里看全一件事。规范化拆表后,人需要在主表上长期看到的子表汇总或跨表信息,用公式字段带回主表,不要为了好看把它存成文本。
|
|
15
|
+
|
|
16
|
+
## 判定
|
|
17
|
+
|
|
18
|
+
对每张业务表问:Base 协作者会不会长期直接打开它浏览或处理?会的话,他打开时能否不借助应用页面,就回答这张表最常被问到的问题?
|
|
19
|
+
|
|
20
|
+
- 能回答,不需要额外呈现。
|
|
21
|
+
- 缺的是事实,补存储字段;缺的是汇总或跨表信息,补公式字段;缺的是"只看一部分记录"的入口,补视图。
|
|
22
|
+
|
|
23
|
+
不会被人长期浏览的表保持默认即可。
|
|
24
|
+
|
|
25
|
+
## 默认做法
|
|
26
|
+
|
|
27
|
+
- 主字段用人能认出这一行的业务名称或标题,不用流水号、外部 ID 或机器键。
|
|
28
|
+
- 字段按阅读顺序排列:判断状态最需要的字段(状态、负责人、关键日期、金额)靠前,技术辅助字段(排序值、外部 ID、同步标记)靠后或在视图里隐藏。
|
|
29
|
+
- 选项颜色与含义一致:完成或通过用绿,阻塞、风险或驳回用红或橙,进行中用蓝,未开始、暂停或归档用灰;含义不同、需要区分的选项不共用同一颜色。
|
|
30
|
+
- 视图围绕人的高频任务建,视图类型按 lark-base 的视图选型执行。
|
|
31
|
+
- 跨表引用、汇总和计算按 lark-base 的默认策略使用公式字段。
|
|
32
|
+
|
|
33
|
+
## 例外:应用内部数据
|
|
34
|
+
|
|
35
|
+
应用运行需要的技术数据,例如页面与 Agent 之间的状态同步、调用队列、游标、缓存、键值配置,本身不是业务事实,人也不需要浏览。优先不放进 Base:能由页面状态、Function 参数或环境变量承载的就不建表。确实需要持久化时,用单独的表与业务表分开,字段仍按存储层要求选用正确类型。
|
|
36
|
+
|
|
37
|
+
复用已有 Base 时,呈现层的新增和调整只在用户授权修改的范围内进行;未经授权不改动用户已有的视图、颜色和字段顺序。
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# 以机器人身份建站与交接
|
|
2
|
+
|
|
3
|
+
以机器人(bot)身份搭建时,新建 Base 与应用的属主是机器人,不是发起搭建的人。CLI 在资源创建后把管理员授权交给一个明确的人,让对方能直接打开 Base、管理应用。
|
|
4
|
+
|
|
5
|
+
## 声明身份
|
|
6
|
+
|
|
7
|
+
CLI 只采用明确声明的身份,不根据登录状态猜测:
|
|
8
|
+
|
|
9
|
+
| 场景 | 声明方式 |
|
|
10
|
+
|------|----------|
|
|
11
|
+
| 单次命令 | 任意命令加 `--as bot`(或 `--as user`) |
|
|
12
|
+
| 本机 profile 默认用 bot | `lark-cli config default-as bot` |
|
|
13
|
+
| 团队共享 bot | `lark-cli config bind --identity bot-only`,自带 strict-mode,无需再传参数 |
|
|
14
|
+
| 宿主通过环境变量注入凭证 | 只注入 `LARKSUITE_CLI_TENANT_ACCESS_TOKEN` 时自动只允许 bot;注入 App ID/Secret 时设置 `LARKSUITE_CLI_DEFAULT_AS=bot` |
|
|
15
|
+
|
|
16
|
+
未声明时一律以用户身份执行;用户登录失效会直接报错并提示登录,不会改用 bot 建站。
|
|
17
|
+
|
|
18
|
+
## 授权对象与结果
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
base-database-cli init . --schema schema.json --name <名称> --as bot
|
|
22
|
+
base-database-cli init . --schema schema.json --name <名称> --as bot --grant-admin <ou_...>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- 授权对象:当前 lark-cli 登录用户,加上 `--grant-admin` 指定的用户(追加,不替代)。
|
|
26
|
+
- 新建资源前必须有授权对象:两者都没有时 init 在任何写入前以 `blocked` 退出,否则建出的资源无人能打开。此时请用户按 `nextAction` 登录 lark-cli 后重跑原命令;open_id 按应用区分,用户无从得知,不要向用户索要。
|
|
27
|
+
- `--grant-admin` 指定了其他人时,两人都获得 Base `full_access` 与应用管理员:`userOpenId` 为指定用户,当前登录用户在 `alsoGrantedOpenId` 中报告。当前登录用户的 Base 授权由 lark-cli 建 Base 时自动授予,无法跳过;不希望其获得权限时,在没有用户登录的 bot profile 中执行。
|
|
28
|
+
- 范围:只针对本次 init 新建的 Base(`full_access`)与应用(管理员)。通过 `--base-token` / `--app-token` 绑定的已有资源不做任何授权。
|
|
29
|
+
- `--grant-admin` 供团队 Agent 等宿主使用:只在以 bot 搭建时可用,只接受同一应用下来自可信来源(如宿主收到的消息事件)的发起人 `open_id`;不从对话或通讯录推断。
|
|
30
|
+
|
|
31
|
+
返回的 `handoff` 分别报告 `base` 与 `app`:
|
|
32
|
+
|
|
33
|
+
| status | 含义 | 处理 |
|
|
34
|
+
|--------|------|------|
|
|
35
|
+
| `granted` | 已授权给 `userOpenId` | 告知用户可直接打开 |
|
|
36
|
+
| `skipped` | 续跑时没有授权对象 | 登录 lark-cli 后用原命令加 `--resume` |
|
|
37
|
+
| `failed` | 授权请求失败,`hint` 给出原因 | 按 `hint` 修复后用原命令加 `--resume` 重试,或按下文手动补加 |
|
|
38
|
+
| `not_applicable` | 资源不是本次新建 | 无需处理 |
|
|
39
|
+
|
|
40
|
+
授权失败不影响建站结果(`ok` 仍为 true),但必须把 `handoff` 的每一项如实告诉用户。应用授权失败后重试前,先确认对方是否已是应用管理员(超时的请求可能已生效)。初始化已完成时,原命令加 `--resume` 只重试未完成的授权,不再发出任何建站写入。
|
|
41
|
+
|
|
42
|
+
## 手动补加 / 核对
|
|
43
|
+
|
|
44
|
+
| 目标 | 命令 |
|
|
45
|
+
|------|------|
|
|
46
|
+
| 加 Base 管理员 | `lark-cli drive +member-add --token <base> --type bitable --member-type openid --member-id <ou_...> --perm full_access --as bot --yes` |
|
|
47
|
+
| 列/移除 Base 协作者 | `lark-cli drive +member-list` / `+member-remove`(同参) |
|
|
48
|
+
| 加/移除应用管理员 | `lark-cli api POST /open-apis/base/v3/sites/<app-token>/members --data '{"add":[{"member_id":"<ou_...>","member_type":"openid","role":3}]}' --as bot`(移除用 `{"remove":[...]}`,不传 role) |
|
|
49
|
+
|
|
50
|
+
- `member_type` 是 id 种类(`openid` / `openchat` / `opendepartmentid`),`member_id` 是对应的开放平台 id,不传内部数字 id。
|
|
51
|
+
- 应用成员接口需要 `base:appmode:update` scope,调用者须为该应用管理员(新建应用的 bot 默认满足);暂不支持添加其他租户的成员。
|
|
52
|
+
- 高危写前可 `--dry-run` 核对;`opendepartmentid` 只支持 `--as user`。
|
|
53
|
+
|
|
54
|
+
## 安全边界
|
|
55
|
+
|
|
56
|
+
- 共享宿主不要在 bot profile 中保留某个人的用户登录,否则授权会落到这个人。
|
|
57
|
+
- 授权不改变运行态数据边界:加管理员只影响能否直接打开、管理资源,不放开页面数据访问(Mutation / FaaS / Database Function 边界不变)。Preview/Prod 准入见[权限设计](permission-design.md#preview-与-prod-准入)。
|
|
58
|
+
- 移除协作者、下调权限同为危险操作,按 [Skill 主流程](../SKILL.md#外部操作与授权)核对目标与影响。
|
|
59
|
+
|
|
60
|
+
## bot 的 scope 前置
|
|
61
|
+
|
|
62
|
+
以 bot 走 `init` 建站,应用需申请:`base:app:create`、`base:appmode:create/read/update`、`base:table:read/create/update`、`base:field:read/create/update`、`base:record:create/read/update`、`base:site:create`、`bitable:app`;交接 Base 管理员另需 `docs:permission.member:create`。缺少时服务端返回 `99991672` 并给出申请链接(租户 scope 自动审批,应用管理员一次性配置)。
|
|
@@ -325,6 +325,8 @@ await invokeDatabaseFunction(
|
|
|
325
325
|
)
|
|
326
326
|
```
|
|
327
327
|
|
|
328
|
+
Page 的查询默认读到本会话此前的写入;遇 `DataNotReadyError` 表示数据同步中、写入已成功,按[写后读](mutations.md#写后读)处理。
|
|
329
|
+
|
|
328
330
|
FaaS handler 内部使用 context,projectId 为当前应用的工程常量:
|
|
329
331
|
|
|
330
332
|
```ts
|
|
@@ -375,4 +377,4 @@ Page 新入口 HTTP body:
|
|
|
375
377
|
|
|
376
378
|
`base-database-cli deploy` 统一调用服务端查询校验。编译成功仅证明编译阶段;实际读取按[发布与交付](release.md)或用户要求的[专项验收](verification.md)执行。失败时保留具体错误节点和 LogID,按 Catalog、参数与支持边界修复,不猜测响应 envelope 绕过。
|
|
377
379
|
|
|
378
|
-
workspace 或已安装 SDK 的工程,`contracts generate` 使用工程内 SDK `/codegen`。CLI 提取契约并隔离执行生成器;check
|
|
380
|
+
workspace 或已安装 SDK 的工程,`contracts generate` 使用工程内 SDK `/codegen`。CLI 提取契约并隔离执行生成器;check 只比较生成内容。依赖准备、契约过期及 `SDK_CODEGEN_UNAVAILABLE` 的处理统一见[Check 与契约生成](development.md#check-与契约生成),不能通过跳过生成或回退 CLI 模板修复。未安装 SDK 的 classic 工程保留旧输入类型生成行为。
|