@generazioneai/genquery 0.9.0 → 0.12.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/dist/entity-policy-builder.d.ts +60 -0
- package/dist/entity-policy-builder.d.ts.map +1 -0
- package/dist/entity-policy-builder.js +62 -0
- package/dist/entity-policy-builder.js.map +1 -0
- package/dist/federation.d.ts +44 -11
- package/dist/federation.d.ts.map +1 -1
- package/dist/federation.js +55 -30
- package/dist/federation.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/tests/entity-policy-builder.test.d.ts +2 -0
- package/dist/tests/entity-policy-builder.test.d.ts.map +1 -0
- package/dist/tests/entity-policy-builder.test.js +68 -0
- package/dist/tests/entity-policy-builder.test.js.map +1 -0
- package/dist/tests/federation.test.js +113 -0
- package/dist/tests/federation.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EntityPolicy builder — DENY-based, derived from a Prisma DMMF datamodel + resource
|
|
3
|
+
* manifests. Centralizes the boilerplate every backend duplicated in
|
|
4
|
+
* `src/authz/genquery-policy.ts`.
|
|
5
|
+
*
|
|
6
|
+
* Model: PERMISSIVE by default — every scalar/enum is filterable/sortable/selectable
|
|
7
|
+
* and every relation is includable/filterableRelations, MINUS the secret fields and
|
|
8
|
+
* an optional per-model `deny`. maxPerPage is taken from the matching manifest's
|
|
9
|
+
* `autoquery.pagination.max`, else `defaultMaxPerPage`. Keyed by DMMF model name
|
|
10
|
+
* (PascalCase) so it maps 1:1 onto the Schema. Pass the result as `schema.policy`
|
|
11
|
+
* (or to {@link applyPolicy}).
|
|
12
|
+
*/
|
|
13
|
+
import type { EntityPolicy } from "./schema";
|
|
14
|
+
/**
|
|
15
|
+
* Canonical credential/secret field names — NEVER filterable/sortable/selectable on
|
|
16
|
+
* ANY model. Single source of truth: a backend gets the full set automatically and
|
|
17
|
+
* can only ADD via `extraSecretFields` (no per-service drift / forgotten fields).
|
|
18
|
+
* NB: `hash` is intentionally NOT here (e.g. Media dedup queries by hash; the value
|
|
19
|
+
* is still kept out of responses by entity serialization / findOne select-stripping).
|
|
20
|
+
*/
|
|
21
|
+
export declare const DEFAULT_SECRET_FIELDS: ReadonlySet<string>;
|
|
22
|
+
/** Minimal structural shape of a DMMF field (Prisma.dmmf.datamodel.models[].fields). */
|
|
23
|
+
type DMField = {
|
|
24
|
+
name: string;
|
|
25
|
+
kind: string;
|
|
26
|
+
};
|
|
27
|
+
/** Minimal structural shape of a DMMF model. */
|
|
28
|
+
type DMModel = {
|
|
29
|
+
name: string;
|
|
30
|
+
fields: readonly DMField[];
|
|
31
|
+
};
|
|
32
|
+
/** Structural manifest shape consumed here (a `ResourceManifest` satisfies it). */
|
|
33
|
+
export interface PolicyManifestLike {
|
|
34
|
+
prismaModel?: string;
|
|
35
|
+
autoquery?: {
|
|
36
|
+
pagination?: {
|
|
37
|
+
max?: number;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface BuildGenQueryPolicyOptions {
|
|
42
|
+
/** Prisma DMMF datamodel — `{ models: [...] }` or a bare models array. */
|
|
43
|
+
datamodel: {
|
|
44
|
+
models: readonly DMModel[];
|
|
45
|
+
} | readonly DMModel[];
|
|
46
|
+
/** Resource manifests (structural) → per-model maxPerPage from autoquery.pagination.max. */
|
|
47
|
+
manifests?: readonly PolicyManifestLike[];
|
|
48
|
+
/** Per-model extra deny beyond secrets: fields/relations not queryable. */
|
|
49
|
+
deny?: Record<string, {
|
|
50
|
+
fields?: readonly string[];
|
|
51
|
+
relations?: readonly string[];
|
|
52
|
+
}>;
|
|
53
|
+
/** Extra secret field names added to {@link DEFAULT_SECRET_FIELDS}. */
|
|
54
|
+
extraSecretFields?: Iterable<string>;
|
|
55
|
+
/** Fallback maxPerPage when a manifest declares none. Default 200. */
|
|
56
|
+
defaultMaxPerPage?: number;
|
|
57
|
+
}
|
|
58
|
+
export declare function buildGenQueryPolicy(opts: BuildGenQueryPolicyOptions): Record<string, EntityPolicy>;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=entity-policy-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-policy-builder.d.ts","sourceRoot":"","sources":["../src/entity-policy-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAWpD,CAAC;AAEH,wFAAwF;AACxF,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9C,gDAAgD;AAChD,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,CAAC;AAE5D,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,SAAS,EAAE;QAAE,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,OAAO,EAAE,CAAC;IAC/D,4FAA4F;IAC5F,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrF,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,0BAA0B,GAC/B,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAwC9B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SECRET_FIELDS = void 0;
|
|
4
|
+
exports.buildGenQueryPolicy = buildGenQueryPolicy;
|
|
5
|
+
/**
|
|
6
|
+
* Canonical credential/secret field names — NEVER filterable/sortable/selectable on
|
|
7
|
+
* ANY model. Single source of truth: a backend gets the full set automatically and
|
|
8
|
+
* can only ADD via `extraSecretFields` (no per-service drift / forgotten fields).
|
|
9
|
+
* NB: `hash` is intentionally NOT here (e.g. Media dedup queries by hash; the value
|
|
10
|
+
* is still kept out of responses by entity serialization / findOne select-stripping).
|
|
11
|
+
*/
|
|
12
|
+
exports.DEFAULT_SECRET_FIELDS = new Set([
|
|
13
|
+
"password",
|
|
14
|
+
"totpSecret",
|
|
15
|
+
"mfaSecret",
|
|
16
|
+
"clientSecret",
|
|
17
|
+
"secret",
|
|
18
|
+
"tokenHash",
|
|
19
|
+
"refreshTokenHash",
|
|
20
|
+
"apiKeyHash",
|
|
21
|
+
"webauthnCredId",
|
|
22
|
+
"webauthnPubKey",
|
|
23
|
+
]);
|
|
24
|
+
const pascal = (s) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : s);
|
|
25
|
+
function buildGenQueryPolicy(opts) {
|
|
26
|
+
const src = opts.datamodel;
|
|
27
|
+
const models = (Array.isArray(src) ? src : src?.models) ?? [];
|
|
28
|
+
const secrets = new Set(exports.DEFAULT_SECRET_FIELDS);
|
|
29
|
+
for (const f of opts.extraSecretFields ?? [])
|
|
30
|
+
secrets.add(f);
|
|
31
|
+
const deny = opts.deny ?? {};
|
|
32
|
+
const fallbackMax = opts.defaultMaxPerPage ?? 200;
|
|
33
|
+
const maxByModel = {};
|
|
34
|
+
for (const m of opts.manifests ?? []) {
|
|
35
|
+
const max = m.autoquery?.pagination?.max;
|
|
36
|
+
const key = pascal(m.prismaModel ?? "");
|
|
37
|
+
if (key && typeof max === "number")
|
|
38
|
+
maxByModel[key] = max;
|
|
39
|
+
}
|
|
40
|
+
const policy = {};
|
|
41
|
+
for (const model of models) {
|
|
42
|
+
const d = deny[model.name] ?? {};
|
|
43
|
+
const denyFields = new Set([...secrets, ...(d.fields ?? [])]);
|
|
44
|
+
const denyRelations = new Set(d.relations ?? []);
|
|
45
|
+
const scalars = model.fields
|
|
46
|
+
.filter((f) => (f.kind === "scalar" || f.kind === "enum") && !denyFields.has(f.name))
|
|
47
|
+
.map((f) => f.name);
|
|
48
|
+
const relations = model.fields
|
|
49
|
+
.filter((f) => f.kind === "object" && !denyRelations.has(f.name))
|
|
50
|
+
.map((f) => f.name);
|
|
51
|
+
policy[model.name] = {
|
|
52
|
+
filterable: scalars,
|
|
53
|
+
sortable: scalars,
|
|
54
|
+
selectable: scalars,
|
|
55
|
+
includable: relations,
|
|
56
|
+
filterableRelations: relations,
|
|
57
|
+
maxPerPage: maxByModel[model.name] ?? fallbackMax,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return policy;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=entity-policy-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-policy-builder.js","sourceRoot":"","sources":["../src/entity-policy-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/federation.d.ts
CHANGED
|
@@ -34,6 +34,14 @@ export interface FederatedModelShape {
|
|
|
34
34
|
relations: readonly string[];
|
|
35
35
|
/** Scalar/enum field names (FK candidates live here). */
|
|
36
36
|
scalars: readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* Cross-service "soft-FK" includes declared CO-LOCATED with the model (resource
|
|
39
|
+
* manifest), key → target model. Resolves semantic aliases whose key name does NOT
|
|
40
|
+
* match the model (es. `customer` → 'Juridical') — cases the `<key>Id`+`UpperFirst(key)`
|
|
41
|
+
* convention can't infer. Harvested into the index from the manifests; takes precedence
|
|
42
|
+
* over the global {@link AliasMap} but yields to a call-level `override`. fk default `<key>Id`.
|
|
43
|
+
*/
|
|
44
|
+
links?: Readonly<Record<string, FederationAlias>>;
|
|
37
45
|
}
|
|
38
46
|
export interface FederatedServiceShape {
|
|
39
47
|
/** Owning service name — e.g. 'skillID'. */
|
|
@@ -85,20 +93,43 @@ export declare class FederationPlanError extends Error {
|
|
|
85
93
|
* JuridicalIndividual → juridicalIndividuals · City → cities · Address → addresses
|
|
86
94
|
*/
|
|
87
95
|
export declare function pluralizeCamel(model: string): string;
|
|
96
|
+
/** Target del federated include per un alias semantico (key ≠ nome model). */
|
|
97
|
+
export type FederationAlias = string | {
|
|
98
|
+
model: string;
|
|
99
|
+
fk?: string;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Alias map GLOBALE key → model target. Dichiarata UNA volta (gateway), risolve
|
|
103
|
+
* automaticamente le chiavi semantiche il cui nome non combacia col model:
|
|
104
|
+
* { customer: 'Juridical', submitter: 'JuridicalIndividual' } (fk default '<key>Id')
|
|
105
|
+
* { owner: { model: 'JuridicalIndividual', fk: 'ownerJiId' } }
|
|
106
|
+
*/
|
|
107
|
+
export type AliasMap = Record<string, FederationAlias>;
|
|
108
|
+
/**
|
|
109
|
+
* Elemento di `alwaysInclude`: una chiave (string) oppure una chiave con shape
|
|
110
|
+
* annidata da inoltrare al target — es. `{ key: 'juridicalIndividual',
|
|
111
|
+
* include: { individual: true } }` per ripristinare un nested che i vecchi
|
|
112
|
+
* populate settavano sempre.
|
|
113
|
+
*/
|
|
114
|
+
export type AlwaysIncludeItem = string | {
|
|
115
|
+
key: string;
|
|
116
|
+
include?: Record<string, unknown>;
|
|
117
|
+
select?: Record<string, unknown>;
|
|
118
|
+
};
|
|
88
119
|
/**
|
|
89
120
|
* Split a client include tree into the locally-resolvable part and the remote
|
|
90
121
|
* (federated) plans, using convention-driven discovery over the index.
|
|
91
122
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
123
|
+
* Risoluzione per chiave (in ordine): relazione locale reale → override esplicito
|
|
124
|
+
* → link del manifest (`local.links`, co-locato col model) → aliasMap globale →
|
|
125
|
+
* convenzione (`<key>Id` scalare + model `UpperFirst(key)`).
|
|
126
|
+
* Owner del model target: il servizio del cmd se lo possiede (soft-FK same-service),
|
|
127
|
+
* altrimenti l'unico owner esterno; più owner → serve override/alias. Chiavi non
|
|
128
|
+
* federabili restano nel localInclude → il motore locale emette il suo errore
|
|
129
|
+
* standard (la federazione NON lo inghiotte).
|
|
99
130
|
*
|
|
100
|
-
* `alwaysInclude`
|
|
101
|
-
*
|
|
131
|
+
* `alwaysInclude` = chiavi federate da risolvere anche se il client non le chiede
|
|
132
|
+
* (retro-compat con i gateway che arricchivano sempre); supporta shape annidata.
|
|
102
133
|
*/
|
|
103
134
|
export declare function planFederatedIncludes(opts: {
|
|
104
135
|
index: FederationIndex;
|
|
@@ -107,8 +138,10 @@ export declare function planFederatedIncludes(opts: {
|
|
|
107
138
|
/** Local DMMF PascalCase model returned by the cmd. */
|
|
108
139
|
model: string;
|
|
109
140
|
include?: Record<string, unknown>;
|
|
110
|
-
alwaysInclude?: readonly
|
|
111
|
-
/**
|
|
141
|
+
alwaysInclude?: readonly AlwaysIncludeItem[];
|
|
142
|
+
/** Alias semantici globali (key → model target). */
|
|
143
|
+
aliasMap?: AliasMap;
|
|
144
|
+
/** Per-key explicit targets for ambiguous/unconventional cases (vince su aliasMap). */
|
|
112
145
|
overrides?: Record<string, {
|
|
113
146
|
service: string;
|
|
114
147
|
model?: string;
|
package/dist/federation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../src/federation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,yDAAyD;IACzD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../src/federation.ts"],"names":[],"mappings":"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"}
|
package/dist/federation.js
CHANGED
|
@@ -87,19 +87,19 @@ function pluralizeCamel(model) {
|
|
|
87
87
|
* Split a client include tree into the locally-resolvable part and the remote
|
|
88
88
|
* (federated) plans, using convention-driven discovery over the index.
|
|
89
89
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
90
|
+
* Risoluzione per chiave (in ordine): relazione locale reale → override esplicito
|
|
91
|
+
* → link del manifest (`local.links`, co-locato col model) → aliasMap globale →
|
|
92
|
+
* convenzione (`<key>Id` scalare + model `UpperFirst(key)`).
|
|
93
|
+
* Owner del model target: il servizio del cmd se lo possiede (soft-FK same-service),
|
|
94
|
+
* altrimenti l'unico owner esterno; più owner → serve override/alias. Chiavi non
|
|
95
|
+
* federabili restano nel localInclude → il motore locale emette il suo errore
|
|
96
|
+
* standard (la federazione NON lo inghiotte).
|
|
97
97
|
*
|
|
98
|
-
* `alwaysInclude`
|
|
99
|
-
*
|
|
98
|
+
* `alwaysInclude` = chiavi federate da risolvere anche se il client non le chiede
|
|
99
|
+
* (retro-compat con i gateway che arricchivano sempre); supporta shape annidata.
|
|
100
100
|
*/
|
|
101
101
|
function planFederatedIncludes(opts) {
|
|
102
|
-
const { index, service, model, include, alwaysInclude, overrides } = opts;
|
|
102
|
+
const { index, service, model, include, alwaysInclude, aliasMap, overrides } = opts;
|
|
103
103
|
const local = index.modelOf(service, model);
|
|
104
104
|
if (!local) {
|
|
105
105
|
throw new FederationPlanError(`Federation: model '${model}' is not in the datamodel of service '${service}' — check the federation configuration`, model);
|
|
@@ -107,7 +107,13 @@ function planFederatedIncludes(opts) {
|
|
|
107
107
|
const localInclude = {};
|
|
108
108
|
const remote = [];
|
|
109
109
|
const planned = new Set();
|
|
110
|
-
const
|
|
110
|
+
const norm = (a) => a == null ? undefined : typeof a === "string" ? { model: a } : a;
|
|
111
|
+
const aliasOf = (key) => norm(aliasMap?.[key]);
|
|
112
|
+
// Manifest-declared link (co-located with the model) — più specifico dell'aliasMap globale.
|
|
113
|
+
const linkOf = (key) => norm(local.links?.[key]);
|
|
114
|
+
// explicitNested: shape annidata forzata (da alwaysInclude object) che ha
|
|
115
|
+
// precedenza sul nested ricavato dal value del client.
|
|
116
|
+
const planKey = (key, value, demanded, explicitNested) => {
|
|
111
117
|
if (planned.has(key))
|
|
112
118
|
return;
|
|
113
119
|
planned.add(key);
|
|
@@ -116,10 +122,12 @@ function planFederatedIncludes(opts) {
|
|
|
116
122
|
localInclude[key] = value;
|
|
117
123
|
return;
|
|
118
124
|
}
|
|
119
|
-
// 2)
|
|
125
|
+
// 2) Override esplicito > link del manifest (per-model) > aliasMap globale > convenzione.
|
|
120
126
|
const override = overrides?.[key];
|
|
121
|
-
const
|
|
122
|
-
const
|
|
127
|
+
const link = linkOf(key);
|
|
128
|
+
const alias = aliasOf(key);
|
|
129
|
+
const fk = override?.fk ?? link?.fk ?? alias?.fk ?? `${key}Id`;
|
|
130
|
+
const targetModel = override?.model ?? link?.model ?? alias?.model ?? upperFirst(key);
|
|
123
131
|
if (local.scalars.includes(fk)) {
|
|
124
132
|
let targetService = override?.service;
|
|
125
133
|
if (!targetService) {
|
|
@@ -132,17 +140,21 @@ function planFederatedIncludes(opts) {
|
|
|
132
140
|
}
|
|
133
141
|
else if (owners.length > 1) {
|
|
134
142
|
throw new FederationPlanError(`Federation: include '${key}' on ${service}.${model} is ambiguous — model '${targetModel}' is owned by ` +
|
|
135
|
-
`[${owners.map((o) => o.service).join(", ")}]. Add an override for '${key}'.`, key);
|
|
143
|
+
`[${owners.map((o) => o.service).join(", ")}]. Add an override/alias for '${key}'.`, key);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
if (targetService) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
?
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
147
|
+
let nested = explicitNested;
|
|
148
|
+
if (!nested) {
|
|
149
|
+
const src = value && typeof value === "object" ? value : undefined;
|
|
150
|
+
nested =
|
|
151
|
+
src && (src.include || src.select)
|
|
152
|
+
? {
|
|
153
|
+
include: src.include,
|
|
154
|
+
select: src.select,
|
|
155
|
+
}
|
|
156
|
+
: undefined;
|
|
157
|
+
}
|
|
146
158
|
remote.push({ key, fk, targetService, targetModel, nested });
|
|
147
159
|
return;
|
|
148
160
|
}
|
|
@@ -151,17 +163,25 @@ function planFederatedIncludes(opts) {
|
|
|
151
163
|
// keys fall through to the local engine for its standard validation error.
|
|
152
164
|
if (demanded) {
|
|
153
165
|
throw new FederationPlanError(`Federation: alwaysInclude '${key}' on ${service}.${model} matches no local relation, ` +
|
|
154
|
-
`no scalar FK '${fk}', or no known model '${targetModel}'`, key);
|
|
166
|
+
`no scalar FK '${fk}', no alias, or no known model '${targetModel}'`, key);
|
|
155
167
|
}
|
|
156
168
|
localInclude[key] = value;
|
|
157
169
|
};
|
|
158
170
|
for (const [key, value] of Object.entries(include ?? {})) {
|
|
159
|
-
|
|
160
|
-
|
|
171
|
+
// include disattivato dal client: marcalo come gestito così alwaysInclude NON
|
|
172
|
+
// lo resuscita (rispetta la volontà esplicita del client di escluderlo).
|
|
173
|
+
if (value === false || value == null) {
|
|
174
|
+
planned.add(key);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
161
177
|
planKey(key, value, false);
|
|
162
178
|
}
|
|
163
|
-
for (const
|
|
164
|
-
|
|
179
|
+
for (const item of alwaysInclude ?? []) {
|
|
180
|
+
if (typeof item === "string")
|
|
181
|
+
planKey(item, true, true);
|
|
182
|
+
else
|
|
183
|
+
planKey(item.key, true, true, { include: item.include, select: item.select });
|
|
184
|
+
}
|
|
165
185
|
return {
|
|
166
186
|
localInclude: Object.keys(localInclude).length ? localInclude : undefined,
|
|
167
187
|
remote,
|
|
@@ -187,9 +207,14 @@ function collectForeignIds(rows, fk) {
|
|
|
187
207
|
*/
|
|
188
208
|
function mergeFederatedRows(rows, plan, targetRows) {
|
|
189
209
|
const byId = new Map();
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
210
|
+
// keep-first: un owner che ritorna id duplicati (chunk sovrapposti/bug) è deterministico.
|
|
211
|
+
for (const t of targetRows) {
|
|
212
|
+
if (t?.id == null)
|
|
213
|
+
continue;
|
|
214
|
+
const k = String(t.id);
|
|
215
|
+
if (!byId.has(k))
|
|
216
|
+
byId.set(k, t);
|
|
217
|
+
}
|
|
193
218
|
for (const row of rows) {
|
|
194
219
|
if (!row || typeof row !== "object")
|
|
195
220
|
continue;
|
package/dist/federation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../src/federation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../src/federation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAmCH,4CAYC;AAaD,oDAoBC;AAsCD,wCAKC;AAsCD,sDAuHC;AAOD,8CAOC;AAOD,gDAiBC;AA5RD,oEAAoE;AACpE,SAAgB,gBAAgB,CAC9B,OAAe,EACf,SAAqG;IAErG,OAAO;QACL,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAaD,SAAgB,oBAAoB,CAClC,QAA0C;IAE1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4C,CAAC;IACtE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;QACtD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;QAC7C,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;KAChE,CAAC;AACJ,CAAC;AAwBD,MAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe,EAAW,GAAW;QAC/C,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,QAAG,GAAH,GAAG,CAAQ;QAE/C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzE;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAC/D,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,IAAI,CAAC;IACrD,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC;AAuBD;;;;;;;;;;;;;;GAcG;AACH,SAAgB,qBAAqB,CAAC,IAYrC;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACpF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,mBAAmB,CAC3B,sBAAsB,KAAK,yCAAyC,OAAO,wCAAwC,EACnH,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,MAAM,IAAI,GAAG,CAAC,CAA8B,EAA8C,EAAE,CAC1F,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,4FAA4F;IAC5F,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzD,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM,OAAO,GAAG,CACd,GAAW,EACX,KAAc,EACd,QAAiB,EACjB,cAAwF,EAClF,EAAE;QACR,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjB,yDAAyD;QACzD,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC;QAC/D,MAAM,WAAW,GAAG,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,aAAa,GAAG,QAAQ,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,CAAC;oBAC9C,aAAa,GAAG,OAAO,CAAC,CAAC,wCAAwC;gBACnE,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACpC,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,mBAAmB,CAC3B,wBAAwB,GAAG,QAAQ,OAAO,IAAI,KAAK,0BAA0B,WAAW,gBAAgB;wBACtG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,GAAG,IAAI,EACrF,GAAG,CACJ,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,MAAM,GAAG,cAAc,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,GACP,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACtF,MAAM;wBACJ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC;4BAChC,CAAC,CAAC;gCACE,OAAO,EAAE,GAAG,CAAC,OAA8C;gCAC3D,MAAM,EAAE,GAAG,CAAC,MAA6C;6BAC1D;4BACH,CAAC,CAAC,SAAS,CAAC;gBAClB,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,8EAA8E;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,mBAAmB,CAC3B,8BAA8B,GAAG,QAAQ,OAAO,IAAI,KAAK,8BAA8B;gBACrF,iBAAiB,EAAE,mCAAmC,WAAW,GAAG,EACtE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,8EAA8E;QAC9E,yEAAyE;QACzE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;YACnD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACzE,MAAM;KACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,gFAAgF;AAChF,SAAgB,iBAAiB,CAAC,IAAoB,EAAE,EAAU;IAChE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,IAAoB,EACpB,IAA8C,EAC9C,UAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,0FAA0F;IAC1F,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI;YAAE,SAAS;QAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ export * from "./parsed";
|
|
|
3
3
|
export * from "./schema";
|
|
4
4
|
export * from "./errors";
|
|
5
5
|
export { parseQuery } from "./parser";
|
|
6
|
+
export { buildGenQueryPolicy, DEFAULT_SECRET_FIELDS, type BuildGenQueryPolicyOptions, type PolicyManifestLike, } from "./entity-policy-builder";
|
|
6
7
|
export { GenQueryEngine, type GenQueryEngineOptions } from "./engine";
|
|
7
8
|
export type { Adapter } from "./adapters/base";
|
|
8
9
|
export { parseDateTime } from "./datetime";
|
|
9
|
-
export { toFederatedShape, buildFederationIndex, planFederatedIncludes, collectForeignIds, mergeFederatedRows, pluralizeCamel, FederationPlanError, type FederatedModelShape, type FederatedServiceShape, type FederationIndex, type FederatedIncludePlan, type FederationPlan, } from "./federation";
|
|
10
|
+
export { toFederatedShape, buildFederationIndex, planFederatedIncludes, collectForeignIds, mergeFederatedRows, pluralizeCamel, FederationPlanError, type FederatedModelShape, type FederatedServiceShape, type FederationIndex, type FederatedIncludePlan, type FederationPlan, type FederationAlias, type AliasMap, type AlwaysIncludeItem, } from "./federation";
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,13 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.FederationPlanError = exports.pluralizeCamel = exports.mergeFederatedRows = exports.collectForeignIds = exports.planFederatedIncludes = exports.buildFederationIndex = exports.toFederatedShape = exports.parseDateTime = exports.GenQueryEngine = exports.parseQuery = void 0;
|
|
17
|
+
exports.FederationPlanError = exports.pluralizeCamel = exports.mergeFederatedRows = exports.collectForeignIds = exports.planFederatedIncludes = exports.buildFederationIndex = exports.toFederatedShape = exports.parseDateTime = exports.GenQueryEngine = exports.DEFAULT_SECRET_FIELDS = exports.buildGenQueryPolicy = exports.parseQuery = void 0;
|
|
18
18
|
__exportStar(require("./types"), exports);
|
|
19
19
|
__exportStar(require("./parsed"), exports);
|
|
20
20
|
__exportStar(require("./schema"), exports);
|
|
21
21
|
__exportStar(require("./errors"), exports);
|
|
22
22
|
var parser_1 = require("./parser");
|
|
23
23
|
Object.defineProperty(exports, "parseQuery", { enumerable: true, get: function () { return parser_1.parseQuery; } });
|
|
24
|
+
var entity_policy_builder_1 = require("./entity-policy-builder");
|
|
25
|
+
Object.defineProperty(exports, "buildGenQueryPolicy", { enumerable: true, get: function () { return entity_policy_builder_1.buildGenQueryPolicy; } });
|
|
26
|
+
Object.defineProperty(exports, "DEFAULT_SECRET_FIELDS", { enumerable: true, get: function () { return entity_policy_builder_1.DEFAULT_SECRET_FIELDS; } });
|
|
24
27
|
var engine_1 = require("./engine");
|
|
25
28
|
Object.defineProperty(exports, "GenQueryEngine", { enumerable: true, get: function () { return engine_1.GenQueryEngine; } });
|
|
26
29
|
var datetime_1 = require("./datetime");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,mCAAsE;AAA7D,wGAAA,cAAc,OAAA;AAEvB,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AACtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,iEAKiC;AAJ/B,4HAAA,mBAAmB,OAAA;AACnB,8HAAA,qBAAqB,OAAA;AAIvB,mCAAsE;AAA7D,wGAAA,cAAc,OAAA;AAEvB,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AACtB,2CAgBsB;AAfpB,8GAAA,gBAAgB,OAAA;AAChB,kHAAA,oBAAoB,OAAA;AACpB,mHAAA,qBAAqB,OAAA;AACrB,+GAAA,iBAAiB,OAAA;AACjB,gHAAA,kBAAkB,OAAA;AAClB,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-policy-builder.test.d.ts","sourceRoot":"","sources":["../../src/tests/entity-policy-builder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const entity_policy_builder_1 = require("../entity-policy-builder");
|
|
9
|
+
const datamodel = {
|
|
10
|
+
models: [
|
|
11
|
+
{
|
|
12
|
+
name: "User",
|
|
13
|
+
fields: [
|
|
14
|
+
{ name: "id", kind: "scalar" },
|
|
15
|
+
{ name: "username", kind: "scalar" },
|
|
16
|
+
{ name: "password", kind: "scalar" },
|
|
17
|
+
{ name: "tokenHash", kind: "scalar" },
|
|
18
|
+
{ name: "individual", kind: "object" },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "Media",
|
|
23
|
+
fields: [
|
|
24
|
+
{ name: "id", kind: "scalar" },
|
|
25
|
+
{ name: "hash", kind: "scalar" },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
(0, node_test_1.default)("buildGenQueryPolicy esclude i SECRET_FIELDS da filter/sort/select", () => {
|
|
31
|
+
const policy = (0, entity_policy_builder_1.buildGenQueryPolicy)({ datamodel });
|
|
32
|
+
const u = policy.User;
|
|
33
|
+
strict_1.default.deepEqual(u.filterable, ["id", "username"]); // password/tokenHash esclusi
|
|
34
|
+
strict_1.default.deepEqual(u.selectable, ["id", "username"]);
|
|
35
|
+
strict_1.default.deepEqual(u.sortable, ["id", "username"]);
|
|
36
|
+
strict_1.default.deepEqual(u.includable, ["individual"]);
|
|
37
|
+
strict_1.default.ok(!u.selectable.includes("password"));
|
|
38
|
+
strict_1.default.ok(!u.selectable.includes("tokenHash"));
|
|
39
|
+
});
|
|
40
|
+
(0, node_test_1.default)("hash NON è segreto di default (resta queryable)", () => {
|
|
41
|
+
strict_1.default.ok(!entity_policy_builder_1.DEFAULT_SECRET_FIELDS.has("hash"));
|
|
42
|
+
const policy = (0, entity_policy_builder_1.buildGenQueryPolicy)({ datamodel });
|
|
43
|
+
strict_1.default.deepEqual(policy.Media.filterable, ["id", "hash"]);
|
|
44
|
+
});
|
|
45
|
+
(0, node_test_1.default)("maxPerPage dal manifest, fallback al default", () => {
|
|
46
|
+
const policy = (0, entity_policy_builder_1.buildGenQueryPolicy)({
|
|
47
|
+
datamodel,
|
|
48
|
+
manifests: [{ prismaModel: "user", autoquery: { pagination: { max: 50 } } }],
|
|
49
|
+
defaultMaxPerPage: 200,
|
|
50
|
+
});
|
|
51
|
+
strict_1.default.equal(policy.User.maxPerPage, 50); // dal manifest (user → User)
|
|
52
|
+
strict_1.default.equal(policy.Media.maxPerPage, 200); // fallback
|
|
53
|
+
});
|
|
54
|
+
(0, node_test_1.default)("deny per-modello + extraSecretFields", () => {
|
|
55
|
+
const policy = (0, entity_policy_builder_1.buildGenQueryPolicy)({
|
|
56
|
+
datamodel,
|
|
57
|
+
deny: { User: { fields: ["username"], relations: ["individual"] } },
|
|
58
|
+
extraSecretFields: ["id"],
|
|
59
|
+
});
|
|
60
|
+
strict_1.default.deepEqual(policy.User.filterable, []); // id(extra-secret)+username(deny) tolti
|
|
61
|
+
strict_1.default.deepEqual(policy.User.includable, []); // individual in deny.relations
|
|
62
|
+
});
|
|
63
|
+
(0, node_test_1.default)("accetta datamodel come array nudo di models", () => {
|
|
64
|
+
const policy = (0, entity_policy_builder_1.buildGenQueryPolicy)({ datamodel: datamodel.models });
|
|
65
|
+
strict_1.default.ok(policy.User);
|
|
66
|
+
strict_1.default.deepEqual(policy.Media.filterable, ["id", "hash"]);
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=entity-policy-builder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-policy-builder.test.js","sourceRoot":"","sources":["../../src/tests/entity-policy-builder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -169,4 +169,117 @@ const index = (0, federation_1.buildFederationIndex)([hr, id, atlas]);
|
|
|
169
169
|
node_assert_1.strict.equal((0, federation_1.pluralizeCamel)("Address"), "addresses");
|
|
170
170
|
node_assert_1.strict.equal((0, federation_1.pluralizeCamel)("Structure"), "structures");
|
|
171
171
|
});
|
|
172
|
+
// ── aliasMap / alwaysInclude annidato / include:false / keep-first ──────────
|
|
173
|
+
(0, node_test_1.test)("aliasMap risolve chiavi semantiche (key ≠ model) senza override", () => {
|
|
174
|
+
const certet = (0, federation_1.toFederatedShape)("skillCertet", {
|
|
175
|
+
models: [{ name: "EmployeePlanning", fields: [
|
|
176
|
+
{ name: "id", kind: "scalar" },
|
|
177
|
+
{ name: "customerId", kind: "scalar" },
|
|
178
|
+
{ name: "submitterId", kind: "scalar" },
|
|
179
|
+
] }],
|
|
180
|
+
});
|
|
181
|
+
const idx = (0, federation_1.buildFederationIndex)([certet, id]);
|
|
182
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
183
|
+
index: idx, service: "skillCertet", model: "EmployeePlanning",
|
|
184
|
+
include: { customer: true, submitter: true },
|
|
185
|
+
aliasMap: { customer: "Juridical", submitter: "JuridicalIndividual" },
|
|
186
|
+
});
|
|
187
|
+
const byKey = Object.fromEntries(plan.remote.map((r) => [r.key, r]));
|
|
188
|
+
node_assert_1.strict.equal(byKey.customer.targetModel, "Juridical");
|
|
189
|
+
node_assert_1.strict.equal(byKey.customer.fk, "customerId");
|
|
190
|
+
node_assert_1.strict.equal(byKey.submitter.targetModel, "JuridicalIndividual");
|
|
191
|
+
node_assert_1.strict.equal(byKey.submitter.fk, "submitterId");
|
|
192
|
+
});
|
|
193
|
+
(0, node_test_1.test)("aliasMap con fk esplicito + override vince su aliasMap", () => {
|
|
194
|
+
const svc = (0, federation_1.toFederatedShape)("skillX", { models: [{ name: "Doc", fields: [
|
|
195
|
+
{ name: "id", kind: "scalar" }, { name: "ownerJiId", kind: "scalar" },
|
|
196
|
+
] }] });
|
|
197
|
+
const idx = (0, federation_1.buildFederationIndex)([svc, id]);
|
|
198
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
199
|
+
index: idx, service: "skillX", model: "Doc",
|
|
200
|
+
include: { owner: true },
|
|
201
|
+
aliasMap: { owner: { model: "JuridicalIndividual", fk: "ownerJiId" } },
|
|
202
|
+
});
|
|
203
|
+
node_assert_1.strict.equal(plan.remote[0].fk, "ownerJiId");
|
|
204
|
+
node_assert_1.strict.equal(plan.remote[0].targetModel, "JuridicalIndividual");
|
|
205
|
+
});
|
|
206
|
+
(0, node_test_1.test)("manifest links risolve chiavi semantiche senza aliasMap globale", () => {
|
|
207
|
+
// links co-locati col model (harvestati dal resource manifest) — niente aliasMap.
|
|
208
|
+
const certet = {
|
|
209
|
+
service: "skillCertet",
|
|
210
|
+
models: [{
|
|
211
|
+
name: "EmployeePlanning",
|
|
212
|
+
relations: [],
|
|
213
|
+
scalars: ["id", "customerId", "submitterId"],
|
|
214
|
+
links: { customer: "Juridical", submitter: { model: "JuridicalIndividual" } },
|
|
215
|
+
}],
|
|
216
|
+
};
|
|
217
|
+
const idx = (0, federation_1.buildFederationIndex)([certet, id]);
|
|
218
|
+
// aliasMap globale in CONFLITTO col link → il link (co-locato) deve vincere.
|
|
219
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
220
|
+
index: idx, service: "skillCertet", model: "EmployeePlanning",
|
|
221
|
+
include: { customer: true, submitter: true },
|
|
222
|
+
aliasMap: { customer: "City" },
|
|
223
|
+
});
|
|
224
|
+
const byKey = Object.fromEntries(plan.remote.map((r) => [r.key, r]));
|
|
225
|
+
node_assert_1.strict.equal(byKey.customer.targetModel, "Juridical"); // link batte aliasMap (City)
|
|
226
|
+
node_assert_1.strict.equal(byKey.customer.fk, "customerId");
|
|
227
|
+
node_assert_1.strict.equal(byKey.submitter.targetModel, "JuridicalIndividual");
|
|
228
|
+
node_assert_1.strict.equal(byKey.submitter.fk, "submitterId");
|
|
229
|
+
});
|
|
230
|
+
(0, node_test_1.test)("override vince sul link del manifest, il link vince sull'aliasMap globale", () => {
|
|
231
|
+
const svc = {
|
|
232
|
+
service: "skillCertet",
|
|
233
|
+
models: [{
|
|
234
|
+
name: "Doc",
|
|
235
|
+
relations: [],
|
|
236
|
+
scalars: ["id", "customerId", "ownerJiId"],
|
|
237
|
+
links: { customer: "Juridical" },
|
|
238
|
+
}],
|
|
239
|
+
};
|
|
240
|
+
const idx = (0, federation_1.buildFederationIndex)([svc, id]);
|
|
241
|
+
// link (Juridical) batte aliasMap (City); override batte tutto.
|
|
242
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
243
|
+
index: idx, service: "skillCertet", model: "Doc",
|
|
244
|
+
include: { customer: true, owner: true },
|
|
245
|
+
aliasMap: { customer: "City", owner: { model: "JuridicalIndividual", fk: "ownerJiId" } },
|
|
246
|
+
overrides: { customer: { service: "skillID", model: "JuridicalIndividual", fk: "ownerJiId" } },
|
|
247
|
+
});
|
|
248
|
+
const byKey = Object.fromEntries(plan.remote.map((r) => [r.key, r]));
|
|
249
|
+
node_assert_1.strict.equal(byKey.customer.targetModel, "JuridicalIndividual"); // override
|
|
250
|
+
node_assert_1.strict.equal(byKey.customer.fk, "ownerJiId");
|
|
251
|
+
node_assert_1.strict.equal(byKey.owner.targetModel, "JuridicalIndividual"); // aliasMap (nessun link 'owner')
|
|
252
|
+
});
|
|
253
|
+
(0, node_test_1.test)("alwaysInclude annidato inoltra include al target (ripristina nested individual)", () => {
|
|
254
|
+
const hr = (0, federation_1.toFederatedShape)("skillHr", { models: [{ name: "Tempbadge", fields: [
|
|
255
|
+
{ name: "id", kind: "scalar" }, { name: "juridicalIndividualId", kind: "scalar" },
|
|
256
|
+
] }] });
|
|
257
|
+
const idx = (0, federation_1.buildFederationIndex)([hr, id]);
|
|
258
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
259
|
+
index: idx, service: "skillHr", model: "Tempbadge",
|
|
260
|
+
alwaysInclude: [{ key: "juridicalIndividual", include: { individual: true } }],
|
|
261
|
+
});
|
|
262
|
+
node_assert_1.strict.equal(plan.remote.length, 1);
|
|
263
|
+
node_assert_1.strict.deepEqual(plan.remote[0].nested, { include: { individual: true }, select: undefined });
|
|
264
|
+
});
|
|
265
|
+
(0, node_test_1.test)("include:false NON viene resuscitato da alwaysInclude", () => {
|
|
266
|
+
const hr = (0, federation_1.toFederatedShape)("skillHr", { models: [{ name: "Tempbadge", fields: [
|
|
267
|
+
{ name: "id", kind: "scalar" }, { name: "juridicalIndividualId", kind: "scalar" },
|
|
268
|
+
] }] });
|
|
269
|
+
const idx = (0, federation_1.buildFederationIndex)([hr, id]);
|
|
270
|
+
const plan = (0, federation_1.planFederatedIncludes)({
|
|
271
|
+
index: idx, service: "skillHr", model: "Tempbadge",
|
|
272
|
+
include: { juridicalIndividual: false },
|
|
273
|
+
alwaysInclude: ["juridicalIndividual"],
|
|
274
|
+
});
|
|
275
|
+
node_assert_1.strict.equal(plan.remote.length, 0);
|
|
276
|
+
node_assert_1.strict.equal(plan.localInclude, undefined);
|
|
277
|
+
});
|
|
278
|
+
(0, node_test_1.test)("mergeFederatedRows keep-first su id duplicati del target", () => {
|
|
279
|
+
const rows = [{ id: "a", jiId: "x" }];
|
|
280
|
+
(0, federation_1.mergeFederatedRows)(rows, { key: "ji", fk: "jiId" }, [
|
|
281
|
+
{ id: "x", v: 1 }, { id: "x", v: 2 },
|
|
282
|
+
]);
|
|
283
|
+
node_assert_1.strict.equal(rows[0].ji.v, 1);
|
|
284
|
+
});
|
|
172
285
|
//# sourceMappingURL=federation.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation.test.js","sourceRoot":"","sources":["../../src/tests/federation.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"federation.test.js","sourceRoot":"","sources":["../../src/tests/federation.test.ts"],"names":[],"mappings":"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"}
|