@weave-kit/engine 1.1.0 → 1.2.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 +27 -0
- package/README.md +210 -210
- package/dist/adapters/auth/index.d.ts +1 -1
- package/dist/adapters/auth/index.d.ts.map +1 -1
- package/dist/adapters/auth/index.js +1 -1
- package/dist/adapters/auth/index.js.map +1 -1
- package/dist/adapters/auth/subject.d.ts +6 -0
- package/dist/adapters/auth/subject.d.ts.map +1 -1
- package/dist/adapters/auth/subject.js +16 -1
- package/dist/adapters/auth/subject.js.map +1 -1
- package/dist/adapters/events/index.d.ts.map +1 -1
- package/dist/adapters/events/index.js +4 -2
- package/dist/adapters/events/index.js.map +1 -1
- package/dist/adapters/rest/audit.d.ts.map +1 -1
- package/dist/adapters/rest/audit.js +8 -7
- package/dist/adapters/rest/audit.js.map +1 -1
- package/dist/adapters/rest/capabilities.d.ts +23 -0
- package/dist/adapters/rest/capabilities.d.ts.map +1 -0
- package/dist/adapters/rest/capabilities.js +27 -0
- package/dist/adapters/rest/capabilities.js.map +1 -0
- package/dist/adapters/rest/common.d.ts +10 -1
- package/dist/adapters/rest/common.d.ts.map +1 -1
- package/dist/adapters/rest/common.js +4 -0
- package/dist/adapters/rest/common.js.map +1 -1
- package/dist/adapters/rest/identityAdmin.d.ts +6 -3
- package/dist/adapters/rest/identityAdmin.d.ts.map +1 -1
- package/dist/adapters/rest/identityAdmin.js +53 -9
- package/dist/adapters/rest/identityAdmin.js.map +1 -1
- package/dist/adapters/rest/identitySync.d.ts +23 -0
- package/dist/adapters/rest/identitySync.d.ts.map +1 -0
- package/dist/adapters/rest/identitySync.js +28 -0
- package/dist/adapters/rest/identitySync.js.map +1 -0
- package/dist/adapters/rest/index.d.ts +5 -0
- package/dist/adapters/rest/index.d.ts.map +1 -1
- package/dist/adapters/rest/index.js +2 -0
- package/dist/adapters/rest/index.js.map +1 -1
- package/dist/adapters/rest/plugin.d.ts +6 -0
- package/dist/adapters/rest/plugin.d.ts.map +1 -1
- package/dist/adapters/rest/plugin.js +9 -9
- package/dist/adapters/rest/plugin.js.map +1 -1
- package/dist/adapters/rest/workflow.js +9 -9
- package/dist/adapters/rest/workflow.js.map +1 -1
- package/dist/cli/commands/identity.d.ts +5 -1
- package/dist/cli/commands/identity.d.ts.map +1 -1
- package/dist/cli/commands/identity.js +29 -0
- package/dist/cli/commands/identity.js.map +1 -1
- package/dist/cli/index.js +14 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/types/commands.d.ts +12 -0
- package/dist/cli/types/commands.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +1 -1
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/values.d.ts +2 -0
- package/dist/cli/types/values.d.ts.map +1 -1
- package/dist/cli/types/values.js +2 -0
- package/dist/cli/types/values.js.map +1 -1
- package/dist/core/audit/types.d.ts +4 -0
- package/dist/core/audit/types.d.ts.map +1 -1
- package/dist/core/audit/types.js.map +1 -1
- package/dist/core/limiter/index.d.ts +1 -1
- package/dist/core/limiter/index.d.ts.map +1 -1
- package/dist/core/limiter/index.js +1 -1
- package/dist/core/limiter/index.js.map +1 -1
- package/dist/core/limiter/quota.d.ts +6 -3
- package/dist/core/limiter/quota.d.ts.map +1 -1
- package/dist/core/limiter/quota.js +7 -4
- package/dist/core/limiter/quota.js.map +1 -1
- package/dist/core/object/validate/field.d.ts.map +1 -1
- package/dist/core/object/validate/field.js +4 -2
- package/dist/core/object/validate/field.js.map +1 -1
- package/dist/core/provider/capabilities/index.d.ts +3 -0
- package/dist/core/provider/capabilities/index.d.ts.map +1 -0
- package/dist/core/provider/capabilities/index.js +2 -0
- package/dist/core/provider/capabilities/index.js.map +1 -0
- package/dist/core/provider/capabilities/types.d.ts +22 -0
- package/dist/core/provider/capabilities/types.d.ts.map +1 -0
- package/dist/core/provider/capabilities/types.js +3 -0
- package/dist/core/provider/capabilities/types.js.map +1 -0
- package/dist/core/provider/identity/directory.d.ts +23 -0
- package/dist/core/provider/identity/directory.d.ts.map +1 -1
- package/dist/core/provider/identity/index.d.ts +1 -1
- package/dist/core/provider/identity/index.d.ts.map +1 -1
- package/dist/core/provider/identity/index.js.map +1 -1
- package/dist/core/provider/identity/types.d.ts +6 -0
- package/dist/core/provider/identity/types.d.ts.map +1 -1
- package/dist/core/provider/index.d.ts +1 -0
- package/dist/core/provider/index.d.ts.map +1 -1
- package/dist/core/provider/index.js +1 -0
- package/dist/core/provider/index.js.map +1 -1
- package/dist/core/rbac/index.d.ts +1 -0
- package/dist/core/rbac/index.d.ts.map +1 -1
- package/dist/core/rbac/index.js +1 -0
- package/dist/core/rbac/index.js.map +1 -1
- package/dist/core/rbac/rls.d.ts.map +1 -1
- package/dist/core/rbac/rls.js +9 -3
- package/dist/core/rbac/rls.js.map +1 -1
- package/dist/core/rbac/rowScope.d.ts.map +1 -1
- package/dist/core/rbac/rowScope.js +19 -15
- package/dist/core/rbac/rowScope.js.map +1 -1
- package/dist/core/rbac/scopeMarker.d.ts +10 -0
- package/dist/core/rbac/scopeMarker.d.ts.map +1 -0
- package/dist/core/rbac/scopeMarker.js +25 -0
- package/dist/core/rbac/scopeMarker.js.map +1 -0
- package/dist/core/script/types.d.ts +2 -0
- package/dist/core/script/types.d.ts.map +1 -1
- package/dist/core/script/types.js.map +1 -1
- package/dist/core/types/fields.d.ts +2 -0
- package/dist/core/types/fields.d.ts.map +1 -1
- package/dist/core/types/principal.d.ts +3 -0
- package/dist/core/types/principal.d.ts.map +1 -1
- package/dist/core/types/principal.js +6 -0
- package/dist/core/types/principal.js.map +1 -1
- package/dist/core/types/values.d.ts +7 -1
- package/dist/core/types/values.d.ts.map +1 -1
- package/dist/core/types/values.js +7 -1
- package/dist/core/types/values.js.map +1 -1
- package/dist/runtime/data-access/formula.js +1 -1
- package/dist/runtime/data-access/index.d.ts +1 -1
- package/dist/runtime/data-access/index.d.ts.map +1 -1
- package/dist/runtime/data-access/index.js +1 -1
- package/dist/runtime/data-access/index.js.map +1 -1
- package/dist/runtime/data-access/query.d.ts.map +1 -1
- package/dist/runtime/data-access/query.js +13 -16
- package/dist/runtime/data-access/query.js.map +1 -1
- package/dist/runtime/data-access/rbac.js +3 -3
- package/dist/runtime/data-access/rbac.js.map +1 -1
- package/dist/runtime/data-access/sql-executor.d.ts +2 -1
- package/dist/runtime/data-access/sql-executor.d.ts.map +1 -1
- package/dist/runtime/data-access/sql-executor.js +7 -2
- package/dist/runtime/data-access/sql-executor.js.map +1 -1
- package/dist/runtime/data-access/types.d.ts +4 -0
- package/dist/runtime/data-access/types.d.ts.map +1 -1
- package/dist/runtime/data-access/types.js +5 -1
- package/dist/runtime/data-access/types.js.map +1 -1
- package/dist/runtime/data-access/workflow.js +27 -27
- package/dist/runtime/engine.d.ts +27 -0
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +19 -2
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/identity/admin.d.ts +13 -5
- package/dist/runtime/identity/admin.d.ts.map +1 -1
- package/dist/runtime/identity/admin.js +24 -4
- package/dist/runtime/identity/admin.js.map +1 -1
- package/dist/runtime/identity/store.d.ts +7 -1
- package/dist/runtime/identity/store.d.ts.map +1 -1
- package/dist/runtime/identity/store.js +57 -24
- package/dist/runtime/identity/store.js.map +1 -1
- package/dist/runtime/metadata/revision.js +2 -2
- package/dist/runtime/record-meta/store.js +2 -2
- package/dist/subsystems/audit/store.d.ts.map +1 -1
- package/dist/subsystems/audit/store.js +6 -4
- package/dist/subsystems/audit/store.js.map +1 -1
- package/dist/subsystems/script/backend/types.d.ts +1 -0
- package/dist/subsystems/script/backend/types.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.js +2 -1
- package/dist/subsystems/script/bridge.js.map +1 -1
- package/dist/subsystems/workflow/store.js +13 -13
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/workflow-migrate.d.ts +0 -11
- package/dist/cli/commands/workflow-migrate.d.ts.map +0 -1
- package/dist/cli/commands/workflow-migrate.js +0 -120
- package/dist/cli/commands/workflow-migrate.js.map +0 -1
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { createPool } from '../../core/index.js';
|
|
2
|
-
import { gitCommitAuthor, loadSchemaDir, recordWorkflowMigration, } from '../../runtime/git/index.js';
|
|
3
|
-
import { loadConfig } from '../load-config.js';
|
|
4
|
-
import { resolveProjectFieldTypes } from '../resolve-field-types.js';
|
|
5
|
-
const SNAKE_CASE = /^[a-z][a-z0-9_]*$/;
|
|
6
|
-
const q = (id) => `"${id}"`;
|
|
7
|
-
/**
|
|
8
|
-
* `weave workflow:migrate <object> [--dry-run]` — apply the object's declared
|
|
9
|
-
* `workflow.json` `migrations` remaps to existing records in PostgreSQL
|
|
10
|
-
* (`UPDATE <table> SET <stateField> = to WHERE <stateField> = from`). Reports
|
|
11
|
-
* every remaining orphan state (a value not declared in `states` and not covered
|
|
12
|
-
* by a remap) as a warning. Applying writes a system-actor `workflow.migrated`
|
|
13
|
-
* audit event. Idempotent (a second run moves nothing).
|
|
14
|
-
*/
|
|
15
|
-
export async function workflowMigrate(cwd, object, options) {
|
|
16
|
-
const p = options.printer;
|
|
17
|
-
if (!SNAKE_CASE.test(object)) {
|
|
18
|
-
p.error(`object name must be snake_case: "${object}"`);
|
|
19
|
-
process.exitCode = 1;
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const config = await loadConfig(cwd);
|
|
23
|
-
const schemaDir = config.schemaDir ?? cwd;
|
|
24
|
-
const fieldTypes = await resolveProjectFieldTypes(cwd, config);
|
|
25
|
-
const { registry } = await loadSchemaDir(schemaDir, {
|
|
26
|
-
locale: config.locale,
|
|
27
|
-
allowedFieldTypes: config.features?.fieldTypes,
|
|
28
|
-
fieldTypes,
|
|
29
|
-
});
|
|
30
|
-
const def = registry.get(object);
|
|
31
|
-
if (def === undefined) {
|
|
32
|
-
p.error(`object "${object}" not found under ${schemaDir}/objects`);
|
|
33
|
-
process.exitCode = 1;
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const wf = def.workflow;
|
|
37
|
-
if (wf === undefined) {
|
|
38
|
-
p.error(`object "${object}" has no active workflow (run \`weave workflow:open ${object}\`)`);
|
|
39
|
-
process.exitCode = 1;
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const databaseUrl = config.migrationDatabaseUrl ?? config.databaseUrl ?? process.env.DATABASE_URL;
|
|
43
|
-
if (databaseUrl === undefined) {
|
|
44
|
-
p.error('no database URL (set DATABASE_URL or config.databaseUrl)');
|
|
45
|
-
process.exitCode = 1;
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const pool = createPool(databaseUrl);
|
|
49
|
-
try {
|
|
50
|
-
let counts;
|
|
51
|
-
try {
|
|
52
|
-
const res = await pool.query(`SELECT ${q(wf.stateField)} AS state, count(*)::int AS rows FROM ${q(def.name)} GROUP BY 1`);
|
|
53
|
-
counts = res.rows.map((row) => ({
|
|
54
|
-
state: row.state ?? '(null)',
|
|
55
|
-
rows: row.rows,
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
p.error(`cannot read ${def.name}: ${error instanceof Error ? error.message : String(error)} (run \`weave migrate\` first)`);
|
|
60
|
-
process.exitCode = 1;
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const migrations = wf.migrations ?? [];
|
|
64
|
-
const remapped = [];
|
|
65
|
-
for (const migration of migrations) {
|
|
66
|
-
if (options.dryRun === true) {
|
|
67
|
-
const rows = counts.find((c) => c.state === migration.from)?.rows ?? 0;
|
|
68
|
-
remapped.push({ from: migration.from, to: migration.to, rows });
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
const res = await pool.query(`UPDATE ${q(def.name)} SET ${q(wf.stateField)} = $1 WHERE ${q(wf.stateField)} = $2`, [migration.to, migration.from]);
|
|
72
|
-
remapped.push({ from: migration.from, to: migration.to, rows: res.rowCount ?? 0 });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
const liveStates = new Set(wf.states.map((s) => s.name));
|
|
76
|
-
const covered = new Set(migrations.map((m) => m.from));
|
|
77
|
-
const orphans = counts.filter((c) => !liveStates.has(c.state) && !covered.has(c.state));
|
|
78
|
-
if (options.dryRun !== true && remapped.some((r) => r.rows > 0)) {
|
|
79
|
-
const author = await gitCommitAuthor(schemaDir);
|
|
80
|
-
await recordWorkflowMigration(pool, [
|
|
81
|
-
{
|
|
82
|
-
object: def.name,
|
|
83
|
-
stateField: wf.stateField,
|
|
84
|
-
...(wf.version === undefined ? {} : { version: wf.version }),
|
|
85
|
-
...(def.workflowHash === undefined ? {} : { hash: def.workflowHash }),
|
|
86
|
-
moved: remapped.filter((r) => r.rows > 0),
|
|
87
|
-
},
|
|
88
|
-
], { author });
|
|
89
|
-
}
|
|
90
|
-
if (remapped.length === 0 && orphans.length === 0) {
|
|
91
|
-
p.log(`object "${object}": no migrations declared and no orphan states — nothing to do`);
|
|
92
|
-
}
|
|
93
|
-
else if (options.dryRun === true) {
|
|
94
|
-
for (const r of remapped)
|
|
95
|
-
p.log(`would move ${r.rows} record(s): ${r.from} → ${r.to}`);
|
|
96
|
-
if (remapped.length === 0)
|
|
97
|
-
p.log(`object "${object}": no migrations declared`);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
for (const r of remapped)
|
|
101
|
-
p.log(`moved ${r.rows} record(s): ${r.from} → ${r.to}`);
|
|
102
|
-
}
|
|
103
|
-
for (const orphan of orphans) {
|
|
104
|
-
p.error(`warning: ${orphan.rows} record(s) in state "${orphan.state}" are not declared and not covered by a migration`);
|
|
105
|
-
}
|
|
106
|
-
p.data({
|
|
107
|
-
object: def.name,
|
|
108
|
-
stateField: wf.stateField,
|
|
109
|
-
workflowVersion: wf.version ?? null,
|
|
110
|
-
workflowHash: def.workflowHash ?? null,
|
|
111
|
-
dryRun: options.dryRun === true,
|
|
112
|
-
remapped,
|
|
113
|
-
orphans,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
finally {
|
|
117
|
-
await pool.end();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=workflow-migrate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/workflow-migrate.ts"],"names":[],"mappings":"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"}
|