Comparing version 0.18.0-alpha.6 to 0.18.0-alpha.7
@@ -0,0 +0,0 @@ "use strict"; |
@@ -254,3 +254,5 @@ "use strict"; | ||
function generateReturnCardinality(name, params, returnTypemod, hasNamedParams, anytypes, preservesOptionality = false) { | ||
if (returnTypemod === "SetOfType" && name !== "std::if_else") { | ||
if (returnTypemod === "SetOfType" && | ||
name !== "std::if_else" && | ||
name !== "std::assert_exists") { | ||
return `$.Cardinality.Many`; | ||
@@ -281,2 +283,5 @@ } | ||
} | ||
if (name === "std::assert_exists") { | ||
return `$.cardinalityUtil.overrideLowerBound<${cardinalities[0].genTypeName}["__cardinality__"], "One">`; | ||
} | ||
const paramCardinalities = cardinalities.map(param => { | ||
@@ -283,0 +288,0 @@ if (param.typemod === "SetOfType") { |
@@ -99,3 +99,3 @@ "use strict"; | ||
const ptrToLine = ptr => { | ||
var _a, _b; | ||
var _a, _b, _c; | ||
const card = `$.Cardinality.${ptr.real_cardinality}`; | ||
@@ -114,3 +114,4 @@ const target = types.get(ptr.target_id); | ||
writable: (_a = ptr.is_writable) !== null && _a !== void 0 ? _a : false, | ||
lines: ((_b = ptr.pointers) !== null && _b !== void 0 ? _b : []) | ||
hasDefault: (_b = ptr.has_default) !== null && _b !== void 0 ? _b : false, | ||
lines: ((_c = ptr.pointers) !== null && _c !== void 0 ? _c : []) | ||
.filter(p => p.name !== "@target" && p.name !== "@source") | ||
@@ -139,3 +140,3 @@ .map(ptrToLine), | ||
body.writeln([ | ||
(0, builders_1.t) `${(0, genutil_1.quote)(line.key)}: $.LinkDesc<${line.staticType}, ${line.card}, {}, ${line.isExclusive.toString()}, ${line.writable.toString()}>;`, | ||
(0, builders_1.t) `${(0, genutil_1.quote)(line.key)}: $.LinkDesc<${line.staticType}, ${line.card}, {}, ${line.isExclusive.toString()}, ${line.writable.toString()}, ${line.hasDefault.toString()}>;`, | ||
]); | ||
@@ -155,3 +156,3 @@ } | ||
body.writeln([ | ||
(0, builders_1.t) `}, ${line.isExclusive.toString()}, ${line.writable.toString()}>;`, | ||
(0, builders_1.t) `}, ${line.isExclusive.toString()}, ${line.writable.toString()}, ${line.hasDefault.toString()}>;`, | ||
]); | ||
@@ -162,3 +163,3 @@ } | ||
body.writeln([ | ||
(0, builders_1.t) `${(0, genutil_1.quote)(line.key)}: $.PropertyDesc<${line.staticType}, ${line.card}, ${line.isExclusive.toString()}, ${line.writable.toString()}>;`, | ||
(0, builders_1.t) `${(0, genutil_1.quote)(line.key)}: $.PropertyDesc<${line.staticType}, ${line.card}, ${line.isExclusive.toString()}, ${line.writable.toString()}, ${line.hasDefault.toString()}>;`, | ||
]); | ||
@@ -165,0 +166,0 @@ } |
@@ -12,2 +12,3 @@ import { Executor } from "../../ifaces"; | ||
is_writable: boolean; | ||
has_default: boolean; | ||
pointers: ReadonlyArray<Pointer> | null; | ||
@@ -14,0 +15,0 @@ }; |
@@ -83,2 +83,3 @@ "use strict"; | ||
is_writable := len(.computed_fields) = 0 AND .readonly = false, | ||
has_default := EXISTS .default, | ||
[IS Link].pointers: { | ||
@@ -85,0 +86,0 @@ real_cardinality := ("One" IF .required ELSE "AtMostOne") IF <str>.cardinality = "One" ELSE ("AtLeastOne" IF .required ELSE "Many"), |
@@ -96,3 +96,3 @@ import type { Executor } from "../ifaces"; | ||
export declare type PropertyTypes = ScalarType | EnumType | ArrayType | TupleType | NamedTupleType; | ||
export interface PropertyDesc<Type extends BaseType = BaseType, Card extends Cardinality = Cardinality, Exclusive extends boolean = boolean, Writable extends boolean = boolean> { | ||
export interface PropertyDesc<Type extends BaseType = BaseType, Card extends Cardinality = Cardinality, Exclusive extends boolean = boolean, Writable extends boolean = boolean, HasDefault extends boolean = boolean> { | ||
__kind__: "property"; | ||
@@ -103,2 +103,3 @@ target: Type; | ||
writable: Writable; | ||
hasDefault: HasDefault; | ||
} | ||
@@ -109,3 +110,3 @@ export declare type $scopify<Type extends ObjectType> = $expr_PathNode<TypeSet<Type, Cardinality.One>, null, true>; | ||
}; | ||
export interface LinkDesc<Type extends ObjectType = any, Card extends Cardinality = Cardinality, LinkProps extends PropertyShape = any, Exclusive extends boolean = boolean, Writable extends boolean = boolean> { | ||
export interface LinkDesc<Type extends ObjectType = any, Card extends Cardinality = Cardinality, LinkProps extends PropertyShape = any, Exclusive extends boolean = boolean, Writable extends boolean = boolean, HasDefault extends boolean = boolean> { | ||
__kind__: "link"; | ||
@@ -117,2 +118,3 @@ target: Type; | ||
writable: Writable; | ||
hasDefault: HasDefault; | ||
} | ||
@@ -119,0 +121,0 @@ export declare type ObjectTypePointers = { |
@@ -0,0 +0,0 @@ import { |
@@ -106,12 +106,19 @@ "use strict"; | ||
} | ||
let cardinality = funcDef.returnTypemod === "SetOfType" | ||
? reflection_1.Cardinality.Many | ||
: reflection_1.cardinalityUtil.multiplyCardinalitiesVariadic(paramCardinalities); | ||
if (funcDef.returnTypemod === "OptionalType" && | ||
!funcDef.preservesOptionality) { | ||
cardinality = reflection_1.cardinalityUtil.overrideLowerBound(cardinality, "Zero"); | ||
} | ||
let cardinality; | ||
if (funcName === "if_else") { | ||
cardinality = reflection_1.cardinalityUtil.multiplyCardinalities(reflection_1.cardinalityUtil.orCardinalities(positionalArgs[0].__cardinality__, positionalArgs[2].__cardinality__), positionalArgs[1].__cardinality__); | ||
} | ||
else if (funcName === "std::assert_exists") { | ||
cardinality = reflection_1.cardinalityUtil.overrideLowerBound(positionalArgs[0].__cardinality__, "One"); | ||
} | ||
else { | ||
cardinality = | ||
funcDef.returnTypemod === "SetOfType" | ||
? reflection_1.Cardinality.Many | ||
: reflection_1.cardinalityUtil.multiplyCardinalitiesVariadic(paramCardinalities); | ||
if (funcDef.returnTypemod === "OptionalType" && | ||
!funcDef.preservesOptionality) { | ||
cardinality = reflection_1.cardinalityUtil.overrideLowerBound(cardinality, "Zero"); | ||
} | ||
} | ||
return { | ||
@@ -118,0 +125,0 @@ kind: funcDef.kind, |
@@ -196,14 +196,3 @@ import { | ||
let cardinality = | ||
funcDef.returnTypemod === "SetOfType" | ||
? Cardinality.Many | ||
: cardinalityUtil.multiplyCardinalitiesVariadic(paramCardinalities); | ||
if ( | ||
funcDef.returnTypemod === "OptionalType" && | ||
!funcDef.preservesOptionality | ||
) { | ||
cardinality = cardinalityUtil.overrideLowerBound(cardinality, "Zero"); | ||
} | ||
let cardinality: Cardinality; | ||
if (funcName === "if_else") { | ||
@@ -217,2 +206,19 @@ cardinality = cardinalityUtil.multiplyCardinalities( | ||
); | ||
} else if (funcName === "std::assert_exists") { | ||
cardinality = cardinalityUtil.overrideLowerBound( | ||
positionalArgs[0].__cardinality__, | ||
"One" | ||
); | ||
} else { | ||
cardinality = | ||
funcDef.returnTypemod === "SetOfType" | ||
? Cardinality.Many | ||
: cardinalityUtil.multiplyCardinalitiesVariadic(paramCardinalities); | ||
if ( | ||
funcDef.returnTypemod === "OptionalType" && | ||
!funcDef.preservesOptionality | ||
) { | ||
cardinality = cardinalityUtil.overrideLowerBound(cardinality, "Zero"); | ||
} | ||
} | ||
@@ -219,0 +225,0 @@ |
import { Cardinality, Expression, ExpressionKind, LinkDesc, ObjectTypeSet, ObjectTypePointers, PropertyDesc, stripBacklinks, stripNonWritables, typeutil, $scopify, stripSet, TypeSet, QueryableExpression } from "../reflection"; | ||
import type { pointerToAssignmentExpression } from "./casting"; | ||
import { $expr_PathNode } from "../reflection/path"; | ||
declare type pointerIsOptional<T extends PropertyDesc | LinkDesc> = T["cardinality"] extends Cardinality.Many | Cardinality.Empty | Cardinality.AtMostOne ? true : false; | ||
export declare type pointerIsOptional<T extends PropertyDesc | LinkDesc> = T["cardinality"] extends Cardinality.Many | Cardinality.Empty | Cardinality.AtMostOne ? true : false; | ||
export declare type InsertShape<Root extends ObjectTypeSet> = typeutil.stripNever<stripNonWritables<stripBacklinks<Root["__element__"]["__pointers__"]>>> extends infer Shape ? Shape extends ObjectTypePointers ? typeutil.addQuestionMarks<{ | ||
[k in keyof Shape]: pointerToAssignmentExpression<Shape[k]> | (pointerIsOptional<Shape[k]> extends true ? undefined : never); | ||
[k in keyof Shape]: pointerToAssignmentExpression<Shape[k]> | (pointerIsOptional<Shape[k]> extends true ? undefined | null : never) | (Shape[k]["hasDefault"] extends true ? undefined : never); | ||
}> : never : never; | ||
@@ -53,5 +53,9 @@ interface UnlessConflict { | ||
}, isUpdate?: boolean): { | ||
[key: string]: TypeSet; | ||
[key: string]: TypeSet | { | ||
"+=": TypeSet; | ||
} | { | ||
"-=": TypeSet; | ||
}; | ||
}; | ||
export declare function insert<Root extends $expr_PathNode>(root: Root, shape: InsertShape<Root>): $expr_Insert<Root>; | ||
export {}; |
@@ -6,2 +6,3 @@ "use strict"; | ||
const path_1 = require("./path"); | ||
const set_1 = require("./set"); | ||
const query_1 = require("./query"); | ||
@@ -34,3 +35,4 @@ function unlessConflict(conflictGetter) { | ||
let val = _val; | ||
if (isUpdate && typeof _val === "object") { | ||
let setModify = null; | ||
if (isUpdate && _val != null && typeof _val === "object") { | ||
const valKeys = Object.keys(_val); | ||
@@ -40,5 +42,6 @@ if (valKeys.length === 1 && | ||
val = _val[valKeys[0]]; | ||
setModify = valKeys[0]; | ||
} | ||
} | ||
if (val === null || val === void 0 ? void 0 : val.__kind__) { | ||
if ((val === null || val === void 0 ? void 0 : val.__kind__) || val === undefined) { | ||
newShape[key] = _val; | ||
@@ -48,6 +51,11 @@ } | ||
const pointer = root.__element__.__pointers__[key]; | ||
if (!pointer || pointer.__kind__ !== "property") { | ||
if (!pointer || (pointer.__kind__ !== "property" && val !== null)) { | ||
throw new Error(`Could not find property pointer for ${isUpdate ? "update" : "insert"} shape key: '${key}'`); | ||
} | ||
newShape[key] = pointer.target(_val); | ||
const wrappedVal = val === null | ||
? (0, set_1.set)(pointer.target) | ||
: pointer.target(val); | ||
newShape[key] = setModify | ||
? { [setModify]: wrappedVal } | ||
: wrappedVal; | ||
} | ||
@@ -54,0 +62,0 @@ } |
@@ -21,6 +21,7 @@ import { | ||
import {$expressionify, $getScopedExpr} from "./path"; | ||
import {set} from "./set"; | ||
import {$queryify} from "./query"; | ||
import {$expr_PathNode} from "../reflection/path"; | ||
type pointerIsOptional<T extends PropertyDesc | LinkDesc> = | ||
export type pointerIsOptional<T extends PropertyDesc | LinkDesc> = | ||
T["cardinality"] extends | ||
@@ -40,3 +41,6 @@ | Cardinality.Many | ||
| pointerToAssignmentExpression<Shape[k]> | ||
| (pointerIsOptional<Shape[k]> extends true ? undefined : never); | ||
| (pointerIsOptional<Shape[k]> extends true | ||
? undefined | null | ||
: never) | ||
| (Shape[k]["hasDefault"] extends true ? undefined : never); | ||
}> | ||
@@ -137,7 +141,10 @@ : never | ||
isUpdate: boolean = false | ||
): {[key: string]: TypeSet} { | ||
const newShape: {[key: string]: TypeSet} = {}; | ||
): {[key: string]: TypeSet | {"+=": TypeSet} | {"-=": TypeSet}} { | ||
const newShape: { | ||
[key: string]: TypeSet | {"+=": TypeSet} | {"-=": TypeSet}; | ||
} = {}; | ||
for (const [key, _val] of Object.entries(shape)) { | ||
let val = _val; | ||
if (isUpdate && typeof _val === "object") { | ||
let setModify: string | null = null; | ||
if (isUpdate && _val != null && typeof _val === "object") { | ||
const valKeys = Object.keys(_val); | ||
@@ -149,9 +156,10 @@ if ( | ||
val = _val[valKeys[0]]; | ||
setModify = valKeys[0]; | ||
} | ||
} | ||
if (val?.__kind__) { | ||
if (val?.__kind__ || val === undefined) { | ||
newShape[key] = _val; | ||
} else { | ||
const pointer = root.__element__.__pointers__[key]; | ||
if (!pointer || pointer.__kind__ !== "property") { | ||
if (!pointer || (pointer.__kind__ !== "property" && val !== null)) { | ||
throw new Error( | ||
@@ -163,5 +171,9 @@ `Could not find property pointer for ${ | ||
} | ||
newShape[key] = ( | ||
pointer.target as scalarTypeWithConstructor<ScalarType> | ||
)(_val); | ||
const wrappedVal = | ||
val === null | ||
? set(pointer.target) | ||
: (pointer.target as scalarTypeWithConstructor<ScalarType>)(val); | ||
newShape[key] = setModify | ||
? ({[setModify]: wrappedVal} as any) | ||
: wrappedVal; | ||
} | ||
@@ -168,0 +180,0 @@ } |
@@ -74,2 +74,3 @@ "use strict"; | ||
writable: false, | ||
hasDefault: false, | ||
}; | ||
@@ -76,0 +77,0 @@ } |
@@ -127,2 +127,3 @@ import { | ||
writable: false, | ||
hasDefault: false, | ||
}; | ||
@@ -129,0 +130,0 @@ } |
@@ -1,10 +0,11 @@ | ||
import { QueryableExpression, ExpressionKind, ObjectTypePointers, TypeSet, ObjectTypeSet, stripBacklinks, stripNonWritables, typeutil, ObjectTypeExpression, $scopify } from "../reflection"; | ||
import { QueryableExpression, ExpressionKind, ObjectTypePointers, TypeSet, ObjectTypeSet, stripBacklinks, stripNonWritables, typeutil, ObjectTypeExpression, $scopify, Cardinality } from "../reflection"; | ||
import type { pointerToAssignmentExpression } from "./casting"; | ||
import { SelectModifiers, NormalisedSelectModifiers, ComputeSelectCardinality } from "./select"; | ||
import { pointerIsOptional } from "./insert"; | ||
export declare type UpdateShape<Root extends ObjectTypeSet> = typeutil.stripNever<stripNonWritables<stripBacklinks<Root["__element__"]["__pointers__"]>>> extends infer Shape ? Shape extends ObjectTypePointers ? { | ||
[k in keyof Shape]?: pointerToAssignmentExpression<Shape[k]> extends infer S ? S | { | ||
[k in keyof Shape]?: (pointerToAssignmentExpression<Shape[k]> extends infer S ? S | (Shape[k]["cardinality"] extends Cardinality.Many | Cardinality.AtLeastOne ? { | ||
"+=": S; | ||
} | { | ||
"-=": S; | ||
} : never; | ||
} : never) : never) | (pointerIsOptional<Shape[k]> extends true ? undefined | null : never); | ||
} : never : never; | ||
@@ -11,0 +12,0 @@ export declare type $expr_Update<Set extends TypeSet = TypeSet, Expr extends ObjectTypeSet = ObjectTypeSet, Shape extends UpdateShape<Expr> = any> = QueryableExpression<{ |
@@ -12,2 +12,3 @@ import { | ||
$scopify, | ||
Cardinality, | ||
} from "../reflection"; | ||
@@ -23,3 +24,3 @@ import type {pointerToAssignmentExpression} from "./casting"; | ||
} from "./select"; | ||
import {$normaliseInsertShape} from "./insert"; | ||
import {$normaliseInsertShape, pointerIsOptional} from "./insert"; | ||
import {$queryify} from "./query"; | ||
@@ -36,7 +37,15 @@ | ||
? { | ||
[k in keyof Shape]?: pointerToAssignmentExpression< | ||
Shape[k] | ||
> extends infer S | ||
? S | {"+=": S} | {"-=": S} | ||
: never; | ||
[k in keyof Shape]?: | ||
| (pointerToAssignmentExpression<Shape[k]> extends infer S | ||
? | ||
| S | ||
| (Shape[k]["cardinality"] extends | ||
| Cardinality.Many | ||
| Cardinality.AtLeastOne | ||
? {"+=": S} | {"-=": S} | ||
: never) | ||
: never) | ||
| (pointerIsOptional<Shape[k]> extends true | ||
? undefined | null | ||
: never); | ||
} | ||
@@ -43,0 +52,0 @@ : never |
@@ -13,3 +13,3 @@ { | ||
}, | ||
"version": "0.18.0-alpha.6", | ||
"version": "0.18.0-alpha.7", | ||
"main": "./dist/index.node.js", | ||
@@ -16,0 +16,0 @@ "types": "./dist/index.node.d.ts", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
15
953955
241
24657
6