pipework 0.75.0 → 0.75.1

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 CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.75.1
4
+
5
+ - **Fixed: a column in a table-level foreign key may carry the referenced field's brand.** The startup check accepted an inherited brand only through a field-level `.references()`, so a tenant-scoped app using composite foreign keys (`(tenant_id, parent_id) → parent(tenant_id, id)`) was refused at `serve` with a `[domain] brand … used by both` issue for every such column. The column is matched by position to the foreign column (#481).
6
+
3
7
  ## 0.75.0
4
8
 
5
9
  - **New: `pipework check` runs the startup checks that need no database.** Domain integrity and surfaces, the checks `serve` runs before it connects, now run as a "Startup checks" step, so an app that `serve` would refuse no longer passes `check`. An app that passed before may now fail `check` on issues `serve` already refused (#482).
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/core/validation/domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAC9C,mBAAmB,EAAE,SAAS,MAAM,EAAE,GACrC,eAAe,EAAE,CA+EnB"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/core/validation/domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAajD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAC9C,mBAAmB,EAAE,SAAS,MAAM,EAAE,GACrC,eAAe,EAAE,CAgFnB"}
@@ -1,4 +1,17 @@
1
1
  import { resolveDefinitionRef } from '../../data/domain/types.js';
2
+ function inheritsBrandFromCompositeFK(def, fieldName, brand) {
3
+ for (const fk of def.$options.foreignKeys ?? []) {
4
+ const i = fk.columns.indexOf(fieldName);
5
+ if (i === -1)
6
+ continue;
7
+ const foreignKey = fk.references.columns[i];
8
+ if (foreignKey === undefined)
9
+ continue;
10
+ if (resolveDefinitionRef(fk.references.definition).$fields[foreignKey]?._meta.brand === brand)
11
+ return true;
12
+ }
13
+ return false;
14
+ }
2
15
  export function validateDomainIntegrity(definitions, configuredDatabases) {
3
16
  const issues = [];
4
17
  const tableNames = new Map();
@@ -45,8 +58,9 @@ export function validateDomainIntegrity(definitions, configuredDatabases) {
45
58
  }
46
59
  }
47
60
  if (meta.brand !== undefined) {
48
- const isInheritedFromFK = meta.reference !== undefined
49
- && resolveDefinitionRef(meta.reference.definition).$fields[meta.reference.field]?._meta.brand === meta.brand;
61
+ const isInheritedFromFK = (meta.reference !== undefined
62
+ && resolveDefinitionRef(meta.reference.definition).$fields[meta.reference.field]?._meta.brand === meta.brand)
63
+ || inheritsBrandFromCompositeFK(def, fieldName, meta.brand);
50
64
  if (!isInheritedFromFK) {
51
65
  const existing = brandNames.get(meta.brand);
52
66
  if (existing !== undefined && existing !== `${name}.${fieldName}`) {
@@ -1 +1 @@
1
- {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/core/validation/domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../src/core/validation/domain.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.75.0",
3
+ "version": "0.75.1",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",