@happyvertical/smrt-core 0.55.12 → 0.55.14
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/agents/cookbook.md +12 -3
- package/agents/object-runtime.md +11 -0
- package/agents/schema-paths.md +4 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +4 -1
- package/dist/collection.js.map +1 -1
- package/dist/cookbook/engine/document.d.ts.map +1 -1
- package/dist/cookbook/engine/document.js +16 -18
- package/dist/cookbook/engine/document.js.map +1 -1
- package/dist/cookbook/engine/types.d.ts +2 -0
- package/dist/cookbook/engine/types.d.ts.map +1 -1
- package/dist/cookbook/engine/types.js.map +1 -1
- package/dist/cookbook/v1.schema.json +60 -3
- package/dist/cookbook/validate.d.ts +40 -4
- package/dist/cookbook/validate.d.ts.map +1 -1
- package/dist/cookbook/validate.js +228 -58
- package/dist/cookbook/validate.js.map +1 -1
- package/dist/dispatch/bus.d.ts +9 -4
- package/dist/dispatch/bus.d.ts.map +1 -1
- package/dist/dispatch/bus.js +11 -6
- package/dist/dispatch/bus.js.map +1 -1
- package/dist/dispatch/collections/Dispatches.d.ts +15 -5
- package/dist/dispatch/collections/Dispatches.d.ts.map +1 -1
- package/dist/dispatch/collections/Dispatches.js +29 -9
- package/dist/dispatch/collections/Dispatches.js.map +1 -1
- package/dist/dispatch/types.d.ts +5 -1
- package/dist/dispatch/types.d.ts.map +1 -1
- package/dist/manifest/static-manifest.js +1 -1
- package/dist/manifest/static-manifest.js.map +1 -1
- package/dist/manifest/store.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/migrations/differ.d.ts +2 -0
- package/dist/migrations/differ.d.ts.map +1 -1
- package/dist/migrations/differ.js +9 -3
- package/dist/migrations/differ.js.map +1 -1
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +5 -1
- package/dist/object.js.map +1 -1
- package/dist/schema/foreign-key-ddl.d.ts +2 -0
- package/dist/schema/foreign-key-ddl.d.ts.map +1 -1
- package/dist/schema/foreign-key-ddl.js +10 -6
- package/dist/schema/foreign-key-ddl.js.map +1 -1
- package/dist/smrt-knowledge.json +9 -9
- package/dist/utils.d.ts +21 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +52 -2
- package/dist/utils.js.map +1 -1
- package/package.json +10 -10
package/dist/manifest.json
CHANGED
|
@@ -189,6 +189,8 @@ export declare function canonicalizeDefault(fragment: string | undefined, column
|
|
|
189
189
|
* SchemaComparer class for comparing manifest schemas to database
|
|
190
190
|
*/
|
|
191
191
|
export declare class SchemaComparer {
|
|
192
|
+
/** SQLite can add a nullable reference only when old rows receive NULL. */
|
|
193
|
+
private canInlineNewReference;
|
|
192
194
|
private db;
|
|
193
195
|
private options;
|
|
194
196
|
private engine;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../../src/migrations/differ.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../../src/migrations/differ.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { conflictIndexName, isLegacyNaturalKeyIndex } from "../schema/conflict-target.js";
|
|
2
2
|
import { normalizeForeignKeyAction, requireForeignKeyAction } from "../schema/foreign-key-policy.js";
|
|
3
3
|
import { isJsonPathIndex, isStiSubtypeUniqueIndex, renderIndexTarget, shortenIdentifier } from "../schema/index-utils.js";
|
|
4
|
-
import { foreignKeyConstraintName, foreignKeyRelationshipKey, renderForeignKeyAddStatements, renderForeignKeyOrphanDetector, renderForeignKeyOrphanRepair, renderForeignKeyReplaceStatements, schemaForeignKeys, schemaForeignKeysForEngine } from "../schema/foreign-key-ddl.js";
|
|
4
|
+
import { foreignKeyConstraintName, foreignKeyRelationshipKey, renderForeignKeyAddStatements, renderForeignKeyOrphanDetector, renderForeignKeyOrphanRepair, renderForeignKeyReference, renderForeignKeyReplaceStatements, schemaForeignKeys, schemaForeignKeysForEngine } from "../schema/foreign-key-ddl.js";
|
|
5
5
|
import { renderNullEqualConflictIndex } from "../schema/ddl/null-equal-index.js";
|
|
6
6
|
import { detectEngine, getDDLStrategy } from "../schema/ddl/index.js";
|
|
7
7
|
import { mapWithConcurrency } from "../schema/bounded-concurrency.js";
|
|
@@ -316,6 +316,10 @@ function canonicalizeDefault(fragment, columnType) {
|
|
|
316
316
|
* SchemaComparer class for comparing manifest schemas to database
|
|
317
317
|
*/
|
|
318
318
|
var SchemaComparer = class SchemaComparer {
|
|
319
|
+
/** SQLite can add a nullable reference only when old rows receive NULL. */
|
|
320
|
+
canInlineNewReference(column) {
|
|
321
|
+
return this.engine === "sqlite" && column !== void 0 && !column.notNull && !column.backfill && (column.defaultValue === void 0 || column.defaultValue === null);
|
|
322
|
+
}
|
|
319
323
|
db;
|
|
320
324
|
options;
|
|
321
325
|
engine;
|
|
@@ -803,6 +807,7 @@ var SchemaComparer = class SchemaComparer {
|
|
|
803
807
|
const expectedDelete = foreignKey.onDelete === void 0 ? "NO ACTION" : requireForeignKeyAction(foreignKey.onDelete, `${tableName}.${foreignKey.column} ON DELETE`);
|
|
804
808
|
const expectedUpdate = foreignKey.onUpdate === void 0 ? "NO ACTION" : requireForeignKeyAction(foreignKey.onUpdate, `${tableName}.${foreignKey.column} ON UPDATE`);
|
|
805
809
|
if (liveForeignKeys.some((live) => live.column === foreignKey.column && live.referencesTable === foreignKey.referencesTable && live.referencesColumn === foreignKey.referencesColumn && (normalizeForeignKeyAction(live.onDelete) || "NO ACTION") === expectedDelete && (normalizeForeignKeyAction(live.onUpdate) || "NO ACTION") === expectedUpdate)) continue;
|
|
810
|
+
if (!dbSchema.columns[foreignKey.column] && this.canInlineNewReference(manifest.columns[foreignKey.column])) continue;
|
|
806
811
|
const orphanOptions = await this.getForeignKeyOrphanOptions(tableName, manifest, dbSchema, foreignKey, manifestSchemas);
|
|
807
812
|
const detectorSql = renderForeignKeyOrphanDetector(tableName, foreignKey, {
|
|
808
813
|
engine: this.engine,
|
|
@@ -1046,7 +1051,7 @@ var SchemaComparer = class SchemaComparer {
|
|
|
1046
1051
|
async compareColumns(tableName, manifest, dbSchema) {
|
|
1047
1052
|
const changes = [];
|
|
1048
1053
|
const dbColumnNames = new Set(Object.keys(dbSchema.columns));
|
|
1049
|
-
for (const [colName, colDef] of Object.entries(manifest.columns)) if (!dbColumnNames.has(colName)) changes.push(...await this.generateAddColumnChanges(tableName, colName, colDef));
|
|
1054
|
+
for (const [colName, colDef] of Object.entries(manifest.columns)) if (!dbColumnNames.has(colName)) changes.push(...await this.generateAddColumnChanges(tableName, colName, colDef, this.canInlineNewReference(colDef) ? schemaForeignKeysForEngine(manifest, this.engine).filter((fk) => fk.column === colName) : []));
|
|
1050
1055
|
else {
|
|
1051
1056
|
const dbCol = dbSchema.columns[colName];
|
|
1052
1057
|
let typeDrifted = false;
|
|
@@ -2465,7 +2470,7 @@ var SchemaComparer = class SchemaComparer {
|
|
|
2465
2470
|
* `sqlStatements` (and the last statement in `sql`) so both the CLI and the
|
|
2466
2471
|
* orchestrator execute it as one unit.
|
|
2467
2472
|
*/
|
|
2468
|
-
async generateAddColumnChanges(tableName, colName, colDef) {
|
|
2473
|
+
async generateAddColumnChanges(tableName, colName, colDef, inlineReferences = []) {
|
|
2469
2474
|
const validatedType = isValidSQLDataType(colDef.type) ? colDef.type : "TEXT";
|
|
2470
2475
|
if (!isValidSQLDataType(colDef.type)) logger.warn(`[SchemaComparer] Invalid manifest type "${colDef.type}" for ${tableName}.${colName}, treating as TEXT`);
|
|
2471
2476
|
const quotedTable = this.quoteIdentifier(tableName);
|
|
@@ -2502,6 +2507,7 @@ var SchemaComparer = class SchemaComparer {
|
|
|
2502
2507
|
if (formattedDefault !== void 0 && !deferDefault) parts.push(`DEFAULT ${formattedDefault}`);
|
|
2503
2508
|
if (colDef.check) if (inlineConstraintsAllowed) parts.push(`CHECK (${colDef.check})`);
|
|
2504
2509
|
else logger.warn(`[SchemaComparer] ${this.engine} rejects CHECK constraints in ADD COLUMN; ${tableName}.${colName} is added without CHECK (${colDef.check})`);
|
|
2510
|
+
for (const reference of inlineReferences) parts.push(renderForeignKeyReference(tableName, reference));
|
|
2505
2511
|
const addColumn = `ALTER TABLE ${quotedTable} ADD COLUMN ${parts.join(" ")}`;
|
|
2506
2512
|
if (enforceNotNull && !inlineConstraintsAllowed) followUps.push(...await this.setNotNullStatements(tableName, colName));
|
|
2507
2513
|
followUps.push(...backfillFollowUps);
|