Merge branch 'release'

This commit is contained in:
Xu Chang 2024-03-13 20:50:03 +08:00
commit 033a0e0fb9
17 changed files with 32 additions and 30 deletions

View File

@ -8,7 +8,7 @@ export type OpSchema = EntityShape & {
targetEntity: String<32>; targetEntity: String<32>;
entity: String<32>; entity: String<32>;
entityId: String<64>; entityId: String<64>;
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object | null; filter?: Object | null;
extra?: Object | null; extra?: Object | null;
@ -19,7 +19,7 @@ export type Schema = EntityShape & {
targetEntity: String<32>; targetEntity: String<32>;
entity: String<32>; entity: String<32>;
entityId: String<64>; entityId: String<64>;
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object | null; filter?: Object | null;
extra?: Object | null; extra?: Object | null;

View File

@ -29,7 +29,7 @@ exports.desc = {
notNull: true, notNull: true,
type: "varchar", type: "varchar",
params: { params: {
length: 16 length: 24
} }
}, },
data: { data: {

View File

@ -7,7 +7,7 @@ import { String, Datetime } from "../../types/DataType";
import * as User from "../User/Schema"; import * as User from "../User/Schema";
import * as OperEntity from "../OperEntity/Schema"; import * as OperEntity from "../OperEntity/Schema";
export type OpSchema = EntityShape & { export type OpSchema = EntityShape & {
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object | null; filter?: Object | null;
extra?: Object | null; extra?: Object | null;
@ -17,7 +17,7 @@ export type OpSchema = EntityShape & {
}; };
export type OpAttr = keyof OpSchema; export type OpAttr = keyof OpSchema;
export type Schema = EntityShape & { export type Schema = EntityShape & {
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object | null; filter?: Object | null;
extra?: Object | null; extra?: Object | null;

View File

@ -8,7 +8,7 @@ exports.desc = {
notNull: true, notNull: true,
type: "varchar", type: "varchar",
params: { params: {
length: 16 length: 24
} }
}, },
data: { data: {

View File

@ -966,6 +966,8 @@ function analyzeEntity(filename, path, program, relativePath) {
(0, assert_1.default)(typeArguments.length === 2); (0, assert_1.default)(typeArguments.length === 2);
const [actionNode, stateNode] = typeArguments; const [actionNode, stateNode] = typeArguments;
(0, assert_1.default)(ts.isTypeReferenceNode(actionNode)); (0, assert_1.default)(ts.isTypeReferenceNode(actionNode));
// 这里有可能引用的Action不是本文件的定义要调用这个函数加到importFrom中
tryGetStringLiteralValues(moduleName, filename, 'action', actionNode, program);
(0, assert_1.default)(ts.isTypeReferenceNode(stateNode)); (0, assert_1.default)(ts.isTypeReferenceNode(stateNode));
const enumStateValues = tryGetStringLiteralValues(moduleName, filename, 'state', stateNode, program); const enumStateValues = tryGetStringLiteralValues(moduleName, filename, 'state', stateNode, program);
(0, assert_1.default)(enumStateValues.length > 0, `文件${filename}中的state${stateNode.typeName.text}定义不是字符串类型`); (0, assert_1.default)(enumStateValues.length > 0, `文件${filename}中的state${stateNode.typeName.text}定义不是字符串类型`);

View File

@ -4,7 +4,7 @@ export interface Schema extends EntityShape {
targetEntity: String<32>; targetEntity: String<32>;
entity: String<32>; entity: String<32>;
entityId: String<64>; entityId: String<64>;
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object; filter?: Object;
extra?: Object; extra?: Object;

View File

@ -2,7 +2,7 @@ import { String, Datetime } from '../types/DataType';
import { EntityShape } from '../types/Entity'; import { EntityShape } from '../types/Entity';
import { Schema as User } from './User'; import { Schema as User } from './User';
export interface Schema extends EntityShape { export interface Schema extends EntityShape {
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object; filter?: Object;
extra?: Object; extra?: Object;

View File

@ -1163,7 +1163,7 @@ class CascadeStore extends RowStore_1.RowStore {
data, data,
operatorId, operatorId,
targetEntity: entity, targetEntity: entity,
bornAt, bornAt: bornAt || now,
operEntity$oper: data instanceof Array ? { operEntity$oper: data instanceof Array ? {
id: 'dummy', id: 'dummy',
action: 'create', action: 'create',
@ -1317,7 +1317,7 @@ class CascadeStore extends RowStore_1.RowStore {
action, action,
data, data,
targetEntity: entity, targetEntity: entity,
bornAt, bornAt: bornAt || now,
operatorId, operatorId,
operEntity$oper: { operEntity$oper: {
id: 'dummy', id: 'dummy',

View File

@ -1,10 +1,8 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.createDynamicTriggers = void 0; exports.createDynamicTriggers = void 0;
const tslib_1 = require("tslib");
const assert_1 = tslib_1.__importDefault(require("assert"));
const modi_1 = require("../store/modi"); const modi_1 = require("../store/modi");
function createOperTriggers() { /* function createOperTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>() {
return [ return [
{ {
name: 'assign initial bornAt for local oper', name: 'assign initial bornAt for local oper',
@ -13,16 +11,16 @@ function createOperTriggers() {
when: 'before', when: 'before',
fn({ operation }) { fn({ operation }) {
const { data } = operation; const { data } = operation;
(0, assert_1.default)(!(data instanceof Array)); assert(!(data instanceof Array));
if (!data.bornAt) { if (!data.bornAt) {
data.bornAt = Date.now(); data.bornAt = Date.now();
} }
return 1; return 1;
} }
} } as CreateTrigger<ED, 'oper', Cxt>
]; ] as Trigger<ED, keyof ED, Cxt>[];
} } */
function createDynamicTriggers(schema) { function createDynamicTriggers(schema) {
return (0, modi_1.createModiRelatedTriggers)(schema).concat(createOperTriggers()); return (0, modi_1.createModiRelatedTriggers)(schema);
} }
exports.createDynamicTriggers = createDynamicTriggers; exports.createDynamicTriggers = createDynamicTriggers;

View File

@ -79,9 +79,9 @@ export declare function isRefAttrNode<A>(node: any): node is RefAttr<A>;
export type JsonFilter<O extends any> = O extends Array<infer P> ? (JsonFilter<P> | undefined)[] | { export type JsonFilter<O extends any> = O extends Array<infer P> ? (JsonFilter<P> | undefined)[] | {
$contains?: P | P[]; $contains?: P | P[];
$overlaps?: P | P[]; $overlaps?: P | P[];
} : O extends number ? Q_NumberValue : O extends string ? Q_StringValue : O extends boolean ? Q_BooleanValue : O extends Record<string, any> ? { } | Q_ExistsValue : O extends number ? Q_NumberValue : O extends string ? Q_StringValue : O extends boolean ? Q_BooleanValue : O extends Record<string, any> ? {
[A in keyof O]?: JsonFilter<O[A]>; [A in keyof O]?: JsonFilter<O[A]>;
} : never; } | Q_ExistsValue : never;
export type SubQueryPredicateMetadata = { export type SubQueryPredicateMetadata = {
'#sqp'?: 'in' | 'not in' | 'all' | 'not all'; '#sqp'?: 'in' | 'not in' | 'all' | 'not all';
}; };

View File

@ -1,6 +1,6 @@
{ {
"name": "oak-domain", "name": "oak-domain",
"version": "4.2.6", "version": "4.2.7",
"author": { "author": {
"name": "XuChang" "name": "XuChang"
}, },

View File

@ -1315,6 +1315,8 @@ function analyzeEntity(filename: string, path: string, program: ts.Program, rela
const [actionNode, stateNode] = typeArguments!; const [actionNode, stateNode] = typeArguments!;
assert(ts.isTypeReferenceNode(actionNode)); assert(ts.isTypeReferenceNode(actionNode));
// 这里有可能引用的Action不是本文件的定义要调用这个函数加到importFrom中
tryGetStringLiteralValues(moduleName, filename, 'action', actionNode, program);
assert(ts.isTypeReferenceNode(stateNode)); assert(ts.isTypeReferenceNode(stateNode));
const enumStateValues = tryGetStringLiteralValues(moduleName, filename, 'state', stateNode, program); const enumStateValues = tryGetStringLiteralValues(moduleName, filename, 'state', stateNode, program);
assert(enumStateValues.length > 0, `文件${filename}中的state${(<ts.Identifier>stateNode.typeName).text}定义不是字符串类型`) assert(enumStateValues.length > 0, `文件${filename}中的state${(<ts.Identifier>stateNode.typeName).text}定义不是字符串类型`)

View File

@ -7,7 +7,7 @@ export interface Schema extends EntityShape {
targetEntity: String<32>; // 要操作的目标对象 targetEntity: String<32>; // 要操作的目标对象
entity: String<32>; // 关联的目标对象 entity: String<32>; // 关联的目标对象
entityId: String<64>; // 关联的目标对象id entityId: String<64>; // 关联的目标对象id
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object; filter?: Object;
extra?: Object; extra?: Object;

View File

@ -4,7 +4,7 @@ import { Schema as User } from './User';
import { EntityDesc } from '../types/EntityDesc'; import { EntityDesc } from '../types/EntityDesc';
export interface Schema extends EntityShape { export interface Schema extends EntityShape {
action: String<16>; action: String<24>;
data: Object; data: Object;
filter?: Object; filter?: Object;
extra?: Object; extra?: Object;

View File

@ -1432,7 +1432,7 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
data, data,
operatorId, operatorId,
targetEntity: entity as string, targetEntity: entity as string,
bornAt, bornAt: bornAt || now,
operEntity$oper: data instanceof Array ? { operEntity$oper: data instanceof Array ? {
id: 'dummy', id: 'dummy',
action: 'create', action: 'create',
@ -1595,7 +1595,7 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
action, action,
data, data,
targetEntity: entity as string, targetEntity: entity as string,
bornAt, bornAt: bornAt || now,
operatorId, operatorId,
operEntity$oper: { operEntity$oper: {
id: 'dummy', id: 'dummy',

View File

@ -5,7 +5,7 @@ import { createModiRelatedTriggers } from '../store/modi';
import { AsyncContext } from '../store/AsyncRowStore'; import { AsyncContext } from '../store/AsyncRowStore';
import { SyncContext } from '../store/SyncRowStore'; import { SyncContext } from '../store/SyncRowStore';
function createOperTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>() { /* function createOperTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>() {
return [ return [
{ {
name: 'assign initial bornAt for local oper', name: 'assign initial bornAt for local oper',
@ -22,8 +22,8 @@ function createOperTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends
} }
} as CreateTrigger<ED, 'oper', Cxt> } as CreateTrigger<ED, 'oper', Cxt>
] as Trigger<ED, keyof ED, Cxt>[]; ] as Trigger<ED, keyof ED, Cxt>[];
} } */
export function createDynamicTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>) { export function createDynamicTriggers<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED> | SyncContext<ED>>(schema: StorageSchema<ED>) {
return createModiRelatedTriggers<ED, Cxt>(schema).concat(createOperTriggers()); return createModiRelatedTriggers<ED, Cxt>(schema);
} }

View File

@ -112,12 +112,12 @@ export function isRefAttrNode<A>(node: any): node is RefAttr<A> {
export type JsonFilter<O extends any> = O extends Array<infer P> ? (JsonFilter<P> | undefined)[] | { export type JsonFilter<O extends any> = O extends Array<infer P> ? (JsonFilter<P> | undefined)[] | {
$contains?: P | P[]; $contains?: P | P[];
$overlaps?: P | P[]; $overlaps?: P | P[];
} : O extends number ? Q_NumberValue } | Q_ExistsValue : O extends number ? Q_NumberValue
: O extends string ? Q_StringValue : O extends string ? Q_StringValue
: O extends boolean ? Q_BooleanValue : O extends boolean ? Q_BooleanValue
: O extends Record<string, any> ? { : O extends Record<string, any> ? {
[A in keyof O]?: JsonFilter<O[A]>; [A in keyof O]?: JsonFilter<O[A]>;
} : never; } | Q_ExistsValue: never;
export type SubQueryPredicateMetadata = { export type SubQueryPredicateMetadata = {
'#sqp'?: 'in' | 'not in' | 'all' | 'not all'; '#sqp'?: 'in' | 'not in' | 'all' | 'not all';