Spaces:
Running
Running
Remove superseded source snapshots
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- source/browser-sqlite/assist/create-customer.md +0 -82
- source/browser-sqlite/assist/create-customer_order.md +0 -92
- source/browser-sqlite/assist/create-order_item.md +0 -86
- source/browser-sqlite/assist/debug.md +0 -101
- source/browser-sqlite/assist/expression-customer_order.md +0 -135
- source/browser-sqlite/assist/query-customer_order.md +0 -104
- source/browser-sqlite/assist/query-customer_order.order_item_list.md +0 -66
- source/browser-sqlite/assist/query-customer_order.status.md +0 -72
- source/browser-sqlite/assist/query-order_item.md +0 -97
- source/browser-sqlite/assist/query-order_status.customer_order_list.md +0 -66
- source/browser-sqlite/assist/query-order_status.md +0 -104
- source/browser-sqlite/index.html +0 -44
- source/browser-sqlite/order-model.xml +0 -21
- source/browser-sqlite/orders-lib/package.json +0 -15
- source/browser-sqlite/orders-lib/src/generated-bootstrap.ts +0 -69
- source/browser-sqlite/orders-lib/src/generated-search-models.ts +0 -124
- source/browser-sqlite/orders-lib/src/generated/E.ts +0 -859
- source/browser-sqlite/orders-lib/src/generated/Q.ts +0 -44
- source/browser-sqlite/orders-lib/src/generated/models/Customer.ts +0 -252
- source/browser-sqlite/orders-lib/src/generated/models/CustomerOrder.ts +0 -305
- source/browser-sqlite/orders-lib/src/generated/models/OrderItem.ts +0 -231
- source/browser-sqlite/orders-lib/src/generated/models/OrderStatus.ts +0 -279
- source/browser-sqlite/orders-lib/src/generated/models/Platform.ts +0 -276
- source/browser-sqlite/orders-lib/src/generated/requests/CustomerOrderRequest.ts +0 -1206
- source/browser-sqlite/orders-lib/src/generated/requests/CustomerRequest.ts +0 -795
- source/browser-sqlite/orders-lib/src/generated/requests/OrderItemRequest.ts +0 -909
- source/browser-sqlite/orders-lib/src/generated/requests/OrderStatusRequest.ts +0 -1162
- source/browser-sqlite/orders-lib/src/generated/requests/PlatformRequest.ts +0 -791
- source/browser-sqlite/orders-lib/src/runtime-module.ts +0 -150
- source/browser-sqlite/orders-lib/src/teaql-schemas.ts +0 -34
- source/browser-sqlite/orders-lib/src/teaql-ts.ts +0 -308
- source/browser-sqlite/orders-lib/teaql-i18n.json +0 -128
- source/browser-sqlite/orders-lib/tsconfig.json +0 -12
- source/browser-sqlite/package-lock.json +0 -1624
- source/browser-sqlite/package.json +0 -20
- source/browser-sqlite/scripts/smoke.mjs +0 -130
- source/browser-sqlite/src/main.ts +0 -185
- source/browser-sqlite/src/sqlite.worker.ts +0 -4
- source/browser-sqlite/src/style.css +0 -14
- source/runtime/LICENSE +0 -202
- source/runtime/package-lock.json +0 -0
- source/runtime/package.json +0 -188
- source/runtime/scripts/build-esm.mjs +0 -28
- source/runtime/scripts/fixtures/checker-overlap-command.sh +0 -13
- source/runtime/scripts/generate-query-parser.mjs +0 -9
- source/runtime/scripts/run-checker-overlap.sh +0 -32
- source/runtime/scripts/test-checker-overlap-guard.sh +0 -32
- source/runtime/scripts/verify-checker-overlap.sh +0 -20
- source/runtime/scripts/verify-current-aggregate.sh +0 -21
- source/runtime/scripts/verify-examples.sh +0 -80
source/browser-sqlite/assist/create-customer.md
DELETED
|
@@ -1,82 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Create `Customer`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.customers()` entry point. The
|
| 6 |
-
trusted `UserContext` supplies actor, tenant, policy, provider, and audit sink;
|
| 7 |
-
none of those values may be accepted from the writable input.
|
| 8 |
-
|
| 9 |
-
```typescript
|
| 10 |
-
import { UserContext } from '../teaql-ts';
|
| 11 |
-
import { Q } from './Q';
|
| 12 |
-
import { Customer } from './models/Customer';
|
| 13 |
-
|
| 14 |
-
export interface CreateCustomerInput {
|
| 15 |
-
platform: string | number;
|
| 16 |
-
name: string;
|
| 17 |
-
|
| 18 |
-
}
|
| 19 |
-
|
| 20 |
-
export async function createCustomer(
|
| 21 |
-
input: CreateCustomerInput,
|
| 22 |
-
context: UserContext,
|
| 23 |
-
): Promise<Customer> {
|
| 24 |
-
const entity = Q.customers()
|
| 25 |
-
.comment('what: initialize Customer')
|
| 26 |
-
.purpose('why: create Customer')
|
| 27 |
-
.newEntity(context);
|
| 28 |
-
|
| 29 |
-
entity.updatePlatform(input.platform);
|
| 30 |
-
entity.updateName(input.name);
|
| 31 |
-
|
| 32 |
-
await entity
|
| 33 |
-
.auditAs('Create Customer for the requested business operation')
|
| 34 |
-
.save(context);
|
| 35 |
-
return entity;
|
| 36 |
-
}
|
| 37 |
-
```
|
| 38 |
-
|
| 39 |
-
Only the generated updater methods above are writable. Constant relation
|
| 40 |
-
candidates, when present, are also generated and must be copied exactly:
|
| 41 |
-
|
| 42 |
-
Compile the result unchanged. Test persistence and query-back, and prove that
|
| 43 |
-
blank/missing intent, blank/missing audit reason, unknown fields, and attempted
|
| 44 |
-
trusted-context overrides fail. Do not edit generated sources.
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
---
|
| 48 |
-
|
| 49 |
-
## TeaQL seven-language assist contract
|
| 50 |
-
|
| 51 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 52 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 53 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 54 |
-
|
| 55 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 56 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 57 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 58 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 59 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 60 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 61 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 62 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 63 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 64 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 65 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 66 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 67 |
-
- If the required operation is absent after current entity/action and required field
|
| 68 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 69 |
-
generated library as a fallback.
|
| 70 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 71 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 72 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 73 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 74 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 75 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 76 |
-
|
| 77 |
-
Capability: `create`.
|
| 78 |
-
|
| 79 |
-
- Validate and allow-list writable business fields; never mass-assign dynamic JSON.
|
| 80 |
-
- Create through the generated request/entity API, attach a non-empty audit reason,
|
| 81 |
-
save with the same UserContext, and return the runtime's native save result.
|
| 82 |
-
- Add a negative test proving a missing audit reason cannot write.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/create-customer_order.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Create `Customer Order`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.customerOrders()` entry point. The
|
| 6 |
-
trusted `UserContext` supplies actor, tenant, policy, provider, and audit sink;
|
| 7 |
-
none of those values may be accepted from the writable input.
|
| 8 |
-
|
| 9 |
-
```typescript
|
| 10 |
-
import { UserContext } from '../teaql-ts';
|
| 11 |
-
import { Q } from './Q';
|
| 12 |
-
import { CustomerOrder } from './models/CustomerOrder';
|
| 13 |
-
|
| 14 |
-
export interface CreateCustomerOrderInput {
|
| 15 |
-
customer: string | number;
|
| 16 |
-
status: string | number;
|
| 17 |
-
orderNumber: string;
|
| 18 |
-
orderDate: string;
|
| 19 |
-
totalAmount: number;
|
| 20 |
-
|
| 21 |
-
}
|
| 22 |
-
|
| 23 |
-
export async function createCustomerOrder(
|
| 24 |
-
input: CreateCustomerOrderInput,
|
| 25 |
-
context: UserContext,
|
| 26 |
-
): Promise<CustomerOrder> {
|
| 27 |
-
const entity = Q.customerOrders()
|
| 28 |
-
.comment('what: initialize Customer Order')
|
| 29 |
-
.purpose('why: create Customer Order')
|
| 30 |
-
.newEntity(context);
|
| 31 |
-
|
| 32 |
-
entity.updateCustomer(input.customer);
|
| 33 |
-
entity.updateStatus(input.status);
|
| 34 |
-
entity.updateOrderNumber(input.orderNumber);
|
| 35 |
-
entity.updateOrderDate(input.orderDate);
|
| 36 |
-
entity.updateTotalAmount(input.totalAmount);
|
| 37 |
-
|
| 38 |
-
await entity
|
| 39 |
-
.auditAs('Create Customer Order for the requested business operation')
|
| 40 |
-
.save(context);
|
| 41 |
-
return entity;
|
| 42 |
-
}
|
| 43 |
-
```
|
| 44 |
-
|
| 45 |
-
Only the generated updater methods above are writable. Constant relation
|
| 46 |
-
candidates, when present, are also generated and must be copied exactly:
|
| 47 |
-
- `updateStatusToNew()`
|
| 48 |
-
- `updateStatusToPaid()`
|
| 49 |
-
- `updateStatusToCancelled()`
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
Compile the result unchanged. Test persistence and query-back, and prove that
|
| 53 |
-
blank/missing intent, blank/missing audit reason, unknown fields, and attempted
|
| 54 |
-
trusted-context overrides fail. Do not edit generated sources.
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
---
|
| 58 |
-
|
| 59 |
-
## TeaQL seven-language assist contract
|
| 60 |
-
|
| 61 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 62 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 63 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 64 |
-
|
| 65 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 66 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 67 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 68 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 69 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 70 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 71 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 72 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 73 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 74 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 75 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 76 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 77 |
-
- If the required operation is absent after current entity/action and required field
|
| 78 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 79 |
-
generated library as a fallback.
|
| 80 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 81 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 82 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 83 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 84 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 85 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 86 |
-
|
| 87 |
-
Capability: `create`.
|
| 88 |
-
|
| 89 |
-
- Validate and allow-list writable business fields; never mass-assign dynamic JSON.
|
| 90 |
-
- Create through the generated request/entity API, attach a non-empty audit reason,
|
| 91 |
-
save with the same UserContext, and return the runtime's native save result.
|
| 92 |
-
- Add a negative test proving a missing audit reason cannot write.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/create-order_item.md
DELETED
|
@@ -1,86 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Create `Order Item`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.orderItems()` entry point. The
|
| 6 |
-
trusted `UserContext` supplies actor, tenant, policy, provider, and audit sink;
|
| 7 |
-
none of those values may be accepted from the writable input.
|
| 8 |
-
|
| 9 |
-
```typescript
|
| 10 |
-
import { UserContext } from '../teaql-ts';
|
| 11 |
-
import { Q } from './Q';
|
| 12 |
-
import { OrderItem } from './models/OrderItem';
|
| 13 |
-
|
| 14 |
-
export interface CreateOrderItemInput {
|
| 15 |
-
customerOrder: string | number;
|
| 16 |
-
productName: string;
|
| 17 |
-
quantity: number;
|
| 18 |
-
unitPrice: number;
|
| 19 |
-
|
| 20 |
-
}
|
| 21 |
-
|
| 22 |
-
export async function createOrderItem(
|
| 23 |
-
input: CreateOrderItemInput,
|
| 24 |
-
context: UserContext,
|
| 25 |
-
): Promise<OrderItem> {
|
| 26 |
-
const entity = Q.orderItems()
|
| 27 |
-
.comment('what: initialize Order Item')
|
| 28 |
-
.purpose('why: create Order Item')
|
| 29 |
-
.newEntity(context);
|
| 30 |
-
|
| 31 |
-
entity.updateCustomerOrder(input.customerOrder);
|
| 32 |
-
entity.updateProductName(input.productName);
|
| 33 |
-
entity.updateQuantity(input.quantity);
|
| 34 |
-
entity.updateUnitPrice(input.unitPrice);
|
| 35 |
-
|
| 36 |
-
await entity
|
| 37 |
-
.auditAs('Create Order Item for the requested business operation')
|
| 38 |
-
.save(context);
|
| 39 |
-
return entity;
|
| 40 |
-
}
|
| 41 |
-
```
|
| 42 |
-
|
| 43 |
-
Only the generated updater methods above are writable. Constant relation
|
| 44 |
-
candidates, when present, are also generated and must be copied exactly:
|
| 45 |
-
|
| 46 |
-
Compile the result unchanged. Test persistence and query-back, and prove that
|
| 47 |
-
blank/missing intent, blank/missing audit reason, unknown fields, and attempted
|
| 48 |
-
trusted-context overrides fail. Do not edit generated sources.
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
---
|
| 52 |
-
|
| 53 |
-
## TeaQL seven-language assist contract
|
| 54 |
-
|
| 55 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 56 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 57 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 58 |
-
|
| 59 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 60 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 61 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 62 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 63 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 64 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 65 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 66 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 67 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 68 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 69 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 70 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 71 |
-
- If the required operation is absent after current entity/action and required field
|
| 72 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 73 |
-
generated library as a fallback.
|
| 74 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 75 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 76 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 77 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 78 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 79 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 80 |
-
|
| 81 |
-
Capability: `create`.
|
| 82 |
-
|
| 83 |
-
- Validate and allow-list writable business fields; never mass-assign dynamic JSON.
|
| 84 |
-
- Create through the generated request/entity API, attach a non-empty audit reason,
|
| 85 |
-
save with the same UserContext, and return the runtime's native save result.
|
| 86 |
-
- Add a negative test proving a missing audit reason cannot write.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/debug.md
DELETED
|
@@ -1,101 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TeaQL safe SQL execution evidence (TypeScript)
|
| 4 |
-
|
| 5 |
-
Attach a trusted evidence store to the server-created SQL client and project
|
| 6 |
-
only bounded fields before returning diagnostics to an application or Coding
|
| 7 |
-
Agent.
|
| 8 |
-
|
| 9 |
-
```typescript
|
| 10 |
-
import type { SQLExecutionMetadata, SQLExecutionOperation } from 'teaql-ts/sql/core';
|
| 11 |
-
|
| 12 |
-
export type SafeSQLExecutionEvidence = Readonly<{
|
| 13 |
-
operation: SQLExecutionOperation;
|
| 14 |
-
parameterizedSQL: string;
|
| 15 |
-
parameterCount: number;
|
| 16 |
-
elapsedMicros: number;
|
| 17 |
-
resultCount?: number;
|
| 18 |
-
affectedRows?: number;
|
| 19 |
-
resultSummary: string;
|
| 20 |
-
traceChain?: SQLExecutionMetadata['traceChain'];
|
| 21 |
-
tracePath: SQLExecutionMetadata['tracePath'];
|
| 22 |
-
}>;
|
| 23 |
-
|
| 24 |
-
export function safeSQLEvidence(
|
| 25 |
-
entries: readonly SQLExecutionMetadata[],
|
| 26 |
-
): readonly SafeSQLExecutionEvidence[] {
|
| 27 |
-
return entries.map(entry => Object.freeze({
|
| 28 |
-
operation: entry.operation,
|
| 29 |
-
parameterizedSQL: entry.parameterizedSQL,
|
| 30 |
-
parameterCount: entry.parameters.length,
|
| 31 |
-
elapsedMicros: entry.elapsedMicros,
|
| 32 |
-
resultCount: entry.resultCount,
|
| 33 |
-
affectedRows: entry.affectedRows,
|
| 34 |
-
resultSummary: entry.resultSummary,
|
| 35 |
-
traceChain: entry.traceChain,
|
| 36 |
-
tracePath: entry.tracePath,
|
| 37 |
-
}));
|
| 38 |
-
}
|
| 39 |
-
```
|
| 40 |
-
|
| 41 |
-
Create `SQLExecutionEvidenceStore`, attach it with
|
| 42 |
-
`client.setRuntimeTelemetrySink(store)`, and select `enableAll`, `enableSelect`,
|
| 43 |
-
`enableMutation`, or `disable`. Mode changes clear earlier entries. Raw
|
| 44 |
-
parameters, credentials, connection strings, and interpolated SQL remain inside
|
| 45 |
-
the trusted boundary and are intentionally absent above.
|
| 46 |
-
|
| 47 |
-
Query and mutation logs, including the text diagnostic sink, are enabled by default.
|
| 48 |
-
The default sink is `new TextDiagnosticSQLLogSink()` and may be
|
| 49 |
-
replaced with `client.setDiagnosticSQLLogSink(...)`. Disable the two operation
|
| 50 |
-
families independently with
|
| 51 |
-
`client.setQueryLoggingEnabled(false)` and
|
| 52 |
-
`client.setMutationLoggingEnabled(false)`; passing `undefined` to
|
| 53 |
-
`setDiagnosticSQLLogSink` removes operator output entirely. Each metadata entry
|
| 54 |
-
retains structured `comment`, `purpose`, `auditReason`, typed multi-level
|
| 55 |
-
`tracePath`, business `traceChain`, parameterized SQL, copy-paste `debugSQL`, elapsed
|
| 56 |
-
time, result count, and affected rows. `traceChain` follows the root purpose and
|
| 57 |
-
request-parent comments, preserving both the native Q operation and a nested
|
| 58 |
-
explicit/default comment. `tracePath` describes the physical provider/SQL route;
|
| 59 |
-
do not derive one from the other or reconstruct either from SQL text. Runtime
|
| 60 |
-
evidence is policy-projected by default; keep that projection when exposing it.
|
| 61 |
-
Explicit debug plaintext is not ordinary telemetry and must not leave the trusted
|
| 62 |
-
debugging boundary.
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
---
|
| 66 |
-
|
| 67 |
-
## TeaQL seven-language assist contract
|
| 68 |
-
|
| 69 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 70 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 71 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 72 |
-
|
| 73 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 74 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 75 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 76 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 77 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 78 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 79 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 80 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 81 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 82 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 83 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 84 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 85 |
-
- If the required operation is absent after current entity/action and required field
|
| 86 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 87 |
-
generated library as a fallback.
|
| 88 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 89 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 90 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 91 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 92 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 93 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 94 |
-
|
| 95 |
-
Capability: `debug`.
|
| 96 |
-
|
| 97 |
-
- Capture purpose, comment, trace/correlation id, parameterized SQL summary,
|
| 98 |
-
duration, row count, provider, and the runtime's native response when available.
|
| 99 |
-
- Preserve the immutable row audit event and the customizable App Audit Sink as
|
| 100 |
-
separate paths. Redact credentials, tokens, connection strings, and customer data.
|
| 101 |
-
- Document only switches and hooks present in the selected runtime source.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/expression-customer_order.md
DELETED
|
@@ -1,135 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Expression `Customer Order`
|
| 4 |
-
|
| 5 |
-
The generated E facade preserves Value, loaded null/undefined, and NotLoaded.
|
| 6 |
-
`eval()` returns a native value for the first two and throws
|
| 7 |
-
`TeaQLNotLoadedError` for the third. `orElse` is nullish-only and never hides
|
| 8 |
-
NotLoaded.
|
| 9 |
-
|
| 10 |
-
```typescript
|
| 11 |
-
import { E } from './E';
|
| 12 |
-
import { CustomerOrder } from './models/CustomerOrder';
|
| 13 |
-
|
| 14 |
-
export function extractId(entity: CustomerOrder) {
|
| 15 |
-
return E.customerOrder(entity).id().eval();
|
| 16 |
-
}
|
| 17 |
-
|
| 18 |
-
export function extractIdOrElse(
|
| 19 |
-
entity: CustomerOrder, fallback: NonNullable<CustomerOrder['id']>,
|
| 20 |
-
) {
|
| 21 |
-
return E.customerOrder(entity).id().orElse(fallback);
|
| 22 |
-
}
|
| 23 |
-
|
| 24 |
-
export function extractOrderNumber(entity: CustomerOrder) {
|
| 25 |
-
return E.customerOrder(entity).orderNumber().eval();
|
| 26 |
-
}
|
| 27 |
-
|
| 28 |
-
export function extractOrderNumberOrElse(
|
| 29 |
-
entity: CustomerOrder, fallback: NonNullable<CustomerOrder['orderNumber']>,
|
| 30 |
-
) {
|
| 31 |
-
return E.customerOrder(entity).orderNumber().orElse(fallback);
|
| 32 |
-
}
|
| 33 |
-
|
| 34 |
-
export function extractOrderDate(entity: CustomerOrder) {
|
| 35 |
-
return E.customerOrder(entity).orderDate().eval();
|
| 36 |
-
}
|
| 37 |
-
|
| 38 |
-
export function extractOrderDateOrElse(
|
| 39 |
-
entity: CustomerOrder, fallback: NonNullable<CustomerOrder['orderDate']>,
|
| 40 |
-
) {
|
| 41 |
-
return E.customerOrder(entity).orderDate().orElse(fallback);
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
export function extractTotalAmount(entity: CustomerOrder) {
|
| 45 |
-
return E.customerOrder(entity).totalAmount().eval();
|
| 46 |
-
}
|
| 47 |
-
|
| 48 |
-
export function extractTotalAmountOrElse(
|
| 49 |
-
entity: CustomerOrder, fallback: NonNullable<CustomerOrder['totalAmount']>,
|
| 50 |
-
) {
|
| 51 |
-
return E.customerOrder(entity).totalAmount().orElse(fallback);
|
| 52 |
-
}
|
| 53 |
-
|
| 54 |
-
export function extractVersion(entity: CustomerOrder) {
|
| 55 |
-
return E.customerOrder(entity).version().eval();
|
| 56 |
-
}
|
| 57 |
-
|
| 58 |
-
export function extractVersionOrElse(
|
| 59 |
-
entity: CustomerOrder, fallback: NonNullable<CustomerOrder['version']>,
|
| 60 |
-
) {
|
| 61 |
-
return E.customerOrder(entity).version().orElse(fallback);
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
-
export function extractCustomerId(entity: CustomerOrder) {
|
| 65 |
-
return E.customerOrder(entity).customerId().eval();
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
export function traverseCustomer(entity: CustomerOrder) {
|
| 69 |
-
return E.customerOrder(entity).customer().eval();
|
| 70 |
-
}
|
| 71 |
-
|
| 72 |
-
export function extractStatusId(entity: CustomerOrder) {
|
| 73 |
-
return E.customerOrder(entity).statusId().eval();
|
| 74 |
-
}
|
| 75 |
-
|
| 76 |
-
export function traverseStatus(entity: CustomerOrder) {
|
| 77 |
-
return E.customerOrder(entity).status().eval();
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
export function aggregateOrderItemListSize(entity: CustomerOrder) {
|
| 81 |
-
return E.customerOrder(entity).orderItemList().size().eval();
|
| 82 |
-
}
|
| 83 |
-
|
| 84 |
-
export function firstOrderItemListId(entity: CustomerOrder) {
|
| 85 |
-
return E.customerOrder(entity).orderItemList().first().id().eval();
|
| 86 |
-
}
|
| 87 |
-
|
| 88 |
-
export function getOrderItemListId(entity: CustomerOrder, index: number) {
|
| 89 |
-
return E.customerOrder(entity).orderItemList().get(index).id().eval();
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
```
|
| 94 |
-
|
| 95 |
-
Select every traversed field and relation. Never catch
|
| 96 |
-
`TeaQLNotLoadedError` merely to supply a default, and never replace generated E
|
| 97 |
-
accessors with optional chaining.
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
---
|
| 101 |
-
|
| 102 |
-
## TeaQL seven-language assist contract
|
| 103 |
-
|
| 104 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 105 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 106 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 107 |
-
|
| 108 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 109 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 110 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 111 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 112 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 113 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 114 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 115 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 116 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 117 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 118 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 119 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 120 |
-
- If the required operation is absent after current entity/action and required field
|
| 121 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 122 |
-
generated library as a fallback.
|
| 123 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 124 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 125 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 126 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 127 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 128 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 129 |
-
|
| 130 |
-
Capability: `expression`.
|
| 131 |
-
|
| 132 |
-
- Distinguish a loaded null from a field or relation that was not projected. A
|
| 133 |
-
NotLoaded/coding error must remain visible; do not turn it into an ordinary null.
|
| 134 |
-
- Select every traversed relation first and use the generated E/expression API for
|
| 135 |
-
scalar, object, and list traversal. Do not translate Java accessor names by guess.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-customer_order.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Query `Customer Order`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.customerOrdersWithMinimalFields()`
|
| 6 |
-
entry point. Trusted runtime and policy state comes only from `UserContext`.
|
| 7 |
-
|
| 8 |
-
```typescript
|
| 9 |
-
import { Q } from './Q';
|
| 10 |
-
import { CustomerOrder } from './models/CustomerOrder';
|
| 11 |
-
import { SmartList, UserContext } from '../teaql-ts';
|
| 12 |
-
|
| 13 |
-
export async function queryCustomerOrderById(
|
| 14 |
-
context: UserContext,
|
| 15 |
-
entityId: string,
|
| 16 |
-
): Promise<SmartList<CustomerOrder>> {
|
| 17 |
-
return Q.customerOrdersWithMinimalFields()
|
| 18 |
-
.withIdIs(entityId)
|
| 19 |
-
.orderByIdAscending()
|
| 20 |
-
.limit(20)
|
| 21 |
-
.comment('what: load the requested Customer Order row')
|
| 22 |
-
.purpose('why: serve the authorized Customer Order view')
|
| 23 |
-
.executeForList(context);
|
| 24 |
-
}
|
| 25 |
-
```
|
| 26 |
-
|
| 27 |
-
Compile and execute this source unchanged. Use only generated projection,
|
| 28 |
-
predicate, ordering, and relation-selection APIs. Missing or blank intent,
|
| 29 |
-
unknown fields, unbounded reads, and trusted-context inputs must fail. Use generated
|
| 30 |
-
relation loading rather than handwritten child-query loops; never guess a plural.
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
## Field-specific Query Assist
|
| 34 |
-
|
| 35 |
-
Use the canonical KSML field name from this list. Do not substitute a language member name, JSON name, or database column.
|
| 36 |
-
|
| 37 |
-
| KSML field | Type | Field help |
|
| 38 |
-
| --- | --- | --- |
|
| 39 |
-
| `id` | `id` | `typescript-assist-query/customer_order.id` |
|
| 40 |
-
| `customer` | `relation<customer>` | `typescript-assist-query/customer_order.customer` |
|
| 41 |
-
| `status` | `relation<order_status>` | `typescript-assist-query/customer_order.status` |
|
| 42 |
-
| `order_number` | `string` | `typescript-assist-query/customer_order.order_number` |
|
| 43 |
-
| `order_date` | `date` | `typescript-assist-query/customer_order.order_date` |
|
| 44 |
-
| `total_amount` | `number` | `typescript-assist-query/customer_order.total_amount` |
|
| 45 |
-
| `version` | `version` | `typescript-assist-query/customer_order.version` |
|
| 46 |
-
|
| 47 |
-
Generated reverse relations are derived from referencing KSML fields. Use their exact generated location for relation selection and access:
|
| 48 |
-
|
| 49 |
-
| Generated reverse relation | Child entity | Field help |
|
| 50 |
-
| --- | --- | --- |
|
| 51 |
-
| `order_item_list` | `order_item` | `typescript-assist-query/customer_order.order_item_list` |
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
---
|
| 55 |
-
|
| 56 |
-
## TeaQL seven-language assist contract
|
| 57 |
-
|
| 58 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 59 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 60 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 61 |
-
|
| 62 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 63 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 64 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 65 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 66 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 67 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 68 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 69 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 70 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 71 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 72 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 73 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 74 |
-
- If the required operation is absent after current entity/action and required field
|
| 75 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 76 |
-
generated library as a fallback.
|
| 77 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 78 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 79 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 80 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 81 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 82 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 83 |
-
|
| 84 |
-
Capability: `query`.
|
| 85 |
-
|
| 86 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 87 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 88 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 89 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 90 |
-
|
| 91 |
-
### Optional per-parent Top-N optimization
|
| 92 |
-
|
| 93 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 94 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 95 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 96 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 97 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 98 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 99 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 100 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 101 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 102 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 103 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 104 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-customer_order.order_item_list.md
DELETED
|
@@ -1,66 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# Query Reverse-Relation Assist — `customer_order.order_item_list`
|
| 4 |
-
|
| 5 |
-
KSML entity: `customer_order`
|
| 6 |
-
Derived reverse relation: `order_item_list`
|
| 7 |
-
Child entity: `order_item`
|
| 8 |
-
|
| 9 |
-
| Capability | Generated API |
|
| 10 |
-
| --- | --- |
|
| 11 |
-
| Select | `.selectOrderItemListWith(Q.orderItemsWithMinimalFields())` |
|
| 12 |
-
|
| 13 |
-
Reverse relations are model-derived and never perform an implicit database query. Select the relation explicitly before expression access. Apply query methods before the executable purpose stage, then execute with exactly one trusted context.
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
---
|
| 17 |
-
|
| 18 |
-
## TeaQL seven-language assist contract
|
| 19 |
-
|
| 20 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 21 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 22 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 23 |
-
|
| 24 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 25 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 26 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 27 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 28 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 29 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 30 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 31 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 32 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 33 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 34 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 35 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 36 |
-
- If the required operation is absent after current entity/action and required field
|
| 37 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 38 |
-
generated library as a fallback.
|
| 39 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 40 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 41 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 42 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 43 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 44 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 45 |
-
|
| 46 |
-
Capability: `query`.
|
| 47 |
-
|
| 48 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 49 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 50 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 51 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 52 |
-
|
| 53 |
-
### Optional per-parent Top-N optimization
|
| 54 |
-
|
| 55 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 56 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 57 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 58 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 59 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 60 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 61 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 62 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 63 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 64 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 65 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 66 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-customer_order.status.md
DELETED
|
@@ -1,72 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Query Field Assist — `customer_order.status`
|
| 4 |
-
|
| 5 |
-
KSML entity: `Customer Order`
|
| 6 |
-
KSML field: `Order Status`
|
| 7 |
-
Type: `Order Status`
|
| 8 |
-
|
| 9 |
-
| Capability | Generated API |
|
| 10 |
-
| --- | --- |
|
| 11 |
-
| Select | `selectStatusWith(request)`` |
|
| 12 |
-
| Filter identity | `withStatusIs(id)`, `withStatusIn(ids)` |
|
| 13 |
-
| Filter nested request | `withStatusMatching(request)`, `withoutStatusMatching(request)` |
|
| 14 |
-
| Constant | `withStatusIs()` |
|
| 15 |
-
| Constant | `withStatusIs()` |
|
| 16 |
-
| Constant | `withStatusIs()` |
|
| 17 |
-
| Group | `groupByStatus()`, `groupByStatusAs(alias)` |
|
| 18 |
-
| Facet | `facetByStatusAs(name, request, includeAllFacets)` |
|
| 19 |
-
Execution requires `comment(...)`, `purpose(...)`, and exactly one `context`.
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
---
|
| 23 |
-
|
| 24 |
-
## TeaQL seven-language assist contract
|
| 25 |
-
|
| 26 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 27 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 28 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 29 |
-
|
| 30 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 31 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 32 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 33 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 34 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 35 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 36 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 37 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 38 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 39 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 40 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 41 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 42 |
-
- If the required operation is absent after current entity/action and required field
|
| 43 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 44 |
-
generated library as a fallback.
|
| 45 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 46 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 47 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 48 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 49 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 50 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 51 |
-
|
| 52 |
-
Capability: `query`.
|
| 53 |
-
|
| 54 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 55 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 56 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 57 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 58 |
-
|
| 59 |
-
### Optional per-parent Top-N optimization
|
| 60 |
-
|
| 61 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 62 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 63 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 64 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 65 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 66 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 67 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 68 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 69 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 70 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 71 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 72 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-order_item.md
DELETED
|
@@ -1,97 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Query `Order Item`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.orderItemsWithMinimalFields()`
|
| 6 |
-
entry point. Trusted runtime and policy state comes only from `UserContext`.
|
| 7 |
-
|
| 8 |
-
```typescript
|
| 9 |
-
import { Q } from './Q';
|
| 10 |
-
import { OrderItem } from './models/OrderItem';
|
| 11 |
-
import { SmartList, UserContext } from '../teaql-ts';
|
| 12 |
-
|
| 13 |
-
export async function queryOrderItemById(
|
| 14 |
-
context: UserContext,
|
| 15 |
-
entityId: string,
|
| 16 |
-
): Promise<SmartList<OrderItem>> {
|
| 17 |
-
return Q.orderItemsWithMinimalFields()
|
| 18 |
-
.withIdIs(entityId)
|
| 19 |
-
.orderByIdAscending()
|
| 20 |
-
.limit(20)
|
| 21 |
-
.comment('what: load the requested Order Item row')
|
| 22 |
-
.purpose('why: serve the authorized Order Item view')
|
| 23 |
-
.executeForList(context);
|
| 24 |
-
}
|
| 25 |
-
```
|
| 26 |
-
|
| 27 |
-
Compile and execute this source unchanged. Use only generated projection,
|
| 28 |
-
predicate, ordering, and relation-selection APIs. Missing or blank intent,
|
| 29 |
-
unknown fields, unbounded reads, and trusted-context inputs must fail. Use generated
|
| 30 |
-
relation loading rather than handwritten child-query loops; never guess a plural.
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
## Field-specific Query Assist
|
| 34 |
-
|
| 35 |
-
Use the canonical KSML field name from this list. Do not substitute a language member name, JSON name, or database column.
|
| 36 |
-
|
| 37 |
-
| KSML field | Type | Field help |
|
| 38 |
-
| --- | --- | --- |
|
| 39 |
-
| `id` | `id` | `typescript-assist-query/order_item.id` |
|
| 40 |
-
| `customer_order` | `relation<customer_order>` | `typescript-assist-query/order_item.customer_order` |
|
| 41 |
-
| `product_name` | `string` | `typescript-assist-query/order_item.product_name` |
|
| 42 |
-
| `quantity` | `integer` | `typescript-assist-query/order_item.quantity` |
|
| 43 |
-
| `unit_price` | `number` | `typescript-assist-query/order_item.unit_price` |
|
| 44 |
-
| `version` | `version` | `typescript-assist-query/order_item.version` |
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
---
|
| 48 |
-
|
| 49 |
-
## TeaQL seven-language assist contract
|
| 50 |
-
|
| 51 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 52 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 53 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 54 |
-
|
| 55 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 56 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 57 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 58 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 59 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 60 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 61 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 62 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 63 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 64 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 65 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 66 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 67 |
-
- If the required operation is absent after current entity/action and required field
|
| 68 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 69 |
-
generated library as a fallback.
|
| 70 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 71 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 72 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 73 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 74 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 75 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 76 |
-
|
| 77 |
-
Capability: `query`.
|
| 78 |
-
|
| 79 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 80 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 81 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 82 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 83 |
-
|
| 84 |
-
### Optional per-parent Top-N optimization
|
| 85 |
-
|
| 86 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 87 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 88 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 89 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 90 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 91 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 92 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 93 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 94 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 95 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 96 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 97 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-order_status.customer_order_list.md
DELETED
|
@@ -1,66 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# Query Reverse-Relation Assist — `order_status.customer_order_list`
|
| 4 |
-
|
| 5 |
-
KSML entity: `order_status`
|
| 6 |
-
Derived reverse relation: `customer_order_list`
|
| 7 |
-
Child entity: `customer_order`
|
| 8 |
-
|
| 9 |
-
| Capability | Generated API |
|
| 10 |
-
| --- | --- |
|
| 11 |
-
| Select | `.selectCustomerOrderListWith(Q.customerOrdersWithMinimalFields())` |
|
| 12 |
-
|
| 13 |
-
Reverse relations are model-derived and never perform an implicit database query. Select the relation explicitly before expression access. Apply query methods before the executable purpose stage, then execute with exactly one trusted context.
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
---
|
| 17 |
-
|
| 18 |
-
## TeaQL seven-language assist contract
|
| 19 |
-
|
| 20 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 21 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 22 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 23 |
-
|
| 24 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 25 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 26 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 27 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 28 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 29 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 30 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 31 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 32 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 33 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 34 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 35 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 36 |
-
- If the required operation is absent after current entity/action and required field
|
| 37 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 38 |
-
generated library as a fallback.
|
| 39 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 40 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 41 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 42 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 43 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 44 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 45 |
-
|
| 46 |
-
Capability: `query`.
|
| 47 |
-
|
| 48 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 49 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 50 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 51 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 52 |
-
|
| 53 |
-
### Optional per-parent Top-N optimization
|
| 54 |
-
|
| 55 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 56 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 57 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 58 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 59 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 60 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 61 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 62 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 63 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 64 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 65 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 66 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/assist/query-order_status.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
| 1 |
-
<!-- ephemeral -->
|
| 2 |
-
|
| 3 |
-
# TypeScript Assist — Query `Order Status`
|
| 4 |
-
|
| 5 |
-
Use the exact generated `Q.orderStatusesWithMinimalFields()`
|
| 6 |
-
entry point. Trusted runtime and policy state comes only from `UserContext`.
|
| 7 |
-
|
| 8 |
-
```typescript
|
| 9 |
-
import { Q } from './Q';
|
| 10 |
-
import { OrderStatus } from './models/OrderStatus';
|
| 11 |
-
import { SmartList, UserContext } from '../teaql-ts';
|
| 12 |
-
|
| 13 |
-
export async function queryOrderStatusById(
|
| 14 |
-
context: UserContext,
|
| 15 |
-
entityId: string,
|
| 16 |
-
): Promise<SmartList<OrderStatus>> {
|
| 17 |
-
return Q.orderStatusesWithMinimalFields()
|
| 18 |
-
.withIdIs(entityId)
|
| 19 |
-
.orderByIdAscending()
|
| 20 |
-
.limit(20)
|
| 21 |
-
.comment('what: load the requested Order Status row')
|
| 22 |
-
.purpose('why: serve the authorized Order Status view')
|
| 23 |
-
.executeForList(context);
|
| 24 |
-
}
|
| 25 |
-
```
|
| 26 |
-
|
| 27 |
-
Compile and execute this source unchanged. Use only generated projection,
|
| 28 |
-
predicate, ordering, and relation-selection APIs. Missing or blank intent,
|
| 29 |
-
unknown fields, unbounded reads, and trusted-context inputs must fail. Use generated
|
| 30 |
-
relation loading rather than handwritten child-query loops; never guess a plural.
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
## Field-specific Query Assist
|
| 34 |
-
|
| 35 |
-
Use the canonical KSML field name from this list. Do not substitute a language member name, JSON name, or database column.
|
| 36 |
-
|
| 37 |
-
| KSML field | Type | Field help |
|
| 38 |
-
| --- | --- | --- |
|
| 39 |
-
| `platform` | `relation<platform>` | `typescript-assist-query/order_status.platform` |
|
| 40 |
-
| `id` | `id` | `typescript-assist-query/order_status.id` |
|
| 41 |
-
| `name` | `string` | `typescript-assist-query/order_status.name` |
|
| 42 |
-
| `code` | `string` | `typescript-assist-query/order_status.code` |
|
| 43 |
-
| `color` | `string` | `typescript-assist-query/order_status.color` |
|
| 44 |
-
| `display_order` | `integer` | `typescript-assist-query/order_status.display_order` |
|
| 45 |
-
| `version` | `version` | `typescript-assist-query/order_status.version` |
|
| 46 |
-
|
| 47 |
-
Generated reverse relations are derived from referencing KSML fields. Use their exact generated location for relation selection and access:
|
| 48 |
-
|
| 49 |
-
| Generated reverse relation | Child entity | Field help |
|
| 50 |
-
| --- | --- | --- |
|
| 51 |
-
| `customer_order_list` | `customer_order` | `typescript-assist-query/order_status.customer_order_list` |
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
---
|
| 55 |
-
|
| 56 |
-
## TeaQL seven-language assist contract
|
| 57 |
-
|
| 58 |
-
Apply the verified Rust semantic ceiling while using only the exact TYPESCRIPT generated and
|
| 59 |
-
runtime APIs. Discover APIs through the generated application AGENTS.md and progressive
|
| 60 |
-
model-aware Assist. Do not inspect generated domain-library source.
|
| 61 |
-
|
| 62 |
-
- Do not create plurals by appending `s` or `es`; use the centralized generated plural.
|
| 63 |
-
- Human and non-human entities use different generated predicate vocabularies. Preserve
|
| 64 |
-
forms such as “who are active” and “whose email is”; never infer them from English.
|
| 65 |
-
- Configure filters, projection, paging, and other query options before `purpose(...)`.
|
| 66 |
-
Comment may appear anywhere in the chain. Purpose enters the executable stage; execution
|
| 67 |
-
requires both values, but comment does not have to immediately precede purpose.
|
| 68 |
-
- Every execute/list/stream and every save accepts exactly one context argument:
|
| 69 |
-
`UserContext`. Name that argument `context`, never `runtime`; data services and global
|
| 70 |
-
policy are injected when the context is built. Reserve `runtime` for process-level
|
| 71 |
-
runtime ownership, provider/pool setup, and module assembly.
|
| 72 |
-
- Tenant, merchant, identity, permissions, request policy, purpose policy, hard limit,
|
| 73 |
-
and continuous-page cursor policy come only from trusted context, never dynamic JSON or TFP.
|
| 74 |
-
- If the required operation is absent after current entity/action and required field
|
| 75 |
-
Assist, stop that path and report MISSING_ASSIST. Do not guess an API or search the
|
| 76 |
-
generated library as a fallback.
|
| 77 |
-
- Create each application-owned source file once. After its first compile attempt,
|
| 78 |
-
repair only the smallest block identified by the exact compiler or test diagnostic.
|
| 79 |
-
Preserve unrelated code; do not rewrite the complete file as an error-recovery loop.
|
| 80 |
-
- Before a repair that would replace more than 25% of an existing application file,
|
| 81 |
-
stop and report LARGE_REWRITE_REQUEST with the file, exact diagnostic, reason, and
|
| 82 |
-
estimated scope. Initial creation and model-driven regeneration are not repairs.
|
| 83 |
-
|
| 84 |
-
Capability: `query`.
|
| 85 |
-
|
| 86 |
-
- Use generated projection, relation, predicate, sort, and aggregate APIs; never
|
| 87 |
-
concatenate application SQL or silently ignore an unsupported filter.
|
| 88 |
-
- Rows, record count, facets, and aggregates must share the same active filter.
|
| 89 |
-
- Add negative tests for missing purpose/comment and forbidden dynamic fields.
|
| 90 |
-
|
| 91 |
-
### Optional per-parent Top-N optimization
|
| 92 |
-
|
| 93 |
-
- Configure `topNProbeParentThreshold(threshold)` on the nested child request before its intent/execution
|
| 94 |
-
stage. Use the field-specific relation Assist for the exact generated selector.
|
| 95 |
-
- Give the child a per-parent limit and deterministic ordering with an ID tie-breaker;
|
| 96 |
-
bound the parent query separately. A single-parent detail query is not batch Top-N.
|
| 97 |
-
- Server providers default to a window query (`threshold = 0`). A positive threshold
|
| 98 |
-
permits bounded probes only when the already-loaded parent count is at or below it;
|
| 99 |
-
above it, use the window plan. SQLite uses its internal AlwaysProbe policy by default.
|
| 100 |
-
- Measure before opting in. Do not infer a threshold from table size or execute COUNT
|
| 101 |
-
or statistics queries to choose a plan. Keep an index on foreign key + sort + ID.
|
| 102 |
-
- Inspect selected-plan, parent-count, per-parent-limit and probe-count telemetry.
|
| 103 |
-
Runtime-managed probes are not application-owned N+1 loops; neither strategy changes
|
| 104 |
-
authorization, loaded-state semantics or the required comment/purpose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/index.html
DELETED
|
@@ -1,44 +0,0 @@
|
|
| 1 |
-
<!doctype html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
<head>
|
| 4 |
-
<meta charset="UTF-8" />
|
| 5 |
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
| 6 |
-
<link rel="icon" href="data:," />
|
| 7 |
-
<title>TeaQL browser order TraceChain</title>
|
| 8 |
-
</head>
|
| 9 |
-
<body>
|
| 10 |
-
<main>
|
| 11 |
-
<p class="eyebrow">GENERATED Q + E · SQLITE/WASM · NO BACKEND</p>
|
| 12 |
-
<h1>Order query evidence</h1>
|
| 13 |
-
<p>One filtered page, named total, status facets and bounded item previews.</p>
|
| 14 |
-
<p>Entirely browser-local · SQLite/WASM · Generated typed Order Q/E APIs</p>
|
| 15 |
-
<p><a href="https://github.com/teaql/teaql-ts">Runtime source</a> · <a href="https://huggingface.co/spaces/teaql/browser-sqlite-playground/tree/main/source">This demo's source snapshot</a></p>
|
| 16 |
-
<div class="controls">
|
| 17 |
-
<label><input id="persist" type="checkbox" /> Persist locally with OPFS <span id="opfs-note"></span></label>
|
| 18 |
-
<label><input id="logging" type="checkbox" checked /> Diagnostic logging</label>
|
| 19 |
-
<button id="reset">Reset demo data</button>
|
| 20 |
-
</div>
|
| 21 |
-
<label for="example">Example query</label>
|
| 22 |
-
<select id="example"><option value="filtered">Filtered order page</option><option value="all">All orders</option></select>
|
| 23 |
-
<label for="search">Editable generated TypeScript Q API, parsed into a controlled AST</label>
|
| 24 |
-
<textarea id="search" rows="20" spellcheck="false" style="display:block;width:100%;margin:12px 0"></textarea>
|
| 25 |
-
<p>No eval, imports, assignments or arbitrary JavaScript execution.</p>
|
| 26 |
-
<button id="query">Run query</button>
|
| 27 |
-
<button id="preset">Restore example search</button>
|
| 28 |
-
<p id="status">Starting SQLite/WASM…</p>
|
| 29 |
-
<h2>Response data and metadata</h2>
|
| 30 |
-
<pre id="result"></pre>
|
| 31 |
-
<h2>SQL execution evidence</h2>
|
| 32 |
-
<p>Time is the recorded execution duration. Identity is the request entity from tracePath, not a user or object ID.</p>
|
| 33 |
-
<div class="evidence-scroll">
|
| 34 |
-
<table class="evidence-table">
|
| 35 |
-
<thead><tr><th scope="col">Time</th><th scope="col">Identity</th><th scope="col">Trace chain</th><th scope="col">SQL</th></tr></thead>
|
| 36 |
-
<tbody id="evidence-rows"></tbody>
|
| 37 |
-
</table>
|
| 38 |
-
</div>
|
| 39 |
-
<details><summary>Business TraceChain as text</summary><pre id="trace"></pre></details>
|
| 40 |
-
<details><summary>Runtime metadata and physical tracePath</summary><pre id="sql"></pre></details>
|
| 41 |
-
</main>
|
| 42 |
-
<script type="module" src="/src/main.ts"></script>
|
| 43 |
-
</body>
|
| 44 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/order-model.xml
DELETED
|
@@ -1,21 +0,0 @@
|
|
| 1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
-
<root name="request-tree-order-service" org="example" data_service="sqlite" _module_key="root">
|
| 3 |
-
<platform _name="Commerce Platform" _module="Commerce" _module_key="commerce"
|
| 4 |
-
name="Commerce Test Platform"/>
|
| 5 |
-
<order_status _name="Order Status" _module="Commerce" _module_key="commerce"
|
| 6 |
-
platform="platform()" id="id()" name="string()" code="string()"
|
| 7 |
-
color="string()" display_order="1" _constant="true" _identifier="code">
|
| 8 |
-
<_value id="1001" name="New" code="NEW" color="#94A3B8" display_order="1"/>
|
| 9 |
-
<_value id="1002" name="Paid" code="PAID" color="#22C55E" display_order="2"/>
|
| 10 |
-
<_value id="1003" name="Cancelled" code="CANCELLED" color="#EF4444" display_order="3"/>
|
| 11 |
-
</order_status>
|
| 12 |
-
<customer _name="Customer" _module="Commerce" _module_key="commerce"
|
| 13 |
-
platform="platform()" name="North Star Retail"/>
|
| 14 |
-
<customer_order _name="Customer Order" _module="Commerce" _module_key="commerce"
|
| 15 |
-
customer="customer()" status="order_status()"
|
| 16 |
-
order_number="CO-20261011-000001" order_date="2026-10-11"
|
| 17 |
-
total_amount="100.00"/>
|
| 18 |
-
<order_item _name="Order Item" _module="Commerce" _module_key="commerce"
|
| 19 |
-
customer_order="customer_order()" product_name="Packing Box"
|
| 20 |
-
quantity="5" unit_price="20.00"/>
|
| 21 |
-
</root>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/package.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"name" : "request-tree-order-service-lib",
|
| 3 |
-
"version" : "1.0.0",
|
| 4 |
-
"description" : "Generated typescript library",
|
| 5 |
-
"main" : "src/generated/Q.ts",
|
| 6 |
-
"scripts" : {
|
| 7 |
-
"build" : "tsc --noEmit"
|
| 8 |
-
},
|
| 9 |
-
"dependencies" : {
|
| 10 |
-
"teaql-ts" : "file:../../.."
|
| 11 |
-
},
|
| 12 |
-
"devDependencies" : {
|
| 13 |
-
"typescript" : "^5.0.0"
|
| 14 |
-
}
|
| 15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated-bootstrap.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
| 1 |
-
import { UserContext } from './teaql-ts';
|
| 2 |
-
import { Q } from './generated/Q';
|
| 3 |
-
import { Platform } from './generated/models/Platform';
|
| 4 |
-
import { OrderStatus } from './generated/models/OrderStatus';
|
| 5 |
-
|
| 6 |
-
/** @internal Generated typed Mutation bootstrap; never call from application code. */
|
| 7 |
-
export async function ensureGeneratedBootstrap(context: UserContext): Promise<void> {
|
| 8 |
-
let domainRoot = (await Q.platforms().withIdIs('1').comment('what: locate generated Domain Root').purpose('why: idempotent runtime bootstrap').executeForList(context))[0];
|
| 9 |
-
if (!domainRoot) {
|
| 10 |
-
domainRoot = Platform.teaqlBootstrapNew('1');
|
| 11 |
-
domainRoot.updateName("Commerce Test Platform");
|
| 12 |
-
await domainRoot.auditAs('create generated Domain Root Platform').save(context);
|
| 13 |
-
}
|
| 14 |
-
context.withActiveRoot({ entity: 'Platform', id: domainRoot.id! });
|
| 15 |
-
let constantOrderStatus1001 = (await Q.orderStatuses().withIdIs("1001").comment('what: locate generated constant OrderStatus(1001)').purpose('why: idempotent runtime bootstrap').executeForList(context))[0];
|
| 16 |
-
if (!constantOrderStatus1001) {
|
| 17 |
-
constantOrderStatus1001 = OrderStatus.teaqlBootstrapNew("1001");
|
| 18 |
-
constantOrderStatus1001.updatePlatform(domainRoot);
|
| 19 |
-
constantOrderStatus1001.updateName("New");
|
| 20 |
-
constantOrderStatus1001.updateCode("NEW");
|
| 21 |
-
constantOrderStatus1001.updateColor("#94A3B8");
|
| 22 |
-
constantOrderStatus1001.updateDisplayOrder(1);
|
| 23 |
-
await constantOrderStatus1001.auditAs('create model constant OrderStatus(1001)').save(context);
|
| 24 |
-
} else {
|
| 25 |
-
let changed = false;
|
| 26 |
-
if (String((constantOrderStatus1001.platform as any)?.id ?? constantOrderStatus1001.platform) !== String(domainRoot.id)) { constantOrderStatus1001.updatePlatform(domainRoot); changed = true; }
|
| 27 |
-
if (constantOrderStatus1001.name !== "New") { constantOrderStatus1001.updateName("New"); changed = true; }
|
| 28 |
-
if (constantOrderStatus1001.code !== "NEW") { constantOrderStatus1001.updateCode("NEW"); changed = true; }
|
| 29 |
-
if (constantOrderStatus1001.color !== "#94A3B8") { constantOrderStatus1001.updateColor("#94A3B8"); changed = true; }
|
| 30 |
-
if (constantOrderStatus1001.displayOrder !== 1) { constantOrderStatus1001.updateDisplayOrder(1); changed = true; }
|
| 31 |
-
if (changed) await constantOrderStatus1001.auditAs('reconcile model constant OrderStatus(1001)').save(context);
|
| 32 |
-
}
|
| 33 |
-
let constantOrderStatus1002 = (await Q.orderStatuses().withIdIs("1002").comment('what: locate generated constant OrderStatus(1002)').purpose('why: idempotent runtime bootstrap').executeForList(context))[0];
|
| 34 |
-
if (!constantOrderStatus1002) {
|
| 35 |
-
constantOrderStatus1002 = OrderStatus.teaqlBootstrapNew("1002");
|
| 36 |
-
constantOrderStatus1002.updatePlatform(domainRoot);
|
| 37 |
-
constantOrderStatus1002.updateName("Paid");
|
| 38 |
-
constantOrderStatus1002.updateCode("PAID");
|
| 39 |
-
constantOrderStatus1002.updateColor("#22C55E");
|
| 40 |
-
constantOrderStatus1002.updateDisplayOrder(2);
|
| 41 |
-
await constantOrderStatus1002.auditAs('create model constant OrderStatus(1002)').save(context);
|
| 42 |
-
} else {
|
| 43 |
-
let changed = false;
|
| 44 |
-
if (String((constantOrderStatus1002.platform as any)?.id ?? constantOrderStatus1002.platform) !== String(domainRoot.id)) { constantOrderStatus1002.updatePlatform(domainRoot); changed = true; }
|
| 45 |
-
if (constantOrderStatus1002.name !== "Paid") { constantOrderStatus1002.updateName("Paid"); changed = true; }
|
| 46 |
-
if (constantOrderStatus1002.code !== "PAID") { constantOrderStatus1002.updateCode("PAID"); changed = true; }
|
| 47 |
-
if (constantOrderStatus1002.color !== "#22C55E") { constantOrderStatus1002.updateColor("#22C55E"); changed = true; }
|
| 48 |
-
if (constantOrderStatus1002.displayOrder !== 2) { constantOrderStatus1002.updateDisplayOrder(2); changed = true; }
|
| 49 |
-
if (changed) await constantOrderStatus1002.auditAs('reconcile model constant OrderStatus(1002)').save(context);
|
| 50 |
-
}
|
| 51 |
-
let constantOrderStatus1003 = (await Q.orderStatuses().withIdIs("1003").comment('what: locate generated constant OrderStatus(1003)').purpose('why: idempotent runtime bootstrap').executeForList(context))[0];
|
| 52 |
-
if (!constantOrderStatus1003) {
|
| 53 |
-
constantOrderStatus1003 = OrderStatus.teaqlBootstrapNew("1003");
|
| 54 |
-
constantOrderStatus1003.updatePlatform(domainRoot);
|
| 55 |
-
constantOrderStatus1003.updateName("Cancelled");
|
| 56 |
-
constantOrderStatus1003.updateCode("CANCELLED");
|
| 57 |
-
constantOrderStatus1003.updateColor("#EF4444");
|
| 58 |
-
constantOrderStatus1003.updateDisplayOrder(3);
|
| 59 |
-
await constantOrderStatus1003.auditAs('create model constant OrderStatus(1003)').save(context);
|
| 60 |
-
} else {
|
| 61 |
-
let changed = false;
|
| 62 |
-
if (String((constantOrderStatus1003.platform as any)?.id ?? constantOrderStatus1003.platform) !== String(domainRoot.id)) { constantOrderStatus1003.updatePlatform(domainRoot); changed = true; }
|
| 63 |
-
if (constantOrderStatus1003.name !== "Cancelled") { constantOrderStatus1003.updateName("Cancelled"); changed = true; }
|
| 64 |
-
if (constantOrderStatus1003.code !== "CANCELLED") { constantOrderStatus1003.updateCode("CANCELLED"); changed = true; }
|
| 65 |
-
if (constantOrderStatus1003.color !== "#EF4444") { constantOrderStatus1003.updateColor("#EF4444"); changed = true; }
|
| 66 |
-
if (constantOrderStatus1003.displayOrder !== 3) { constantOrderStatus1003.updateDisplayOrder(3); changed = true; }
|
| 67 |
-
if (changed) await constantOrderStatus1003.auditAs('reconcile model constant OrderStatus(1003)').save(context);
|
| 68 |
-
}
|
| 69 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated-search-models.ts
DELETED
|
@@ -1,124 +0,0 @@
|
|
| 1 |
-
import type { GeneratedSearchModel } from "teaql-ts";
|
| 2 |
-
|
| 3 |
-
/** Generated trusted naming/type metadata. No query execution or authorization lives here. */
|
| 4 |
-
export const GENERATED_SEARCH_MODELS: Readonly<Record<string, GeneratedSearchModel>> = Object.freeze({
|
| 5 |
-
"Platform": Object.freeze({
|
| 6 |
-
fields: Object.freeze({
|
| 7 |
-
"id": "integer" as const,
|
| 8 |
-
"name": "string" as const,
|
| 9 |
-
"version": "integer" as const,
|
| 10 |
-
}),
|
| 11 |
-
queryFields: Object.freeze({
|
| 12 |
-
"id": "id",
|
| 13 |
-
"name": "name",
|
| 14 |
-
"version": "version",
|
| 15 |
-
}),
|
| 16 |
-
relations: Object.freeze({
|
| 17 |
-
"orderStatusList": "OrderStatus",
|
| 18 |
-
"customerList": "Customer",
|
| 19 |
-
}),
|
| 20 |
-
}),
|
| 21 |
-
"OrderStatus": Object.freeze({
|
| 22 |
-
fields: Object.freeze({
|
| 23 |
-
"platform": "integer" as const,
|
| 24 |
-
"id": "integer" as const,
|
| 25 |
-
"name": "string" as const,
|
| 26 |
-
"code": "string" as const,
|
| 27 |
-
"color": "string" as const,
|
| 28 |
-
"display_order": "integer" as const,
|
| 29 |
-
"displayOrder": "integer" as const,
|
| 30 |
-
"version": "integer" as const,
|
| 31 |
-
}),
|
| 32 |
-
queryFields: Object.freeze({
|
| 33 |
-
"platform": "platform",
|
| 34 |
-
"id": "id",
|
| 35 |
-
"name": "name",
|
| 36 |
-
"code": "code",
|
| 37 |
-
"color": "color",
|
| 38 |
-
"display_order": "displayOrder",
|
| 39 |
-
"displayOrder": "displayOrder",
|
| 40 |
-
"version": "version",
|
| 41 |
-
}),
|
| 42 |
-
relations: Object.freeze({
|
| 43 |
-
"platform": "Platform",
|
| 44 |
-
"customerOrderList": "CustomerOrder",
|
| 45 |
-
}),
|
| 46 |
-
}),
|
| 47 |
-
"Customer": Object.freeze({
|
| 48 |
-
fields: Object.freeze({
|
| 49 |
-
"id": "integer" as const,
|
| 50 |
-
"platform": "integer" as const,
|
| 51 |
-
"name": "string" as const,
|
| 52 |
-
"version": "integer" as const,
|
| 53 |
-
}),
|
| 54 |
-
queryFields: Object.freeze({
|
| 55 |
-
"id": "id",
|
| 56 |
-
"platform": "platform",
|
| 57 |
-
"name": "name",
|
| 58 |
-
"version": "version",
|
| 59 |
-
}),
|
| 60 |
-
relations: Object.freeze({
|
| 61 |
-
"platform": "Platform",
|
| 62 |
-
"customerOrderList": "CustomerOrder",
|
| 63 |
-
}),
|
| 64 |
-
}),
|
| 65 |
-
"CustomerOrder": Object.freeze({
|
| 66 |
-
fields: Object.freeze({
|
| 67 |
-
"id": "integer" as const,
|
| 68 |
-
"customer": "integer" as const,
|
| 69 |
-
"status": "integer" as const,
|
| 70 |
-
"order_number": "string" as const,
|
| 71 |
-
"orderNumber": "string" as const,
|
| 72 |
-
"order_date": "date" as const,
|
| 73 |
-
"orderDate": "date" as const,
|
| 74 |
-
"total_amount": "decimal" as const,
|
| 75 |
-
"totalAmount": "decimal" as const,
|
| 76 |
-
"version": "integer" as const,
|
| 77 |
-
}),
|
| 78 |
-
queryFields: Object.freeze({
|
| 79 |
-
"id": "id",
|
| 80 |
-
"customer": "customer",
|
| 81 |
-
"status": "status",
|
| 82 |
-
"order_number": "orderNumber",
|
| 83 |
-
"orderNumber": "orderNumber",
|
| 84 |
-
"order_date": "orderDate",
|
| 85 |
-
"orderDate": "orderDate",
|
| 86 |
-
"total_amount": "totalAmount",
|
| 87 |
-
"totalAmount": "totalAmount",
|
| 88 |
-
"version": "version",
|
| 89 |
-
}),
|
| 90 |
-
relations: Object.freeze({
|
| 91 |
-
"customer": "Customer",
|
| 92 |
-
"status": "OrderStatus",
|
| 93 |
-
"orderItemList": "OrderItem",
|
| 94 |
-
}),
|
| 95 |
-
}),
|
| 96 |
-
"OrderItem": Object.freeze({
|
| 97 |
-
fields: Object.freeze({
|
| 98 |
-
"id": "integer" as const,
|
| 99 |
-
"customer_order": "integer" as const,
|
| 100 |
-
"customerOrder": "integer" as const,
|
| 101 |
-
"product_name": "string" as const,
|
| 102 |
-
"productName": "string" as const,
|
| 103 |
-
"quantity": "integer" as const,
|
| 104 |
-
"unit_price": "decimal" as const,
|
| 105 |
-
"unitPrice": "decimal" as const,
|
| 106 |
-
"version": "integer" as const,
|
| 107 |
-
}),
|
| 108 |
-
queryFields: Object.freeze({
|
| 109 |
-
"id": "id",
|
| 110 |
-
"customer_order": "customerOrder",
|
| 111 |
-
"customerOrder": "customerOrder",
|
| 112 |
-
"product_name": "productName",
|
| 113 |
-
"productName": "productName",
|
| 114 |
-
"quantity": "quantity",
|
| 115 |
-
"unit_price": "unitPrice",
|
| 116 |
-
"unitPrice": "unitPrice",
|
| 117 |
-
"version": "version",
|
| 118 |
-
}),
|
| 119 |
-
relations: Object.freeze({
|
| 120 |
-
"customer_order": "CustomerOrder",
|
| 121 |
-
"customerOrder": "CustomerOrder",
|
| 122 |
-
}),
|
| 123 |
-
}),
|
| 124 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/E.ts
DELETED
|
@@ -1,859 +0,0 @@
|
|
| 1 |
-
import { Platform } from './models/Platform';
|
| 2 |
-
import { OrderStatus } from './models/OrderStatus';
|
| 3 |
-
import { Customer } from './models/Customer';
|
| 4 |
-
import { CustomerOrder } from './models/CustomerOrder';
|
| 5 |
-
import { OrderItem } from './models/OrderItem';
|
| 6 |
-
|
| 7 |
-
export class TeaQLNotLoadedError extends Error {
|
| 8 |
-
readonly details: Record<string, unknown>;
|
| 9 |
-
|
| 10 |
-
constructor(
|
| 11 |
-
readonly root: string,
|
| 12 |
-
readonly accessPath: string,
|
| 13 |
-
readonly breakPoint: string,
|
| 14 |
-
) {
|
| 15 |
-
const suggestedFix = `select${breakPoint.charAt(0).toUpperCase()}${breakPoint.slice(1)}(...)`;
|
| 16 |
-
const details = {
|
| 17 |
-
error: 'TeaQLNotLoadedError',
|
| 18 |
-
root,
|
| 19 |
-
accessPath: accessPath.split('.'),
|
| 20 |
-
breakPoint,
|
| 21 |
-
missingPreload: [breakPoint],
|
| 22 |
-
suggestedFix,
|
| 23 |
-
severity: 'error',
|
| 24 |
-
humanMessage: `访问 ${root}.${accessPath} 时缺少预加载。请在查询中加入 ${suggestedFix}`,
|
| 25 |
-
};
|
| 26 |
-
super(JSON.stringify(details));
|
| 27 |
-
this.name = 'TeaQLNotLoadedError';
|
| 28 |
-
this.details = details;
|
| 29 |
-
}
|
| 30 |
-
}
|
| 31 |
-
|
| 32 |
-
function expressionPath(prefix: string, field: string): string {
|
| 33 |
-
return prefix ? `${prefix}.${field}` : field;
|
| 34 |
-
}
|
| 35 |
-
|
| 36 |
-
export class ValueExpression<T> {
|
| 37 |
-
constructor(
|
| 38 |
-
private readonly value: T | null | undefined,
|
| 39 |
-
private readonly present = true,
|
| 40 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 41 |
-
) {}
|
| 42 |
-
|
| 43 |
-
static missing<T>(): ValueExpression<T> {
|
| 44 |
-
return new ValueExpression<T>(undefined, false);
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
static notLoaded<T>(error: TeaQLNotLoadedError): ValueExpression<T> {
|
| 48 |
-
return new ValueExpression<T>(undefined, false, error);
|
| 49 |
-
}
|
| 50 |
-
|
| 51 |
-
eval(): T | null | undefined {
|
| 52 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 53 |
-
return this.present ? this.value : undefined;
|
| 54 |
-
}
|
| 55 |
-
|
| 56 |
-
isPresent(): boolean {
|
| 57 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 58 |
-
return this.present;
|
| 59 |
-
}
|
| 60 |
-
|
| 61 |
-
orElse(fallback: T): T {
|
| 62 |
-
const value = this.eval();
|
| 63 |
-
return this.present && value != null ? value : fallback;
|
| 64 |
-
}
|
| 65 |
-
}
|
| 66 |
-
|
| 67 |
-
export class PlatformExpression {
|
| 68 |
-
constructor(
|
| 69 |
-
private readonly value: Platform | null | undefined,
|
| 70 |
-
private readonly root = 'Platform(null)',
|
| 71 |
-
private readonly path = '',
|
| 72 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 73 |
-
) {}
|
| 74 |
-
|
| 75 |
-
eval(): Platform | null | undefined {
|
| 76 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 77 |
-
return this.value;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
id(): ValueExpression<string> {
|
| 81 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 82 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 83 |
-
const path = expressionPath(this.path, 'id');
|
| 84 |
-
if (!this.value.isLoaded('id')) {
|
| 85 |
-
return ValueExpression.notLoaded<string>(
|
| 86 |
-
new TeaQLNotLoadedError(this.root, path, 'id'),
|
| 87 |
-
);
|
| 88 |
-
}
|
| 89 |
-
return new ValueExpression<string>(this.value.id);
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
name(): ValueExpression<string> {
|
| 93 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 94 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 95 |
-
const path = expressionPath(this.path, 'name');
|
| 96 |
-
if (!this.value.isLoaded('name')) {
|
| 97 |
-
return ValueExpression.notLoaded<string>(
|
| 98 |
-
new TeaQLNotLoadedError(this.root, path, 'name'),
|
| 99 |
-
);
|
| 100 |
-
}
|
| 101 |
-
return new ValueExpression<string>(this.value.name);
|
| 102 |
-
}
|
| 103 |
-
|
| 104 |
-
version(): ValueExpression<number> {
|
| 105 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 106 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 107 |
-
const path = expressionPath(this.path, 'version');
|
| 108 |
-
if (!this.value.isLoaded('version')) {
|
| 109 |
-
return ValueExpression.notLoaded<number>(
|
| 110 |
-
new TeaQLNotLoadedError(this.root, path, 'version'),
|
| 111 |
-
);
|
| 112 |
-
}
|
| 113 |
-
return new ValueExpression<number>(this.value.version);
|
| 114 |
-
}
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
orderStatusList(): OrderStatusListExpression {
|
| 119 |
-
const path = expressionPath(this.path, 'orderStatusList');
|
| 120 |
-
if (this.notLoaded) {
|
| 121 |
-
return new OrderStatusListExpression([], this.root, path, false, this.notLoaded);
|
| 122 |
-
}
|
| 123 |
-
if (!this.value) return OrderStatusListExpression.missing(this.root, path);
|
| 124 |
-
if (!this.value.isLoaded('orderStatusList')) {
|
| 125 |
-
return new OrderStatusListExpression([], this.root, path, false,
|
| 126 |
-
new TeaQLNotLoadedError(this.root, path, 'orderStatusList'));
|
| 127 |
-
}
|
| 128 |
-
return new OrderStatusListExpression(
|
| 129 |
-
this.value.orderStatusList(), this.root, path,
|
| 130 |
-
);
|
| 131 |
-
}
|
| 132 |
-
|
| 133 |
-
customerList(): CustomerListExpression {
|
| 134 |
-
const path = expressionPath(this.path, 'customerList');
|
| 135 |
-
if (this.notLoaded) {
|
| 136 |
-
return new CustomerListExpression([], this.root, path, false, this.notLoaded);
|
| 137 |
-
}
|
| 138 |
-
if (!this.value) return CustomerListExpression.missing(this.root, path);
|
| 139 |
-
if (!this.value.isLoaded('customerList')) {
|
| 140 |
-
return new CustomerListExpression([], this.root, path, false,
|
| 141 |
-
new TeaQLNotLoadedError(this.root, path, 'customerList'));
|
| 142 |
-
}
|
| 143 |
-
return new CustomerListExpression(
|
| 144 |
-
this.value.customerList(), this.root, path,
|
| 145 |
-
);
|
| 146 |
-
}
|
| 147 |
-
}
|
| 148 |
-
|
| 149 |
-
export class OrderStatusExpression {
|
| 150 |
-
constructor(
|
| 151 |
-
private readonly value: OrderStatus | null | undefined,
|
| 152 |
-
private readonly root = 'OrderStatus(null)',
|
| 153 |
-
private readonly path = '',
|
| 154 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 155 |
-
) {}
|
| 156 |
-
|
| 157 |
-
eval(): OrderStatus | null | undefined {
|
| 158 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 159 |
-
return this.value;
|
| 160 |
-
}
|
| 161 |
-
|
| 162 |
-
id(): ValueExpression<string> {
|
| 163 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 164 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 165 |
-
const path = expressionPath(this.path, 'id');
|
| 166 |
-
if (!this.value.isLoaded('id')) {
|
| 167 |
-
return ValueExpression.notLoaded<string>(
|
| 168 |
-
new TeaQLNotLoadedError(this.root, path, 'id'),
|
| 169 |
-
);
|
| 170 |
-
}
|
| 171 |
-
return new ValueExpression<string>(this.value.id);
|
| 172 |
-
}
|
| 173 |
-
|
| 174 |
-
name(): ValueExpression<string> {
|
| 175 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 176 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 177 |
-
const path = expressionPath(this.path, 'name');
|
| 178 |
-
if (!this.value.isLoaded('name')) {
|
| 179 |
-
return ValueExpression.notLoaded<string>(
|
| 180 |
-
new TeaQLNotLoadedError(this.root, path, 'name'),
|
| 181 |
-
);
|
| 182 |
-
}
|
| 183 |
-
return new ValueExpression<string>(this.value.name);
|
| 184 |
-
}
|
| 185 |
-
|
| 186 |
-
code(): ValueExpression<string> {
|
| 187 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 188 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 189 |
-
const path = expressionPath(this.path, 'code');
|
| 190 |
-
if (!this.value.isLoaded('code')) {
|
| 191 |
-
return ValueExpression.notLoaded<string>(
|
| 192 |
-
new TeaQLNotLoadedError(this.root, path, 'code'),
|
| 193 |
-
);
|
| 194 |
-
}
|
| 195 |
-
return new ValueExpression<string>(this.value.code);
|
| 196 |
-
}
|
| 197 |
-
|
| 198 |
-
color(): ValueExpression<string> {
|
| 199 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 200 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 201 |
-
const path = expressionPath(this.path, 'color');
|
| 202 |
-
if (!this.value.isLoaded('color')) {
|
| 203 |
-
return ValueExpression.notLoaded<string>(
|
| 204 |
-
new TeaQLNotLoadedError(this.root, path, 'color'),
|
| 205 |
-
);
|
| 206 |
-
}
|
| 207 |
-
return new ValueExpression<string>(this.value.color);
|
| 208 |
-
}
|
| 209 |
-
|
| 210 |
-
displayOrder(): ValueExpression<number> {
|
| 211 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 212 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 213 |
-
const path = expressionPath(this.path, 'displayOrder');
|
| 214 |
-
if (!this.value.isLoaded('displayOrder')) {
|
| 215 |
-
return ValueExpression.notLoaded<number>(
|
| 216 |
-
new TeaQLNotLoadedError(this.root, path, 'displayOrder'),
|
| 217 |
-
);
|
| 218 |
-
}
|
| 219 |
-
return new ValueExpression<number>(this.value.displayOrder);
|
| 220 |
-
}
|
| 221 |
-
|
| 222 |
-
version(): ValueExpression<number> {
|
| 223 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 224 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 225 |
-
const path = expressionPath(this.path, 'version');
|
| 226 |
-
if (!this.value.isLoaded('version')) {
|
| 227 |
-
return ValueExpression.notLoaded<number>(
|
| 228 |
-
new TeaQLNotLoadedError(this.root, path, 'version'),
|
| 229 |
-
);
|
| 230 |
-
}
|
| 231 |
-
return new ValueExpression<number>(this.value.version);
|
| 232 |
-
}
|
| 233 |
-
|
| 234 |
-
platformId(): ValueExpression<string | number> {
|
| 235 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string | number>(this.notLoaded);
|
| 236 |
-
if (!this.value) return ValueExpression.missing<string | number>();
|
| 237 |
-
const path = expressionPath(this.path, 'platform');
|
| 238 |
-
if (!this.value.isLoaded('platform')) {
|
| 239 |
-
return ValueExpression.notLoaded<string | number>(
|
| 240 |
-
new TeaQLNotLoadedError(this.root, path, 'platform'),
|
| 241 |
-
);
|
| 242 |
-
}
|
| 243 |
-
return new ValueExpression<string | number>(
|
| 244 |
-
this.value.platform as string | number | undefined,
|
| 245 |
-
);
|
| 246 |
-
}
|
| 247 |
-
|
| 248 |
-
platform(): PlatformExpression {
|
| 249 |
-
const path = expressionPath(this.path, 'platform');
|
| 250 |
-
if (this.notLoaded) {
|
| 251 |
-
return new PlatformExpression(undefined, this.root, path, this.notLoaded);
|
| 252 |
-
}
|
| 253 |
-
if (!this.value) return new PlatformExpression(undefined, this.root, path);
|
| 254 |
-
if (!this.value.isLoaded('platform')) {
|
| 255 |
-
return new PlatformExpression(undefined, this.root, path,
|
| 256 |
-
new TeaQLNotLoadedError(this.root, path, 'platform'));
|
| 257 |
-
}
|
| 258 |
-
const relation = this.value.platform;
|
| 259 |
-
const target = relation == null
|
| 260 |
-
? undefined
|
| 261 |
-
: relation instanceof Platform
|
| 262 |
-
? relation
|
| 263 |
-
: Platform.fromRecord({ id: relation });
|
| 264 |
-
return new PlatformExpression(target, this.root, path);
|
| 265 |
-
}
|
| 266 |
-
|
| 267 |
-
customerOrderList(): CustomerOrderListExpression {
|
| 268 |
-
const path = expressionPath(this.path, 'customerOrderList');
|
| 269 |
-
if (this.notLoaded) {
|
| 270 |
-
return new CustomerOrderListExpression([], this.root, path, false, this.notLoaded);
|
| 271 |
-
}
|
| 272 |
-
if (!this.value) return CustomerOrderListExpression.missing(this.root, path);
|
| 273 |
-
if (!this.value.isLoaded('customerOrderList')) {
|
| 274 |
-
return new CustomerOrderListExpression([], this.root, path, false,
|
| 275 |
-
new TeaQLNotLoadedError(this.root, path, 'customerOrderList'));
|
| 276 |
-
}
|
| 277 |
-
return new CustomerOrderListExpression(
|
| 278 |
-
this.value.customerOrderList(), this.root, path,
|
| 279 |
-
);
|
| 280 |
-
}
|
| 281 |
-
}
|
| 282 |
-
|
| 283 |
-
export class CustomerExpression {
|
| 284 |
-
constructor(
|
| 285 |
-
private readonly value: Customer | null | undefined,
|
| 286 |
-
private readonly root = 'Customer(null)',
|
| 287 |
-
private readonly path = '',
|
| 288 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 289 |
-
) {}
|
| 290 |
-
|
| 291 |
-
eval(): Customer | null | undefined {
|
| 292 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 293 |
-
return this.value;
|
| 294 |
-
}
|
| 295 |
-
|
| 296 |
-
id(): ValueExpression<string> {
|
| 297 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 298 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 299 |
-
const path = expressionPath(this.path, 'id');
|
| 300 |
-
if (!this.value.isLoaded('id')) {
|
| 301 |
-
return ValueExpression.notLoaded<string>(
|
| 302 |
-
new TeaQLNotLoadedError(this.root, path, 'id'),
|
| 303 |
-
);
|
| 304 |
-
}
|
| 305 |
-
return new ValueExpression<string>(this.value.id);
|
| 306 |
-
}
|
| 307 |
-
|
| 308 |
-
name(): ValueExpression<string> {
|
| 309 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 310 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 311 |
-
const path = expressionPath(this.path, 'name');
|
| 312 |
-
if (!this.value.isLoaded('name')) {
|
| 313 |
-
return ValueExpression.notLoaded<string>(
|
| 314 |
-
new TeaQLNotLoadedError(this.root, path, 'name'),
|
| 315 |
-
);
|
| 316 |
-
}
|
| 317 |
-
return new ValueExpression<string>(this.value.name);
|
| 318 |
-
}
|
| 319 |
-
|
| 320 |
-
version(): ValueExpression<number> {
|
| 321 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 322 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 323 |
-
const path = expressionPath(this.path, 'version');
|
| 324 |
-
if (!this.value.isLoaded('version')) {
|
| 325 |
-
return ValueExpression.notLoaded<number>(
|
| 326 |
-
new TeaQLNotLoadedError(this.root, path, 'version'),
|
| 327 |
-
);
|
| 328 |
-
}
|
| 329 |
-
return new ValueExpression<number>(this.value.version);
|
| 330 |
-
}
|
| 331 |
-
|
| 332 |
-
platformId(): ValueExpression<string | number> {
|
| 333 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string | number>(this.notLoaded);
|
| 334 |
-
if (!this.value) return ValueExpression.missing<string | number>();
|
| 335 |
-
const path = expressionPath(this.path, 'platform');
|
| 336 |
-
if (!this.value.isLoaded('platform')) {
|
| 337 |
-
return ValueExpression.notLoaded<string | number>(
|
| 338 |
-
new TeaQLNotLoadedError(this.root, path, 'platform'),
|
| 339 |
-
);
|
| 340 |
-
}
|
| 341 |
-
return new ValueExpression<string | number>(
|
| 342 |
-
this.value.platform as string | number | undefined,
|
| 343 |
-
);
|
| 344 |
-
}
|
| 345 |
-
|
| 346 |
-
platform(): PlatformExpression {
|
| 347 |
-
const path = expressionPath(this.path, 'platform');
|
| 348 |
-
if (this.notLoaded) {
|
| 349 |
-
return new PlatformExpression(undefined, this.root, path, this.notLoaded);
|
| 350 |
-
}
|
| 351 |
-
if (!this.value) return new PlatformExpression(undefined, this.root, path);
|
| 352 |
-
if (!this.value.isLoaded('platform')) {
|
| 353 |
-
return new PlatformExpression(undefined, this.root, path,
|
| 354 |
-
new TeaQLNotLoadedError(this.root, path, 'platform'));
|
| 355 |
-
}
|
| 356 |
-
const relation = this.value.platform;
|
| 357 |
-
const target = relation == null
|
| 358 |
-
? undefined
|
| 359 |
-
: relation instanceof Platform
|
| 360 |
-
? relation
|
| 361 |
-
: Platform.fromRecord({ id: relation });
|
| 362 |
-
return new PlatformExpression(target, this.root, path);
|
| 363 |
-
}
|
| 364 |
-
|
| 365 |
-
customerOrderList(): CustomerOrderListExpression {
|
| 366 |
-
const path = expressionPath(this.path, 'customerOrderList');
|
| 367 |
-
if (this.notLoaded) {
|
| 368 |
-
return new CustomerOrderListExpression([], this.root, path, false, this.notLoaded);
|
| 369 |
-
}
|
| 370 |
-
if (!this.value) return CustomerOrderListExpression.missing(this.root, path);
|
| 371 |
-
if (!this.value.isLoaded('customerOrderList')) {
|
| 372 |
-
return new CustomerOrderListExpression([], this.root, path, false,
|
| 373 |
-
new TeaQLNotLoadedError(this.root, path, 'customerOrderList'));
|
| 374 |
-
}
|
| 375 |
-
return new CustomerOrderListExpression(
|
| 376 |
-
this.value.customerOrderList(), this.root, path,
|
| 377 |
-
);
|
| 378 |
-
}
|
| 379 |
-
}
|
| 380 |
-
|
| 381 |
-
export class CustomerOrderExpression {
|
| 382 |
-
constructor(
|
| 383 |
-
private readonly value: CustomerOrder | null | undefined,
|
| 384 |
-
private readonly root = 'CustomerOrder(null)',
|
| 385 |
-
private readonly path = '',
|
| 386 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 387 |
-
) {}
|
| 388 |
-
|
| 389 |
-
eval(): CustomerOrder | null | undefined {
|
| 390 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 391 |
-
return this.value;
|
| 392 |
-
}
|
| 393 |
-
|
| 394 |
-
id(): ValueExpression<string> {
|
| 395 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 396 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 397 |
-
const path = expressionPath(this.path, 'id');
|
| 398 |
-
if (!this.value.isLoaded('id')) {
|
| 399 |
-
return ValueExpression.notLoaded<string>(
|
| 400 |
-
new TeaQLNotLoadedError(this.root, path, 'id'),
|
| 401 |
-
);
|
| 402 |
-
}
|
| 403 |
-
return new ValueExpression<string>(this.value.id);
|
| 404 |
-
}
|
| 405 |
-
|
| 406 |
-
orderNumber(): ValueExpression<string> {
|
| 407 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 408 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 409 |
-
const path = expressionPath(this.path, 'orderNumber');
|
| 410 |
-
if (!this.value.isLoaded('orderNumber')) {
|
| 411 |
-
return ValueExpression.notLoaded<string>(
|
| 412 |
-
new TeaQLNotLoadedError(this.root, path, 'orderNumber'),
|
| 413 |
-
);
|
| 414 |
-
}
|
| 415 |
-
return new ValueExpression<string>(this.value.orderNumber);
|
| 416 |
-
}
|
| 417 |
-
|
| 418 |
-
orderDate(): ValueExpression<string> {
|
| 419 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 420 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 421 |
-
const path = expressionPath(this.path, 'orderDate');
|
| 422 |
-
if (!this.value.isLoaded('orderDate')) {
|
| 423 |
-
return ValueExpression.notLoaded<string>(
|
| 424 |
-
new TeaQLNotLoadedError(this.root, path, 'orderDate'),
|
| 425 |
-
);
|
| 426 |
-
}
|
| 427 |
-
return new ValueExpression<string>(this.value.orderDate);
|
| 428 |
-
}
|
| 429 |
-
|
| 430 |
-
totalAmount(): ValueExpression<number> {
|
| 431 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 432 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 433 |
-
const path = expressionPath(this.path, 'totalAmount');
|
| 434 |
-
if (!this.value.isLoaded('totalAmount')) {
|
| 435 |
-
return ValueExpression.notLoaded<number>(
|
| 436 |
-
new TeaQLNotLoadedError(this.root, path, 'totalAmount'),
|
| 437 |
-
);
|
| 438 |
-
}
|
| 439 |
-
return new ValueExpression<number>(this.value.totalAmount);
|
| 440 |
-
}
|
| 441 |
-
|
| 442 |
-
version(): ValueExpression<number> {
|
| 443 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 444 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 445 |
-
const path = expressionPath(this.path, 'version');
|
| 446 |
-
if (!this.value.isLoaded('version')) {
|
| 447 |
-
return ValueExpression.notLoaded<number>(
|
| 448 |
-
new TeaQLNotLoadedError(this.root, path, 'version'),
|
| 449 |
-
);
|
| 450 |
-
}
|
| 451 |
-
return new ValueExpression<number>(this.value.version);
|
| 452 |
-
}
|
| 453 |
-
|
| 454 |
-
customerId(): ValueExpression<string | number> {
|
| 455 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string | number>(this.notLoaded);
|
| 456 |
-
if (!this.value) return ValueExpression.missing<string | number>();
|
| 457 |
-
const path = expressionPath(this.path, 'customer');
|
| 458 |
-
if (!this.value.isLoaded('customer')) {
|
| 459 |
-
return ValueExpression.notLoaded<string | number>(
|
| 460 |
-
new TeaQLNotLoadedError(this.root, path, 'customer'),
|
| 461 |
-
);
|
| 462 |
-
}
|
| 463 |
-
return new ValueExpression<string | number>(
|
| 464 |
-
this.value.customer as string | number | undefined,
|
| 465 |
-
);
|
| 466 |
-
}
|
| 467 |
-
|
| 468 |
-
statusId(): ValueExpression<string | number> {
|
| 469 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string | number>(this.notLoaded);
|
| 470 |
-
if (!this.value) return ValueExpression.missing<string | number>();
|
| 471 |
-
const path = expressionPath(this.path, 'status');
|
| 472 |
-
if (!this.value.isLoaded('status')) {
|
| 473 |
-
return ValueExpression.notLoaded<string | number>(
|
| 474 |
-
new TeaQLNotLoadedError(this.root, path, 'status'),
|
| 475 |
-
);
|
| 476 |
-
}
|
| 477 |
-
return new ValueExpression<string | number>(
|
| 478 |
-
this.value.status as string | number | undefined,
|
| 479 |
-
);
|
| 480 |
-
}
|
| 481 |
-
|
| 482 |
-
customer(): CustomerExpression {
|
| 483 |
-
const path = expressionPath(this.path, 'customer');
|
| 484 |
-
if (this.notLoaded) {
|
| 485 |
-
return new CustomerExpression(undefined, this.root, path, this.notLoaded);
|
| 486 |
-
}
|
| 487 |
-
if (!this.value) return new CustomerExpression(undefined, this.root, path);
|
| 488 |
-
if (!this.value.isLoaded('customer')) {
|
| 489 |
-
return new CustomerExpression(undefined, this.root, path,
|
| 490 |
-
new TeaQLNotLoadedError(this.root, path, 'customer'));
|
| 491 |
-
}
|
| 492 |
-
const relation = this.value.customer;
|
| 493 |
-
const target = relation == null
|
| 494 |
-
? undefined
|
| 495 |
-
: relation instanceof Customer
|
| 496 |
-
? relation
|
| 497 |
-
: Customer.fromRecord({ id: relation });
|
| 498 |
-
return new CustomerExpression(target, this.root, path);
|
| 499 |
-
}
|
| 500 |
-
|
| 501 |
-
status(): OrderStatusExpression {
|
| 502 |
-
const path = expressionPath(this.path, 'status');
|
| 503 |
-
if (this.notLoaded) {
|
| 504 |
-
return new OrderStatusExpression(undefined, this.root, path, this.notLoaded);
|
| 505 |
-
}
|
| 506 |
-
if (!this.value) return new OrderStatusExpression(undefined, this.root, path);
|
| 507 |
-
if (!this.value.isLoaded('status')) {
|
| 508 |
-
return new OrderStatusExpression(undefined, this.root, path,
|
| 509 |
-
new TeaQLNotLoadedError(this.root, path, 'status'));
|
| 510 |
-
}
|
| 511 |
-
const relation = this.value.status;
|
| 512 |
-
const target = relation == null
|
| 513 |
-
? undefined
|
| 514 |
-
: relation instanceof OrderStatus
|
| 515 |
-
? relation
|
| 516 |
-
: OrderStatus.fromRecord({ id: relation });
|
| 517 |
-
return new OrderStatusExpression(target, this.root, path);
|
| 518 |
-
}
|
| 519 |
-
|
| 520 |
-
orderItemList(): OrderItemListExpression {
|
| 521 |
-
const path = expressionPath(this.path, 'orderItemList');
|
| 522 |
-
if (this.notLoaded) {
|
| 523 |
-
return new OrderItemListExpression([], this.root, path, false, this.notLoaded);
|
| 524 |
-
}
|
| 525 |
-
if (!this.value) return OrderItemListExpression.missing(this.root, path);
|
| 526 |
-
if (!this.value.isLoaded('orderItemList')) {
|
| 527 |
-
return new OrderItemListExpression([], this.root, path, false,
|
| 528 |
-
new TeaQLNotLoadedError(this.root, path, 'orderItemList'));
|
| 529 |
-
}
|
| 530 |
-
return new OrderItemListExpression(
|
| 531 |
-
this.value.orderItemList(), this.root, path,
|
| 532 |
-
);
|
| 533 |
-
}
|
| 534 |
-
}
|
| 535 |
-
|
| 536 |
-
export class OrderItemExpression {
|
| 537 |
-
constructor(
|
| 538 |
-
private readonly value: OrderItem | null | undefined,
|
| 539 |
-
private readonly root = 'OrderItem(null)',
|
| 540 |
-
private readonly path = '',
|
| 541 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 542 |
-
) {}
|
| 543 |
-
|
| 544 |
-
eval(): OrderItem | null | undefined {
|
| 545 |
-
if (this.notLoaded) throw this.notLoaded;
|
| 546 |
-
return this.value;
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
id(): ValueExpression<string> {
|
| 550 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 551 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 552 |
-
const path = expressionPath(this.path, 'id');
|
| 553 |
-
if (!this.value.isLoaded('id')) {
|
| 554 |
-
return ValueExpression.notLoaded<string>(
|
| 555 |
-
new TeaQLNotLoadedError(this.root, path, 'id'),
|
| 556 |
-
);
|
| 557 |
-
}
|
| 558 |
-
return new ValueExpression<string>(this.value.id);
|
| 559 |
-
}
|
| 560 |
-
|
| 561 |
-
productName(): ValueExpression<string> {
|
| 562 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string>(this.notLoaded);
|
| 563 |
-
if (!this.value) return ValueExpression.missing<string>();
|
| 564 |
-
const path = expressionPath(this.path, 'productName');
|
| 565 |
-
if (!this.value.isLoaded('productName')) {
|
| 566 |
-
return ValueExpression.notLoaded<string>(
|
| 567 |
-
new TeaQLNotLoadedError(this.root, path, 'productName'),
|
| 568 |
-
);
|
| 569 |
-
}
|
| 570 |
-
return new ValueExpression<string>(this.value.productName);
|
| 571 |
-
}
|
| 572 |
-
|
| 573 |
-
quantity(): ValueExpression<number> {
|
| 574 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 575 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 576 |
-
const path = expressionPath(this.path, 'quantity');
|
| 577 |
-
if (!this.value.isLoaded('quantity')) {
|
| 578 |
-
return ValueExpression.notLoaded<number>(
|
| 579 |
-
new TeaQLNotLoadedError(this.root, path, 'quantity'),
|
| 580 |
-
);
|
| 581 |
-
}
|
| 582 |
-
return new ValueExpression<number>(this.value.quantity);
|
| 583 |
-
}
|
| 584 |
-
|
| 585 |
-
unitPrice(): ValueExpression<number> {
|
| 586 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 587 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 588 |
-
const path = expressionPath(this.path, 'unitPrice');
|
| 589 |
-
if (!this.value.isLoaded('unitPrice')) {
|
| 590 |
-
return ValueExpression.notLoaded<number>(
|
| 591 |
-
new TeaQLNotLoadedError(this.root, path, 'unitPrice'),
|
| 592 |
-
);
|
| 593 |
-
}
|
| 594 |
-
return new ValueExpression<number>(this.value.unitPrice);
|
| 595 |
-
}
|
| 596 |
-
|
| 597 |
-
version(): ValueExpression<number> {
|
| 598 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 599 |
-
if (!this.value) return ValueExpression.missing<number>();
|
| 600 |
-
const path = expressionPath(this.path, 'version');
|
| 601 |
-
if (!this.value.isLoaded('version')) {
|
| 602 |
-
return ValueExpression.notLoaded<number>(
|
| 603 |
-
new TeaQLNotLoadedError(this.root, path, 'version'),
|
| 604 |
-
);
|
| 605 |
-
}
|
| 606 |
-
return new ValueExpression<number>(this.value.version);
|
| 607 |
-
}
|
| 608 |
-
|
| 609 |
-
customerOrderId(): ValueExpression<string | number> {
|
| 610 |
-
if (this.notLoaded) return ValueExpression.notLoaded<string | number>(this.notLoaded);
|
| 611 |
-
if (!this.value) return ValueExpression.missing<string | number>();
|
| 612 |
-
const path = expressionPath(this.path, 'customerOrder');
|
| 613 |
-
if (!this.value.isLoaded('customerOrder')) {
|
| 614 |
-
return ValueExpression.notLoaded<string | number>(
|
| 615 |
-
new TeaQLNotLoadedError(this.root, path, 'customerOrder'),
|
| 616 |
-
);
|
| 617 |
-
}
|
| 618 |
-
return new ValueExpression<string | number>(
|
| 619 |
-
this.value.customerOrder as string | number | undefined,
|
| 620 |
-
);
|
| 621 |
-
}
|
| 622 |
-
|
| 623 |
-
customerOrder(): CustomerOrderExpression {
|
| 624 |
-
const path = expressionPath(this.path, 'customerOrder');
|
| 625 |
-
if (this.notLoaded) {
|
| 626 |
-
return new CustomerOrderExpression(undefined, this.root, path, this.notLoaded);
|
| 627 |
-
}
|
| 628 |
-
if (!this.value) return new CustomerOrderExpression(undefined, this.root, path);
|
| 629 |
-
if (!this.value.isLoaded('customerOrder')) {
|
| 630 |
-
return new CustomerOrderExpression(undefined, this.root, path,
|
| 631 |
-
new TeaQLNotLoadedError(this.root, path, 'customerOrder'));
|
| 632 |
-
}
|
| 633 |
-
const relation = this.value.customerOrder;
|
| 634 |
-
const target = relation == null
|
| 635 |
-
? undefined
|
| 636 |
-
: relation instanceof CustomerOrder
|
| 637 |
-
? relation
|
| 638 |
-
: CustomerOrder.fromRecord({ id: relation });
|
| 639 |
-
return new CustomerOrderExpression(target, this.root, path);
|
| 640 |
-
}
|
| 641 |
-
|
| 642 |
-
}
|
| 643 |
-
|
| 644 |
-
export class PlatformListExpression {
|
| 645 |
-
constructor(
|
| 646 |
-
private readonly items: readonly Platform[],
|
| 647 |
-
private readonly root = 'Platform(null)',
|
| 648 |
-
private readonly path = '',
|
| 649 |
-
private readonly present = true,
|
| 650 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 651 |
-
) {}
|
| 652 |
-
|
| 653 |
-
static missing(root?: string, path = ''): PlatformListExpression {
|
| 654 |
-
return new PlatformListExpression([], root, path, false);
|
| 655 |
-
}
|
| 656 |
-
|
| 657 |
-
size(): ValueExpression<number> {
|
| 658 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 659 |
-
return this.present
|
| 660 |
-
? new ValueExpression<number>(this.items.length)
|
| 661 |
-
: ValueExpression.missing<number>();
|
| 662 |
-
}
|
| 663 |
-
|
| 664 |
-
first(): PlatformExpression {
|
| 665 |
-
return this.get(0);
|
| 666 |
-
}
|
| 667 |
-
|
| 668 |
-
get(index: number): PlatformExpression {
|
| 669 |
-
const itemPath = expressionPath(this.path, `get(${index})`);
|
| 670 |
-
if (this.notLoaded) {
|
| 671 |
-
return new PlatformExpression(undefined, this.root, itemPath, this.notLoaded);
|
| 672 |
-
}
|
| 673 |
-
return !this.present || index < 0 || index >= this.items.length
|
| 674 |
-
? new PlatformExpression(undefined, this.root, itemPath)
|
| 675 |
-
: new PlatformExpression(this.items[index], this.root, itemPath);
|
| 676 |
-
}
|
| 677 |
-
}
|
| 678 |
-
|
| 679 |
-
export class OrderStatusListExpression {
|
| 680 |
-
constructor(
|
| 681 |
-
private readonly items: readonly OrderStatus[],
|
| 682 |
-
private readonly root = 'OrderStatus(null)',
|
| 683 |
-
private readonly path = '',
|
| 684 |
-
private readonly present = true,
|
| 685 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 686 |
-
) {}
|
| 687 |
-
|
| 688 |
-
static missing(root?: string, path = ''): OrderStatusListExpression {
|
| 689 |
-
return new OrderStatusListExpression([], root, path, false);
|
| 690 |
-
}
|
| 691 |
-
|
| 692 |
-
size(): ValueExpression<number> {
|
| 693 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 694 |
-
return this.present
|
| 695 |
-
? new ValueExpression<number>(this.items.length)
|
| 696 |
-
: ValueExpression.missing<number>();
|
| 697 |
-
}
|
| 698 |
-
|
| 699 |
-
first(): OrderStatusExpression {
|
| 700 |
-
return this.get(0);
|
| 701 |
-
}
|
| 702 |
-
|
| 703 |
-
get(index: number): OrderStatusExpression {
|
| 704 |
-
const itemPath = expressionPath(this.path, `get(${index})`);
|
| 705 |
-
if (this.notLoaded) {
|
| 706 |
-
return new OrderStatusExpression(undefined, this.root, itemPath, this.notLoaded);
|
| 707 |
-
}
|
| 708 |
-
return !this.present || index < 0 || index >= this.items.length
|
| 709 |
-
? new OrderStatusExpression(undefined, this.root, itemPath)
|
| 710 |
-
: new OrderStatusExpression(this.items[index], this.root, itemPath);
|
| 711 |
-
}
|
| 712 |
-
}
|
| 713 |
-
|
| 714 |
-
export class CustomerListExpression {
|
| 715 |
-
constructor(
|
| 716 |
-
private readonly items: readonly Customer[],
|
| 717 |
-
private readonly root = 'Customer(null)',
|
| 718 |
-
private readonly path = '',
|
| 719 |
-
private readonly present = true,
|
| 720 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 721 |
-
) {}
|
| 722 |
-
|
| 723 |
-
static missing(root?: string, path = ''): CustomerListExpression {
|
| 724 |
-
return new CustomerListExpression([], root, path, false);
|
| 725 |
-
}
|
| 726 |
-
|
| 727 |
-
size(): ValueExpression<number> {
|
| 728 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 729 |
-
return this.present
|
| 730 |
-
? new ValueExpression<number>(this.items.length)
|
| 731 |
-
: ValueExpression.missing<number>();
|
| 732 |
-
}
|
| 733 |
-
|
| 734 |
-
first(): CustomerExpression {
|
| 735 |
-
return this.get(0);
|
| 736 |
-
}
|
| 737 |
-
|
| 738 |
-
get(index: number): CustomerExpression {
|
| 739 |
-
const itemPath = expressionPath(this.path, `get(${index})`);
|
| 740 |
-
if (this.notLoaded) {
|
| 741 |
-
return new CustomerExpression(undefined, this.root, itemPath, this.notLoaded);
|
| 742 |
-
}
|
| 743 |
-
return !this.present || index < 0 || index >= this.items.length
|
| 744 |
-
? new CustomerExpression(undefined, this.root, itemPath)
|
| 745 |
-
: new CustomerExpression(this.items[index], this.root, itemPath);
|
| 746 |
-
}
|
| 747 |
-
}
|
| 748 |
-
|
| 749 |
-
export class CustomerOrderListExpression {
|
| 750 |
-
constructor(
|
| 751 |
-
private readonly items: readonly CustomerOrder[],
|
| 752 |
-
private readonly root = 'CustomerOrder(null)',
|
| 753 |
-
private readonly path = '',
|
| 754 |
-
private readonly present = true,
|
| 755 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 756 |
-
) {}
|
| 757 |
-
|
| 758 |
-
static missing(root?: string, path = ''): CustomerOrderListExpression {
|
| 759 |
-
return new CustomerOrderListExpression([], root, path, false);
|
| 760 |
-
}
|
| 761 |
-
|
| 762 |
-
size(): ValueExpression<number> {
|
| 763 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 764 |
-
return this.present
|
| 765 |
-
? new ValueExpression<number>(this.items.length)
|
| 766 |
-
: ValueExpression.missing<number>();
|
| 767 |
-
}
|
| 768 |
-
|
| 769 |
-
first(): CustomerOrderExpression {
|
| 770 |
-
return this.get(0);
|
| 771 |
-
}
|
| 772 |
-
|
| 773 |
-
get(index: number): CustomerOrderExpression {
|
| 774 |
-
const itemPath = expressionPath(this.path, `get(${index})`);
|
| 775 |
-
if (this.notLoaded) {
|
| 776 |
-
return new CustomerOrderExpression(undefined, this.root, itemPath, this.notLoaded);
|
| 777 |
-
}
|
| 778 |
-
return !this.present || index < 0 || index >= this.items.length
|
| 779 |
-
? new CustomerOrderExpression(undefined, this.root, itemPath)
|
| 780 |
-
: new CustomerOrderExpression(this.items[index], this.root, itemPath);
|
| 781 |
-
}
|
| 782 |
-
}
|
| 783 |
-
|
| 784 |
-
export class OrderItemListExpression {
|
| 785 |
-
constructor(
|
| 786 |
-
private readonly items: readonly OrderItem[],
|
| 787 |
-
private readonly root = 'OrderItem(null)',
|
| 788 |
-
private readonly path = '',
|
| 789 |
-
private readonly present = true,
|
| 790 |
-
private readonly notLoaded?: TeaQLNotLoadedError,
|
| 791 |
-
) {}
|
| 792 |
-
|
| 793 |
-
static missing(root?: string, path = ''): OrderItemListExpression {
|
| 794 |
-
return new OrderItemListExpression([], root, path, false);
|
| 795 |
-
}
|
| 796 |
-
|
| 797 |
-
size(): ValueExpression<number> {
|
| 798 |
-
if (this.notLoaded) return ValueExpression.notLoaded<number>(this.notLoaded);
|
| 799 |
-
return this.present
|
| 800 |
-
? new ValueExpression<number>(this.items.length)
|
| 801 |
-
: ValueExpression.missing<number>();
|
| 802 |
-
}
|
| 803 |
-
|
| 804 |
-
first(): OrderItemExpression {
|
| 805 |
-
return this.get(0);
|
| 806 |
-
}
|
| 807 |
-
|
| 808 |
-
get(index: number): OrderItemExpression {
|
| 809 |
-
const itemPath = expressionPath(this.path, `get(${index})`);
|
| 810 |
-
if (this.notLoaded) {
|
| 811 |
-
return new OrderItemExpression(undefined, this.root, itemPath, this.notLoaded);
|
| 812 |
-
}
|
| 813 |
-
return !this.present || index < 0 || index >= this.items.length
|
| 814 |
-
? new OrderItemExpression(undefined, this.root, itemPath)
|
| 815 |
-
: new OrderItemExpression(this.items[index], this.root, itemPath);
|
| 816 |
-
}
|
| 817 |
-
}
|
| 818 |
-
|
| 819 |
-
export class E {
|
| 820 |
-
static platform(
|
| 821 |
-
value: Platform | null | undefined,
|
| 822 |
-
): PlatformExpression {
|
| 823 |
-
return new PlatformExpression(
|
| 824 |
-
value, `Platform(id=${value?.id ?? 'null'})`,
|
| 825 |
-
);
|
| 826 |
-
}
|
| 827 |
-
|
| 828 |
-
static orderStatus(
|
| 829 |
-
value: OrderStatus | null | undefined,
|
| 830 |
-
): OrderStatusExpression {
|
| 831 |
-
return new OrderStatusExpression(
|
| 832 |
-
value, `OrderStatus(id=${value?.id ?? 'null'})`,
|
| 833 |
-
);
|
| 834 |
-
}
|
| 835 |
-
|
| 836 |
-
static customer(
|
| 837 |
-
value: Customer | null | undefined,
|
| 838 |
-
): CustomerExpression {
|
| 839 |
-
return new CustomerExpression(
|
| 840 |
-
value, `Customer(id=${value?.id ?? 'null'})`,
|
| 841 |
-
);
|
| 842 |
-
}
|
| 843 |
-
|
| 844 |
-
static customerOrder(
|
| 845 |
-
value: CustomerOrder | null | undefined,
|
| 846 |
-
): CustomerOrderExpression {
|
| 847 |
-
return new CustomerOrderExpression(
|
| 848 |
-
value, `CustomerOrder(id=${value?.id ?? 'null'})`,
|
| 849 |
-
);
|
| 850 |
-
}
|
| 851 |
-
|
| 852 |
-
static orderItem(
|
| 853 |
-
value: OrderItem | null | undefined,
|
| 854 |
-
): OrderItemExpression {
|
| 855 |
-
return new OrderItemExpression(
|
| 856 |
-
value, `OrderItem(id=${value?.id ?? 'null'})`,
|
| 857 |
-
);
|
| 858 |
-
}
|
| 859 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/Q.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
| 1 |
-
import { TeaQLClient } from '../teaql-ts';
|
| 2 |
-
import { PlatformRequest } from './requests/PlatformRequest';
|
| 3 |
-
import { OrderStatusRequest } from './requests/OrderStatusRequest';
|
| 4 |
-
import { CustomerRequest } from './requests/CustomerRequest';
|
| 5 |
-
import { CustomerOrderRequest } from './requests/CustomerOrderRequest';
|
| 6 |
-
import { OrderItemRequest } from './requests/OrderItemRequest';
|
| 7 |
-
|
| 8 |
-
export class Q {
|
| 9 |
-
static platforms(): PlatformRequest {
|
| 10 |
-
return new PlatformRequest(false);
|
| 11 |
-
}
|
| 12 |
-
|
| 13 |
-
static platformsWithMinimalFields(): PlatformRequest {
|
| 14 |
-
return new PlatformRequest(true);
|
| 15 |
-
}
|
| 16 |
-
static orderStatuses(): OrderStatusRequest {
|
| 17 |
-
return new OrderStatusRequest(false);
|
| 18 |
-
}
|
| 19 |
-
|
| 20 |
-
static orderStatusesWithMinimalFields(): OrderStatusRequest {
|
| 21 |
-
return new OrderStatusRequest(true);
|
| 22 |
-
}
|
| 23 |
-
static customers(): CustomerRequest {
|
| 24 |
-
return new CustomerRequest(false);
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
static customersWithMinimalFields(): CustomerRequest {
|
| 28 |
-
return new CustomerRequest(true);
|
| 29 |
-
}
|
| 30 |
-
static customerOrders(): CustomerOrderRequest {
|
| 31 |
-
return new CustomerOrderRequest(false);
|
| 32 |
-
}
|
| 33 |
-
|
| 34 |
-
static customerOrdersWithMinimalFields(): CustomerOrderRequest {
|
| 35 |
-
return new CustomerOrderRequest(true);
|
| 36 |
-
}
|
| 37 |
-
static orderItems(): OrderItemRequest {
|
| 38 |
-
return new OrderItemRequest(false);
|
| 39 |
-
}
|
| 40 |
-
|
| 41 |
-
static orderItemsWithMinimalFields(): OrderItemRequest {
|
| 42 |
-
return new OrderItemRequest(true);
|
| 43 |
-
}
|
| 44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/models/Customer.ts
DELETED
|
@@ -1,252 +0,0 @@
|
|
| 1 |
-
import { CheckException, EntityKey, EntityRoot, GraphMutationSession, LoadedScalarSnapshot, MutationIntent, MutationTraceScope, ObjectLocation, TeaQLDataService, UserContext } from '../../teaql-ts';
|
| 2 |
-
import { Platform } from './Platform';
|
| 3 |
-
import { CustomerOrder } from './CustomerOrder';
|
| 4 |
-
|
| 5 |
-
export class Customer {
|
| 6 |
-
private static teaqlTemporaryId = 0;
|
| 7 |
-
id?: string;
|
| 8 |
-
platform?: Platform | string;
|
| 9 |
-
name?: string;
|
| 10 |
-
version?: number;
|
| 11 |
-
|
| 12 |
-
constructor(init?: Partial<Customer>) {
|
| 13 |
-
Object.defineProperty(this, "_action", { value: init && init.id ? "Update" : "Create", writable: true, enumerable: false });
|
| 14 |
-
Object.defineProperty(this, "_comment", { value: undefined, writable: true, enumerable: false });
|
| 15 |
-
Object.defineProperty(this, "_fullyLoaded", { value: !init || !init.id, writable: true, enumerable: false });
|
| 16 |
-
Object.defineProperty(this, "_loadedFields", { value: new Set(Object.keys(init || {})), writable: true, enumerable: false });
|
| 17 |
-
Object.defineProperty(this, "_root", { value: new EntityRoot(), writable: true, enumerable: false });
|
| 18 |
-
Object.defineProperty(this, "_ledgerId", { value: init?.id ?? --Customer.teaqlTemporaryId, writable: true, enumerable: false });
|
| 19 |
-
Object.defineProperty(this, "_customerOrderList", { value: [], writable: true, enumerable: false });
|
| 20 |
-
if (init) {
|
| 21 |
-
const fields: Record<string, unknown> = { ...(init as Record<string, unknown>) };
|
| 22 |
-
delete fields["customerOrderList"];
|
| 23 |
-
Object.assign(this, fields);
|
| 24 |
-
if ((init as any).platform && typeof (init as any).platform === "object") {
|
| 25 |
-
this.platform = (init as any).platform instanceof Platform
|
| 26 |
-
? (init as any).platform
|
| 27 |
-
: Platform.fromRecord((init as any).platform);
|
| 28 |
-
this.markLoaded("platform");
|
| 29 |
-
}
|
| 30 |
-
if (Array.isArray((init as any).customerOrderList)) {
|
| 31 |
-
(this as any)._customerOrderList = (init as any).customerOrderList.map(
|
| 32 |
-
(child: unknown) => child instanceof CustomerOrder
|
| 33 |
-
? child
|
| 34 |
-
: CustomerOrder.fromRecord(child as Record<string, unknown>),
|
| 35 |
-
);
|
| 36 |
-
this.markLoaded("customerOrderList");
|
| 37 |
-
}
|
| 38 |
-
}
|
| 39 |
-
const key = this.teaqlEntityKey();
|
| 40 |
-
if ((this as any)._action === "Create") (this as any)._root.markAsNew(key);
|
| 41 |
-
else if ((this as any).version !== undefined) (this as any)._root.setOriginalVersion(key, Number((this as any).version));
|
| 42 |
-
}
|
| 43 |
-
|
| 44 |
-
private teaqlEntityKey(): EntityKey { return { entity: "Customer", id: (this as any)._ledgerId }; }
|
| 45 |
-
private teaqlAttachRoot(root: EntityRoot): this {
|
| 46 |
-
if ((this as any)._root !== root) { root.mergeFrom((this as any)._root); (this as any)._root = root; }
|
| 47 |
-
for (const child of (this as any)._customerOrderList) child.teaqlAttachRoot(root);
|
| 48 |
-
return this;
|
| 49 |
-
}
|
| 50 |
-
|
| 51 |
-
static fromRecord(record: Record<string, unknown>, root?: EntityRoot): Customer {
|
| 52 |
-
const entity = new Customer(record as Partial<Customer>);
|
| 53 |
-
return root ? entity.teaqlAttachRoot(root) : entity;
|
| 54 |
-
}
|
| 55 |
-
|
| 56 |
-
isLoaded(field: string): boolean {
|
| 57 |
-
return (this as any)._fullyLoaded || (this as any)._loadedFields.has(field);
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
markLoaded(...fields: string[]): this {
|
| 61 |
-
for (const field of fields) (this as any)._loadedFields.add(field);
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
markLoadedOnly(...fields: string[]): this {
|
| 66 |
-
(this as any)._fullyLoaded = false;
|
| 67 |
-
(this as any)._loadedFields = new Set(fields);
|
| 68 |
-
return this;
|
| 69 |
-
}
|
| 70 |
-
|
| 71 |
-
static refer(id: string | number): Customer {
|
| 72 |
-
return new Customer({ id: String(id) } as Partial<Customer>);
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
/** @internal Generated Runtime Module fixed-ID construction capability. */
|
| 76 |
-
static teaqlBootstrapNew(id: string | number): Customer {
|
| 77 |
-
return new Customer().updateId(String(id));
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
markForDeletion(): this {
|
| 81 |
-
(this as any)._action = "Delete";
|
| 82 |
-
(this as any)._root.markAsDeleted(this.teaqlEntityKey());
|
| 83 |
-
return this;
|
| 84 |
-
}
|
| 85 |
-
|
| 86 |
-
auditAs(comment: string): this {
|
| 87 |
-
if (!comment?.trim()) {
|
| 88 |
-
throw new Error("Security audit failure: auditAs() requires a non-empty reason");
|
| 89 |
-
}
|
| 90 |
-
(this as any)._comment = comment;
|
| 91 |
-
return this;
|
| 92 |
-
}
|
| 93 |
-
|
| 94 |
-
async save(context: UserContext): Promise<Customer> {
|
| 95 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 96 |
-
return service.executeGraphSave(new MutationIntent((this as any)._comment), async (graph) => {
|
| 97 |
-
this.teaqlPreflightGraph(context, service, graph);
|
| 98 |
-
return this.teaqlSaveWithinGraph(context, service, graph);
|
| 99 |
-
});
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
/** @internal Validates and fixes the complete graph before its first mutation. */
|
| 103 |
-
teaqlPreflightGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): void {
|
| 104 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 105 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 106 |
-
}
|
| 107 |
-
const action = (this as any)._action;
|
| 108 |
-
if (action === "Update") {
|
| 109 |
-
const notLoaded = [{ member: "id", canonical: "id" }, { member: "platform", canonical: "platform" }, { member: "name", canonical: "name" }, { member: "version", canonical: "version" }]
|
| 110 |
-
.find(field => !this.isLoaded(field.member));
|
| 111 |
-
if (notLoaded) {
|
| 112 |
-
throw new CheckException([{
|
| 113 |
-
ruleId: "invalid_type",
|
| 114 |
-
location: ObjectLocation.property(notLoaded.canonical),
|
| 115 |
-
message: "Mutation requires a fully loaded entity",
|
| 116 |
-
}]);
|
| 117 |
-
}
|
| 118 |
-
}
|
| 119 |
-
const request = graph.request({
|
| 120 |
-
entity: "Customer", action,
|
| 121 |
-
payload: action === "Update"
|
| 122 |
-
? (this as any)._root.change(this.teaqlEntityKey())
|
| 123 |
-
: this.teaqlMutationPayload(),
|
| 124 |
-
id: (this as any).id, version: (this as any).version,
|
| 125 |
-
comment: (this as any)._comment,
|
| 126 |
-
ledgerKey: this.teaqlEntityKey(), ledgerRoot: (this as any)._root,
|
| 127 |
-
}, parent, (this as any)._comment).withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 128 |
-
service.preflightMutation(request);
|
| 129 |
-
const scope = request.scopeFor(this.teaqlEntityKey());
|
| 130 |
-
for (const [index, child] of (this as any)._customerOrderList.entries()) {
|
| 131 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 132 |
-
child.updateCustomer(this);
|
| 133 |
-
try { child.teaqlPreflightGraph(context, service, graph, scope); }
|
| 134 |
-
catch (error) {
|
| 135 |
-
if (!(error instanceof CheckException)) throw error;
|
| 136 |
-
const prefix = ObjectLocation.property("customer_order_list").index(index);
|
| 137 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 138 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 139 |
-
})));
|
| 140 |
-
}
|
| 141 |
-
}
|
| 142 |
-
}
|
| 143 |
-
|
| 144 |
-
/** @internal Used by generated relation cascades inside the root graph transaction. */
|
| 145 |
-
async teaqlSaveWithinGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): Promise<Customer> {
|
| 146 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 147 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 148 |
-
}
|
| 149 |
-
const action = (this as any)._action;
|
| 150 |
-
const ledgerPayload = (this as any)._root.change(this.teaqlEntityKey());
|
| 151 |
-
const mutation = {
|
| 152 |
-
entity: "Customer",
|
| 153 |
-
action: (this as any)._action,
|
| 154 |
-
payload: action === "Update" ? ledgerPayload : this.teaqlMutationPayload(),
|
| 155 |
-
id: (this as any).id,
|
| 156 |
-
version: (this as any).version,
|
| 157 |
-
comment: (this as any)._comment
|
| 158 |
-
,ledgerKey: this.teaqlEntityKey()
|
| 159 |
-
,ledgerRoot: (this as any)._root
|
| 160 |
-
};
|
| 161 |
-
const request = graph.request(mutation, parent, (this as any)._comment)
|
| 162 |
-
.withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 163 |
-
const result = await service.executeMutation(request);
|
| 164 |
-
for (const [field, value] of Object.entries(mutation.payload as Record<string, unknown>)) {
|
| 165 |
-
if (field !== "id" && field !== "version") (this as any)._root.set(this.teaqlEntityKey(), field, value);
|
| 166 |
-
}
|
| 167 |
-
if (!result.persistedRecord) {
|
| 168 |
-
throw new Error("Mutation did not return the authoritative persisted record");
|
| 169 |
-
}
|
| 170 |
-
const rollbackState = {
|
| 171 |
-
payload: this.teaqlMutationPayload(),
|
| 172 |
-
ledgerId: (this as any)._ledgerId,
|
| 173 |
-
action: (this as any)._action,
|
| 174 |
-
loadedFields: new Set((this as any)._loadedFields),
|
| 175 |
-
fullyLoaded: (this as any)._fullyLoaded,
|
| 176 |
-
};
|
| 177 |
-
const oldKey = this.teaqlEntityKey();
|
| 178 |
-
Object.assign(this, result.persistedRecord);
|
| 179 |
-
(this as any)._ledgerId = (this as any).id ?? (this as any)._ledgerId;
|
| 180 |
-
const newKey = this.teaqlEntityKey();
|
| 181 |
-
(this as any)._root.rekey(oldKey, newKey);
|
| 182 |
-
service.afterGraphRollback(() => {
|
| 183 |
-
Object.assign(this, rollbackState.payload);
|
| 184 |
-
(this as any)._ledgerId = rollbackState.ledgerId;
|
| 185 |
-
(this as any)._action = rollbackState.action;
|
| 186 |
-
(this as any)._loadedFields = rollbackState.loadedFields;
|
| 187 |
-
(this as any)._fullyLoaded = rollbackState.fullyLoaded;
|
| 188 |
-
(this as any)._root.rekey(newKey, oldKey);
|
| 189 |
-
});
|
| 190 |
-
(this as any)._loadedFields = new Set(Object.keys(result.persistedRecord));
|
| 191 |
-
(this as any)._fullyLoaded = false;
|
| 192 |
-
if (mutation.action !== "Delete") (this as any)._action = "Update";
|
| 193 |
-
const scope = request.scopeFor(newKey);
|
| 194 |
-
for (const [index, child] of (this as any)._customerOrderList.entries()) {
|
| 195 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 196 |
-
child.updateCustomer(this);
|
| 197 |
-
try { await child.teaqlSaveWithinGraph(context, service, graph, scope); }
|
| 198 |
-
catch (error) {
|
| 199 |
-
if (!(error instanceof CheckException)) throw error;
|
| 200 |
-
const prefix = ObjectLocation.property("customer_order_list").index(index);
|
| 201 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 202 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 203 |
-
})));
|
| 204 |
-
}
|
| 205 |
-
}
|
| 206 |
-
service.afterGraphCommit(() => {
|
| 207 |
-
(this as any)._root.clearEntity(newKey);
|
| 208 |
-
if ((this as any).version !== undefined) (this as any)._root.acceptCommittedVersion(newKey, Number((this as any).version));
|
| 209 |
-
});
|
| 210 |
-
return this;
|
| 211 |
-
}
|
| 212 |
-
|
| 213 |
-
private teaqlMutationPayload(): Record<string, unknown> {
|
| 214 |
-
return {
|
| 215 |
-
"id": this.id,
|
| 216 |
-
"platform": this.platform,
|
| 217 |
-
"name": this.name,
|
| 218 |
-
"version": this.version
|
| 219 |
-
};
|
| 220 |
-
}
|
| 221 |
-
|
| 222 |
-
updateId(value: string): this {
|
| 223 |
-
this.id = value;
|
| 224 |
-
this.markLoaded("id");
|
| 225 |
-
(this as any)._root.set(this.teaqlEntityKey(), "id", value);
|
| 226 |
-
return this;
|
| 227 |
-
}
|
| 228 |
-
|
| 229 |
-
updateName(value: string): this {
|
| 230 |
-
this.name = value;
|
| 231 |
-
this.markLoaded("name");
|
| 232 |
-
(this as any)._root.set(this.teaqlEntityKey(), "name", value);
|
| 233 |
-
return this;
|
| 234 |
-
}
|
| 235 |
-
|
| 236 |
-
updateVersion(value: number): this {
|
| 237 |
-
this.version = value;
|
| 238 |
-
this.markLoaded("version");
|
| 239 |
-
(this as any)._root.set(this.teaqlEntityKey(), "version", value);
|
| 240 |
-
return this;
|
| 241 |
-
}
|
| 242 |
-
updatePlatform(value: any): this {
|
| 243 |
-
this.platform = value?.id ?? value;
|
| 244 |
-
this.markLoaded("platform");
|
| 245 |
-
(this as any)._root.set(this.teaqlEntityKey(), "platform", this.platform);
|
| 246 |
-
return this;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
customerOrderList(): CustomerOrder[] {
|
| 250 |
-
return (this as any)._customerOrderList;
|
| 251 |
-
}
|
| 252 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/models/CustomerOrder.ts
DELETED
|
@@ -1,305 +0,0 @@
|
|
| 1 |
-
import { CheckException, EntityKey, EntityRoot, GraphMutationSession, LoadedScalarSnapshot, MutationIntent, MutationTraceScope, ObjectLocation, TeaQLDataService, UserContext } from '../../teaql-ts';
|
| 2 |
-
import { Customer } from './Customer';
|
| 3 |
-
import { OrderStatus } from './OrderStatus';
|
| 4 |
-
import { OrderItem } from './OrderItem';
|
| 5 |
-
|
| 6 |
-
export class CustomerOrder {
|
| 7 |
-
private static teaqlTemporaryId = 0;
|
| 8 |
-
id?: string;
|
| 9 |
-
customer?: Customer | string;
|
| 10 |
-
status?: OrderStatus | string;
|
| 11 |
-
orderNumber?: string;
|
| 12 |
-
orderDate?: string;
|
| 13 |
-
totalAmount?: number;
|
| 14 |
-
version?: number;
|
| 15 |
-
|
| 16 |
-
constructor(init?: Partial<CustomerOrder>) {
|
| 17 |
-
Object.defineProperty(this, "_action", { value: init && init.id ? "Update" : "Create", writable: true, enumerable: false });
|
| 18 |
-
Object.defineProperty(this, "_comment", { value: undefined, writable: true, enumerable: false });
|
| 19 |
-
Object.defineProperty(this, "_fullyLoaded", { value: !init || !init.id, writable: true, enumerable: false });
|
| 20 |
-
Object.defineProperty(this, "_loadedFields", { value: new Set(Object.keys(init || {})), writable: true, enumerable: false });
|
| 21 |
-
Object.defineProperty(this, "_root", { value: new EntityRoot(), writable: true, enumerable: false });
|
| 22 |
-
Object.defineProperty(this, "_ledgerId", { value: init?.id ?? --CustomerOrder.teaqlTemporaryId, writable: true, enumerable: false });
|
| 23 |
-
Object.defineProperty(this, "_orderItemList", { value: [], writable: true, enumerable: false });
|
| 24 |
-
if (init) {
|
| 25 |
-
const fields: Record<string, unknown> = { ...(init as Record<string, unknown>) };
|
| 26 |
-
delete fields["orderItemList"];
|
| 27 |
-
Object.assign(this, fields);
|
| 28 |
-
if ((init as any).customer && typeof (init as any).customer === "object") {
|
| 29 |
-
this.customer = (init as any).customer instanceof Customer
|
| 30 |
-
? (init as any).customer
|
| 31 |
-
: Customer.fromRecord((init as any).customer);
|
| 32 |
-
this.markLoaded("customer");
|
| 33 |
-
}
|
| 34 |
-
if ((init as any).status && typeof (init as any).status === "object") {
|
| 35 |
-
this.status = (init as any).status instanceof OrderStatus
|
| 36 |
-
? (init as any).status
|
| 37 |
-
: OrderStatus.fromRecord((init as any).status);
|
| 38 |
-
this.markLoaded("status");
|
| 39 |
-
}
|
| 40 |
-
if (Array.isArray((init as any).orderItemList)) {
|
| 41 |
-
(this as any)._orderItemList = (init as any).orderItemList.map(
|
| 42 |
-
(child: unknown) => child instanceof OrderItem
|
| 43 |
-
? child
|
| 44 |
-
: OrderItem.fromRecord(child as Record<string, unknown>),
|
| 45 |
-
);
|
| 46 |
-
this.markLoaded("orderItemList");
|
| 47 |
-
}
|
| 48 |
-
}
|
| 49 |
-
const key = this.teaqlEntityKey();
|
| 50 |
-
if ((this as any)._action === "Create") (this as any)._root.markAsNew(key);
|
| 51 |
-
else if ((this as any).version !== undefined) (this as any)._root.setOriginalVersion(key, Number((this as any).version));
|
| 52 |
-
}
|
| 53 |
-
|
| 54 |
-
private teaqlEntityKey(): EntityKey { return { entity: "CustomerOrder", id: (this as any)._ledgerId }; }
|
| 55 |
-
private teaqlAttachRoot(root: EntityRoot): this {
|
| 56 |
-
if ((this as any)._root !== root) { root.mergeFrom((this as any)._root); (this as any)._root = root; }
|
| 57 |
-
for (const child of (this as any)._orderItemList) child.teaqlAttachRoot(root);
|
| 58 |
-
return this;
|
| 59 |
-
}
|
| 60 |
-
|
| 61 |
-
static fromRecord(record: Record<string, unknown>, root?: EntityRoot): CustomerOrder {
|
| 62 |
-
const entity = new CustomerOrder(record as Partial<CustomerOrder>);
|
| 63 |
-
return root ? entity.teaqlAttachRoot(root) : entity;
|
| 64 |
-
}
|
| 65 |
-
|
| 66 |
-
isLoaded(field: string): boolean {
|
| 67 |
-
return (this as any)._fullyLoaded || (this as any)._loadedFields.has(field);
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
markLoaded(...fields: string[]): this {
|
| 71 |
-
for (const field of fields) (this as any)._loadedFields.add(field);
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
markLoadedOnly(...fields: string[]): this {
|
| 76 |
-
(this as any)._fullyLoaded = false;
|
| 77 |
-
(this as any)._loadedFields = new Set(fields);
|
| 78 |
-
return this;
|
| 79 |
-
}
|
| 80 |
-
|
| 81 |
-
static refer(id: string | number): CustomerOrder {
|
| 82 |
-
return new CustomerOrder({ id: String(id) } as Partial<CustomerOrder>);
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
/** @internal Generated Runtime Module fixed-ID construction capability. */
|
| 86 |
-
static teaqlBootstrapNew(id: string | number): CustomerOrder {
|
| 87 |
-
return new CustomerOrder().updateId(String(id));
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
markForDeletion(): this {
|
| 91 |
-
(this as any)._action = "Delete";
|
| 92 |
-
(this as any)._root.markAsDeleted(this.teaqlEntityKey());
|
| 93 |
-
return this;
|
| 94 |
-
}
|
| 95 |
-
|
| 96 |
-
auditAs(comment: string): this {
|
| 97 |
-
if (!comment?.trim()) {
|
| 98 |
-
throw new Error("Security audit failure: auditAs() requires a non-empty reason");
|
| 99 |
-
}
|
| 100 |
-
(this as any)._comment = comment;
|
| 101 |
-
return this;
|
| 102 |
-
}
|
| 103 |
-
|
| 104 |
-
async save(context: UserContext): Promise<CustomerOrder> {
|
| 105 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 106 |
-
return service.executeGraphSave(new MutationIntent((this as any)._comment), async (graph) => {
|
| 107 |
-
this.teaqlPreflightGraph(context, service, graph);
|
| 108 |
-
return this.teaqlSaveWithinGraph(context, service, graph);
|
| 109 |
-
});
|
| 110 |
-
}
|
| 111 |
-
|
| 112 |
-
/** @internal Validates and fixes the complete graph before its first mutation. */
|
| 113 |
-
teaqlPreflightGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): void {
|
| 114 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 115 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 116 |
-
}
|
| 117 |
-
const action = (this as any)._action;
|
| 118 |
-
if (action === "Update") {
|
| 119 |
-
const notLoaded = [{ member: "id", canonical: "id" }, { member: "customer", canonical: "customer" }, { member: "status", canonical: "status" }, { member: "orderNumber", canonical: "order_number" }, { member: "orderDate", canonical: "order_date" }, { member: "totalAmount", canonical: "total_amount" }, { member: "version", canonical: "version" }]
|
| 120 |
-
.find(field => !this.isLoaded(field.member));
|
| 121 |
-
if (notLoaded) {
|
| 122 |
-
throw new CheckException([{
|
| 123 |
-
ruleId: "invalid_type",
|
| 124 |
-
location: ObjectLocation.property(notLoaded.canonical),
|
| 125 |
-
message: "Mutation requires a fully loaded entity",
|
| 126 |
-
}]);
|
| 127 |
-
}
|
| 128 |
-
}
|
| 129 |
-
const request = graph.request({
|
| 130 |
-
entity: "CustomerOrder", action,
|
| 131 |
-
payload: action === "Update"
|
| 132 |
-
? (this as any)._root.change(this.teaqlEntityKey())
|
| 133 |
-
: this.teaqlMutationPayload(),
|
| 134 |
-
id: (this as any).id, version: (this as any).version,
|
| 135 |
-
comment: (this as any)._comment,
|
| 136 |
-
ledgerKey: this.teaqlEntityKey(), ledgerRoot: (this as any)._root,
|
| 137 |
-
}, parent, (this as any)._comment).withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 138 |
-
service.preflightMutation(request);
|
| 139 |
-
const scope = request.scopeFor(this.teaqlEntityKey());
|
| 140 |
-
for (const [index, child] of (this as any)._orderItemList.entries()) {
|
| 141 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 142 |
-
child.updateCustomerOrder(this);
|
| 143 |
-
try { child.teaqlPreflightGraph(context, service, graph, scope); }
|
| 144 |
-
catch (error) {
|
| 145 |
-
if (!(error instanceof CheckException)) throw error;
|
| 146 |
-
const prefix = ObjectLocation.property("order_item_list").index(index);
|
| 147 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 148 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 149 |
-
})));
|
| 150 |
-
}
|
| 151 |
-
}
|
| 152 |
-
}
|
| 153 |
-
|
| 154 |
-
/** @internal Used by generated relation cascades inside the root graph transaction. */
|
| 155 |
-
async teaqlSaveWithinGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): Promise<CustomerOrder> {
|
| 156 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 157 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 158 |
-
}
|
| 159 |
-
const action = (this as any)._action;
|
| 160 |
-
const ledgerPayload = (this as any)._root.change(this.teaqlEntityKey());
|
| 161 |
-
const mutation = {
|
| 162 |
-
entity: "CustomerOrder",
|
| 163 |
-
action: (this as any)._action,
|
| 164 |
-
payload: action === "Update" ? ledgerPayload : this.teaqlMutationPayload(),
|
| 165 |
-
id: (this as any).id,
|
| 166 |
-
version: (this as any).version,
|
| 167 |
-
comment: (this as any)._comment
|
| 168 |
-
,ledgerKey: this.teaqlEntityKey()
|
| 169 |
-
,ledgerRoot: (this as any)._root
|
| 170 |
-
};
|
| 171 |
-
const request = graph.request(mutation, parent, (this as any)._comment)
|
| 172 |
-
.withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 173 |
-
const result = await service.executeMutation(request);
|
| 174 |
-
for (const [field, value] of Object.entries(mutation.payload as Record<string, unknown>)) {
|
| 175 |
-
if (field !== "id" && field !== "version") (this as any)._root.set(this.teaqlEntityKey(), field, value);
|
| 176 |
-
}
|
| 177 |
-
if (!result.persistedRecord) {
|
| 178 |
-
throw new Error("Mutation did not return the authoritative persisted record");
|
| 179 |
-
}
|
| 180 |
-
const rollbackState = {
|
| 181 |
-
payload: this.teaqlMutationPayload(),
|
| 182 |
-
ledgerId: (this as any)._ledgerId,
|
| 183 |
-
action: (this as any)._action,
|
| 184 |
-
loadedFields: new Set((this as any)._loadedFields),
|
| 185 |
-
fullyLoaded: (this as any)._fullyLoaded,
|
| 186 |
-
};
|
| 187 |
-
const oldKey = this.teaqlEntityKey();
|
| 188 |
-
Object.assign(this, result.persistedRecord);
|
| 189 |
-
(this as any)._ledgerId = (this as any).id ?? (this as any)._ledgerId;
|
| 190 |
-
const newKey = this.teaqlEntityKey();
|
| 191 |
-
(this as any)._root.rekey(oldKey, newKey);
|
| 192 |
-
service.afterGraphRollback(() => {
|
| 193 |
-
Object.assign(this, rollbackState.payload);
|
| 194 |
-
(this as any)._ledgerId = rollbackState.ledgerId;
|
| 195 |
-
(this as any)._action = rollbackState.action;
|
| 196 |
-
(this as any)._loadedFields = rollbackState.loadedFields;
|
| 197 |
-
(this as any)._fullyLoaded = rollbackState.fullyLoaded;
|
| 198 |
-
(this as any)._root.rekey(newKey, oldKey);
|
| 199 |
-
});
|
| 200 |
-
(this as any)._loadedFields = new Set(Object.keys(result.persistedRecord));
|
| 201 |
-
(this as any)._fullyLoaded = false;
|
| 202 |
-
if (mutation.action !== "Delete") (this as any)._action = "Update";
|
| 203 |
-
const scope = request.scopeFor(newKey);
|
| 204 |
-
for (const [index, child] of (this as any)._orderItemList.entries()) {
|
| 205 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 206 |
-
child.updateCustomerOrder(this);
|
| 207 |
-
try { await child.teaqlSaveWithinGraph(context, service, graph, scope); }
|
| 208 |
-
catch (error) {
|
| 209 |
-
if (!(error instanceof CheckException)) throw error;
|
| 210 |
-
const prefix = ObjectLocation.property("order_item_list").index(index);
|
| 211 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 212 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 213 |
-
})));
|
| 214 |
-
}
|
| 215 |
-
}
|
| 216 |
-
service.afterGraphCommit(() => {
|
| 217 |
-
(this as any)._root.clearEntity(newKey);
|
| 218 |
-
if ((this as any).version !== undefined) (this as any)._root.acceptCommittedVersion(newKey, Number((this as any).version));
|
| 219 |
-
});
|
| 220 |
-
return this;
|
| 221 |
-
}
|
| 222 |
-
|
| 223 |
-
private teaqlMutationPayload(): Record<string, unknown> {
|
| 224 |
-
return {
|
| 225 |
-
"id": this.id,
|
| 226 |
-
"customer": this.customer,
|
| 227 |
-
"status": this.status,
|
| 228 |
-
"order_number": this.orderNumber,
|
| 229 |
-
"order_date": this.orderDate,
|
| 230 |
-
"total_amount": this.totalAmount,
|
| 231 |
-
"version": this.version
|
| 232 |
-
};
|
| 233 |
-
}
|
| 234 |
-
|
| 235 |
-
updateId(value: string): this {
|
| 236 |
-
this.id = value;
|
| 237 |
-
this.markLoaded("id");
|
| 238 |
-
(this as any)._root.set(this.teaqlEntityKey(), "id", value);
|
| 239 |
-
return this;
|
| 240 |
-
}
|
| 241 |
-
|
| 242 |
-
updateOrderNumber(value: string): this {
|
| 243 |
-
this.orderNumber = value;
|
| 244 |
-
this.markLoaded("orderNumber");
|
| 245 |
-
(this as any)._root.set(this.teaqlEntityKey(), "order_number", value);
|
| 246 |
-
return this;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
updateOrderDate(value: string): this {
|
| 250 |
-
this.orderDate = value;
|
| 251 |
-
this.markLoaded("orderDate");
|
| 252 |
-
(this as any)._root.set(this.teaqlEntityKey(), "order_date", value);
|
| 253 |
-
return this;
|
| 254 |
-
}
|
| 255 |
-
|
| 256 |
-
updateTotalAmount(value: number): this {
|
| 257 |
-
this.totalAmount = value;
|
| 258 |
-
this.markLoaded("totalAmount");
|
| 259 |
-
(this as any)._root.set(this.teaqlEntityKey(), "total_amount", value);
|
| 260 |
-
return this;
|
| 261 |
-
}
|
| 262 |
-
|
| 263 |
-
updateVersion(value: number): this {
|
| 264 |
-
this.version = value;
|
| 265 |
-
this.markLoaded("version");
|
| 266 |
-
(this as any)._root.set(this.teaqlEntityKey(), "version", value);
|
| 267 |
-
return this;
|
| 268 |
-
}
|
| 269 |
-
updateCustomer(value: any): this {
|
| 270 |
-
this.customer = value?.id ?? value;
|
| 271 |
-
this.markLoaded("customer");
|
| 272 |
-
(this as any)._root.set(this.teaqlEntityKey(), "customer", this.customer);
|
| 273 |
-
return this;
|
| 274 |
-
}
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
updateStatus(value: any): this {
|
| 278 |
-
this.status = value?.id ?? value;
|
| 279 |
-
this.markLoaded("status");
|
| 280 |
-
(this as any)._root.set(this.teaqlEntityKey(), "status", this.status);
|
| 281 |
-
return this;
|
| 282 |
-
}
|
| 283 |
-
public updateStatusToNew(): CustomerOrder {
|
| 284 |
-
this.status = "1001";
|
| 285 |
-
this.markLoaded("status");
|
| 286 |
-
(this as any)._root.set(this.teaqlEntityKey(), "status", this.status);
|
| 287 |
-
return this;
|
| 288 |
-
}
|
| 289 |
-
public updateStatusToPaid(): CustomerOrder {
|
| 290 |
-
this.status = "1002";
|
| 291 |
-
this.markLoaded("status");
|
| 292 |
-
(this as any)._root.set(this.teaqlEntityKey(), "status", this.status);
|
| 293 |
-
return this;
|
| 294 |
-
}
|
| 295 |
-
public updateStatusToCancelled(): CustomerOrder {
|
| 296 |
-
this.status = "1003";
|
| 297 |
-
this.markLoaded("status");
|
| 298 |
-
(this as any)._root.set(this.teaqlEntityKey(), "status", this.status);
|
| 299 |
-
return this;
|
| 300 |
-
}
|
| 301 |
-
|
| 302 |
-
orderItemList(): OrderItem[] {
|
| 303 |
-
return (this as any)._orderItemList;
|
| 304 |
-
}
|
| 305 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/models/OrderItem.ts
DELETED
|
@@ -1,231 +0,0 @@
|
|
| 1 |
-
import { CheckException, EntityKey, EntityRoot, GraphMutationSession, LoadedScalarSnapshot, MutationIntent, MutationTraceScope, ObjectLocation, TeaQLDataService, UserContext } from '../../teaql-ts';
|
| 2 |
-
import { CustomerOrder } from './CustomerOrder';
|
| 3 |
-
|
| 4 |
-
export class OrderItem {
|
| 5 |
-
private static teaqlTemporaryId = 0;
|
| 6 |
-
id?: string;
|
| 7 |
-
customerOrder?: CustomerOrder | string;
|
| 8 |
-
productName?: string;
|
| 9 |
-
quantity?: number;
|
| 10 |
-
unitPrice?: number;
|
| 11 |
-
version?: number;
|
| 12 |
-
|
| 13 |
-
constructor(init?: Partial<OrderItem>) {
|
| 14 |
-
Object.defineProperty(this, "_action", { value: init && init.id ? "Update" : "Create", writable: true, enumerable: false });
|
| 15 |
-
Object.defineProperty(this, "_comment", { value: undefined, writable: true, enumerable: false });
|
| 16 |
-
Object.defineProperty(this, "_fullyLoaded", { value: !init || !init.id, writable: true, enumerable: false });
|
| 17 |
-
Object.defineProperty(this, "_loadedFields", { value: new Set(Object.keys(init || {})), writable: true, enumerable: false });
|
| 18 |
-
Object.defineProperty(this, "_root", { value: new EntityRoot(), writable: true, enumerable: false });
|
| 19 |
-
Object.defineProperty(this, "_ledgerId", { value: init?.id ?? --OrderItem.teaqlTemporaryId, writable: true, enumerable: false });
|
| 20 |
-
if (init) {
|
| 21 |
-
const fields: Record<string, unknown> = { ...(init as Record<string, unknown>) };
|
| 22 |
-
Object.assign(this, fields);
|
| 23 |
-
if ((init as any).customerOrder && typeof (init as any).customerOrder === "object") {
|
| 24 |
-
this.customerOrder = (init as any).customerOrder instanceof CustomerOrder
|
| 25 |
-
? (init as any).customerOrder
|
| 26 |
-
: CustomerOrder.fromRecord((init as any).customerOrder);
|
| 27 |
-
this.markLoaded("customerOrder");
|
| 28 |
-
}
|
| 29 |
-
}
|
| 30 |
-
const key = this.teaqlEntityKey();
|
| 31 |
-
if ((this as any)._action === "Create") (this as any)._root.markAsNew(key);
|
| 32 |
-
else if ((this as any).version !== undefined) (this as any)._root.setOriginalVersion(key, Number((this as any).version));
|
| 33 |
-
}
|
| 34 |
-
|
| 35 |
-
private teaqlEntityKey(): EntityKey { return { entity: "OrderItem", id: (this as any)._ledgerId }; }
|
| 36 |
-
private teaqlAttachRoot(root: EntityRoot): this {
|
| 37 |
-
if ((this as any)._root !== root) { root.mergeFrom((this as any)._root); (this as any)._root = root; }
|
| 38 |
-
return this;
|
| 39 |
-
}
|
| 40 |
-
|
| 41 |
-
static fromRecord(record: Record<string, unknown>, root?: EntityRoot): OrderItem {
|
| 42 |
-
const entity = new OrderItem(record as Partial<OrderItem>);
|
| 43 |
-
return root ? entity.teaqlAttachRoot(root) : entity;
|
| 44 |
-
}
|
| 45 |
-
|
| 46 |
-
isLoaded(field: string): boolean {
|
| 47 |
-
return (this as any)._fullyLoaded || (this as any)._loadedFields.has(field);
|
| 48 |
-
}
|
| 49 |
-
|
| 50 |
-
markLoaded(...fields: string[]): this {
|
| 51 |
-
for (const field of fields) (this as any)._loadedFields.add(field);
|
| 52 |
-
return this;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
markLoadedOnly(...fields: string[]): this {
|
| 56 |
-
(this as any)._fullyLoaded = false;
|
| 57 |
-
(this as any)._loadedFields = new Set(fields);
|
| 58 |
-
return this;
|
| 59 |
-
}
|
| 60 |
-
|
| 61 |
-
static refer(id: string | number): OrderItem {
|
| 62 |
-
return new OrderItem({ id: String(id) } as Partial<OrderItem>);
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
/** @internal Generated Runtime Module fixed-ID construction capability. */
|
| 66 |
-
static teaqlBootstrapNew(id: string | number): OrderItem {
|
| 67 |
-
return new OrderItem().updateId(String(id));
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
markForDeletion(): this {
|
| 71 |
-
(this as any)._action = "Delete";
|
| 72 |
-
(this as any)._root.markAsDeleted(this.teaqlEntityKey());
|
| 73 |
-
return this;
|
| 74 |
-
}
|
| 75 |
-
|
| 76 |
-
auditAs(comment: string): this {
|
| 77 |
-
if (!comment?.trim()) {
|
| 78 |
-
throw new Error("Security audit failure: auditAs() requires a non-empty reason");
|
| 79 |
-
}
|
| 80 |
-
(this as any)._comment = comment;
|
| 81 |
-
return this;
|
| 82 |
-
}
|
| 83 |
-
|
| 84 |
-
async save(context: UserContext): Promise<OrderItem> {
|
| 85 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 86 |
-
return service.executeGraphSave(new MutationIntent((this as any)._comment), async (graph) => {
|
| 87 |
-
this.teaqlPreflightGraph(context, service, graph);
|
| 88 |
-
return this.teaqlSaveWithinGraph(context, service, graph);
|
| 89 |
-
});
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
/** @internal Validates and fixes the complete graph before its first mutation. */
|
| 93 |
-
teaqlPreflightGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): void {
|
| 94 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 95 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 96 |
-
}
|
| 97 |
-
const action = (this as any)._action;
|
| 98 |
-
if (action === "Update") {
|
| 99 |
-
const notLoaded = [{ member: "id", canonical: "id" }, { member: "customerOrder", canonical: "customer_order" }, { member: "productName", canonical: "product_name" }, { member: "quantity", canonical: "quantity" }, { member: "unitPrice", canonical: "unit_price" }, { member: "version", canonical: "version" }]
|
| 100 |
-
.find(field => !this.isLoaded(field.member));
|
| 101 |
-
if (notLoaded) {
|
| 102 |
-
throw new CheckException([{
|
| 103 |
-
ruleId: "invalid_type",
|
| 104 |
-
location: ObjectLocation.property(notLoaded.canonical),
|
| 105 |
-
message: "Mutation requires a fully loaded entity",
|
| 106 |
-
}]);
|
| 107 |
-
}
|
| 108 |
-
}
|
| 109 |
-
const request = graph.request({
|
| 110 |
-
entity: "OrderItem", action,
|
| 111 |
-
payload: action === "Update"
|
| 112 |
-
? (this as any)._root.change(this.teaqlEntityKey())
|
| 113 |
-
: this.teaqlMutationPayload(),
|
| 114 |
-
id: (this as any).id, version: (this as any).version,
|
| 115 |
-
comment: (this as any)._comment,
|
| 116 |
-
ledgerKey: this.teaqlEntityKey(), ledgerRoot: (this as any)._root,
|
| 117 |
-
}, parent, (this as any)._comment).withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 118 |
-
service.preflightMutation(request);
|
| 119 |
-
const scope = request.scopeFor(this.teaqlEntityKey());
|
| 120 |
-
}
|
| 121 |
-
|
| 122 |
-
/** @internal Used by generated relation cascades inside the root graph transaction. */
|
| 123 |
-
async teaqlSaveWithinGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): Promise<OrderItem> {
|
| 124 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 125 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 126 |
-
}
|
| 127 |
-
const action = (this as any)._action;
|
| 128 |
-
const ledgerPayload = (this as any)._root.change(this.teaqlEntityKey());
|
| 129 |
-
const mutation = {
|
| 130 |
-
entity: "OrderItem",
|
| 131 |
-
action: (this as any)._action,
|
| 132 |
-
payload: action === "Update" ? ledgerPayload : this.teaqlMutationPayload(),
|
| 133 |
-
id: (this as any).id,
|
| 134 |
-
version: (this as any).version,
|
| 135 |
-
comment: (this as any)._comment
|
| 136 |
-
,ledgerKey: this.teaqlEntityKey()
|
| 137 |
-
,ledgerRoot: (this as any)._root
|
| 138 |
-
};
|
| 139 |
-
const request = graph.request(mutation, parent, (this as any)._comment)
|
| 140 |
-
.withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 141 |
-
const result = await service.executeMutation(request);
|
| 142 |
-
for (const [field, value] of Object.entries(mutation.payload as Record<string, unknown>)) {
|
| 143 |
-
if (field !== "id" && field !== "version") (this as any)._root.set(this.teaqlEntityKey(), field, value);
|
| 144 |
-
}
|
| 145 |
-
if (!result.persistedRecord) {
|
| 146 |
-
throw new Error("Mutation did not return the authoritative persisted record");
|
| 147 |
-
}
|
| 148 |
-
const rollbackState = {
|
| 149 |
-
payload: this.teaqlMutationPayload(),
|
| 150 |
-
ledgerId: (this as any)._ledgerId,
|
| 151 |
-
action: (this as any)._action,
|
| 152 |
-
loadedFields: new Set((this as any)._loadedFields),
|
| 153 |
-
fullyLoaded: (this as any)._fullyLoaded,
|
| 154 |
-
};
|
| 155 |
-
const oldKey = this.teaqlEntityKey();
|
| 156 |
-
Object.assign(this, result.persistedRecord);
|
| 157 |
-
(this as any)._ledgerId = (this as any).id ?? (this as any)._ledgerId;
|
| 158 |
-
const newKey = this.teaqlEntityKey();
|
| 159 |
-
(this as any)._root.rekey(oldKey, newKey);
|
| 160 |
-
service.afterGraphRollback(() => {
|
| 161 |
-
Object.assign(this, rollbackState.payload);
|
| 162 |
-
(this as any)._ledgerId = rollbackState.ledgerId;
|
| 163 |
-
(this as any)._action = rollbackState.action;
|
| 164 |
-
(this as any)._loadedFields = rollbackState.loadedFields;
|
| 165 |
-
(this as any)._fullyLoaded = rollbackState.fullyLoaded;
|
| 166 |
-
(this as any)._root.rekey(newKey, oldKey);
|
| 167 |
-
});
|
| 168 |
-
(this as any)._loadedFields = new Set(Object.keys(result.persistedRecord));
|
| 169 |
-
(this as any)._fullyLoaded = false;
|
| 170 |
-
if (mutation.action !== "Delete") (this as any)._action = "Update";
|
| 171 |
-
const scope = request.scopeFor(newKey);
|
| 172 |
-
service.afterGraphCommit(() => {
|
| 173 |
-
(this as any)._root.clearEntity(newKey);
|
| 174 |
-
if ((this as any).version !== undefined) (this as any)._root.acceptCommittedVersion(newKey, Number((this as any).version));
|
| 175 |
-
});
|
| 176 |
-
return this;
|
| 177 |
-
}
|
| 178 |
-
|
| 179 |
-
private teaqlMutationPayload(): Record<string, unknown> {
|
| 180 |
-
return {
|
| 181 |
-
"id": this.id,
|
| 182 |
-
"customer_order": this.customerOrder,
|
| 183 |
-
"product_name": this.productName,
|
| 184 |
-
"quantity": this.quantity,
|
| 185 |
-
"unit_price": this.unitPrice,
|
| 186 |
-
"version": this.version
|
| 187 |
-
};
|
| 188 |
-
}
|
| 189 |
-
|
| 190 |
-
updateId(value: string): this {
|
| 191 |
-
this.id = value;
|
| 192 |
-
this.markLoaded("id");
|
| 193 |
-
(this as any)._root.set(this.teaqlEntityKey(), "id", value);
|
| 194 |
-
return this;
|
| 195 |
-
}
|
| 196 |
-
|
| 197 |
-
updateProductName(value: string): this {
|
| 198 |
-
this.productName = value;
|
| 199 |
-
this.markLoaded("productName");
|
| 200 |
-
(this as any)._root.set(this.teaqlEntityKey(), "product_name", value);
|
| 201 |
-
return this;
|
| 202 |
-
}
|
| 203 |
-
|
| 204 |
-
updateQuantity(value: number): this {
|
| 205 |
-
this.quantity = value;
|
| 206 |
-
this.markLoaded("quantity");
|
| 207 |
-
(this as any)._root.set(this.teaqlEntityKey(), "quantity", value);
|
| 208 |
-
return this;
|
| 209 |
-
}
|
| 210 |
-
|
| 211 |
-
updateUnitPrice(value: number): this {
|
| 212 |
-
this.unitPrice = value;
|
| 213 |
-
this.markLoaded("unitPrice");
|
| 214 |
-
(this as any)._root.set(this.teaqlEntityKey(), "unit_price", value);
|
| 215 |
-
return this;
|
| 216 |
-
}
|
| 217 |
-
|
| 218 |
-
updateVersion(value: number): this {
|
| 219 |
-
this.version = value;
|
| 220 |
-
this.markLoaded("version");
|
| 221 |
-
(this as any)._root.set(this.teaqlEntityKey(), "version", value);
|
| 222 |
-
return this;
|
| 223 |
-
}
|
| 224 |
-
updateCustomerOrder(value: any): this {
|
| 225 |
-
this.customerOrder = value?.id ?? value;
|
| 226 |
-
this.markLoaded("customerOrder");
|
| 227 |
-
(this as any)._root.set(this.teaqlEntityKey(), "customer_order", this.customerOrder);
|
| 228 |
-
return this;
|
| 229 |
-
}
|
| 230 |
-
|
| 231 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/models/OrderStatus.ts
DELETED
|
@@ -1,279 +0,0 @@
|
|
| 1 |
-
import { CheckException, EntityKey, EntityRoot, GraphMutationSession, LoadedScalarSnapshot, MutationIntent, MutationTraceScope, ObjectLocation, TeaQLDataService, UserContext } from '../../teaql-ts';
|
| 2 |
-
import { Platform } from './Platform';
|
| 3 |
-
import { CustomerOrder } from './CustomerOrder';
|
| 4 |
-
|
| 5 |
-
export class OrderStatus {
|
| 6 |
-
private static teaqlTemporaryId = 0;
|
| 7 |
-
platform?: Platform | string;
|
| 8 |
-
id?: string;
|
| 9 |
-
name?: string;
|
| 10 |
-
code?: string;
|
| 11 |
-
color?: string;
|
| 12 |
-
displayOrder?: number;
|
| 13 |
-
version?: number;
|
| 14 |
-
|
| 15 |
-
constructor(init?: Partial<OrderStatus>) {
|
| 16 |
-
Object.defineProperty(this, "_action", { value: init && init.id ? "Update" : "Create", writable: true, enumerable: false });
|
| 17 |
-
Object.defineProperty(this, "_comment", { value: undefined, writable: true, enumerable: false });
|
| 18 |
-
Object.defineProperty(this, "_fullyLoaded", { value: !init || !init.id, writable: true, enumerable: false });
|
| 19 |
-
Object.defineProperty(this, "_loadedFields", { value: new Set(Object.keys(init || {})), writable: true, enumerable: false });
|
| 20 |
-
Object.defineProperty(this, "_root", { value: new EntityRoot(), writable: true, enumerable: false });
|
| 21 |
-
Object.defineProperty(this, "_ledgerId", { value: init?.id ?? --OrderStatus.teaqlTemporaryId, writable: true, enumerable: false });
|
| 22 |
-
Object.defineProperty(this, "_customerOrderList", { value: [], writable: true, enumerable: false });
|
| 23 |
-
if (init) {
|
| 24 |
-
const fields: Record<string, unknown> = { ...(init as Record<string, unknown>) };
|
| 25 |
-
delete fields["customerOrderList"];
|
| 26 |
-
Object.assign(this, fields);
|
| 27 |
-
if ((init as any).platform && typeof (init as any).platform === "object") {
|
| 28 |
-
this.platform = (init as any).platform instanceof Platform
|
| 29 |
-
? (init as any).platform
|
| 30 |
-
: Platform.fromRecord((init as any).platform);
|
| 31 |
-
this.markLoaded("platform");
|
| 32 |
-
}
|
| 33 |
-
if (Array.isArray((init as any).customerOrderList)) {
|
| 34 |
-
(this as any)._customerOrderList = (init as any).customerOrderList.map(
|
| 35 |
-
(child: unknown) => child instanceof CustomerOrder
|
| 36 |
-
? child
|
| 37 |
-
: CustomerOrder.fromRecord(child as Record<string, unknown>),
|
| 38 |
-
);
|
| 39 |
-
this.markLoaded("customerOrderList");
|
| 40 |
-
}
|
| 41 |
-
}
|
| 42 |
-
const key = this.teaqlEntityKey();
|
| 43 |
-
if ((this as any)._action === "Create") (this as any)._root.markAsNew(key);
|
| 44 |
-
else if ((this as any).version !== undefined) (this as any)._root.setOriginalVersion(key, Number((this as any).version));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
private teaqlEntityKey(): EntityKey { return { entity: "OrderStatus", id: (this as any)._ledgerId }; }
|
| 48 |
-
private teaqlAttachRoot(root: EntityRoot): this {
|
| 49 |
-
if ((this as any)._root !== root) { root.mergeFrom((this as any)._root); (this as any)._root = root; }
|
| 50 |
-
for (const child of (this as any)._customerOrderList) child.teaqlAttachRoot(root);
|
| 51 |
-
return this;
|
| 52 |
-
}
|
| 53 |
-
|
| 54 |
-
static fromRecord(record: Record<string, unknown>, root?: EntityRoot): OrderStatus {
|
| 55 |
-
const entity = new OrderStatus(record as Partial<OrderStatus>);
|
| 56 |
-
return root ? entity.teaqlAttachRoot(root) : entity;
|
| 57 |
-
}
|
| 58 |
-
|
| 59 |
-
isLoaded(field: string): boolean {
|
| 60 |
-
return (this as any)._fullyLoaded || (this as any)._loadedFields.has(field);
|
| 61 |
-
}
|
| 62 |
-
|
| 63 |
-
markLoaded(...fields: string[]): this {
|
| 64 |
-
for (const field of fields) (this as any)._loadedFields.add(field);
|
| 65 |
-
return this;
|
| 66 |
-
}
|
| 67 |
-
|
| 68 |
-
markLoadedOnly(...fields: string[]): this {
|
| 69 |
-
(this as any)._fullyLoaded = false;
|
| 70 |
-
(this as any)._loadedFields = new Set(fields);
|
| 71 |
-
return this;
|
| 72 |
-
}
|
| 73 |
-
|
| 74 |
-
static refer(id: string | number): OrderStatus {
|
| 75 |
-
return new OrderStatus({ id: String(id) } as Partial<OrderStatus>);
|
| 76 |
-
}
|
| 77 |
-
|
| 78 |
-
/** @internal Generated Runtime Module fixed-ID construction capability. */
|
| 79 |
-
static teaqlBootstrapNew(id: string | number): OrderStatus {
|
| 80 |
-
return new OrderStatus().updateId(String(id));
|
| 81 |
-
}
|
| 82 |
-
|
| 83 |
-
markForDeletion(): this {
|
| 84 |
-
(this as any)._action = "Delete";
|
| 85 |
-
(this as any)._root.markAsDeleted(this.teaqlEntityKey());
|
| 86 |
-
return this;
|
| 87 |
-
}
|
| 88 |
-
|
| 89 |
-
auditAs(comment: string): this {
|
| 90 |
-
if (!comment?.trim()) {
|
| 91 |
-
throw new Error("Security audit failure: auditAs() requires a non-empty reason");
|
| 92 |
-
}
|
| 93 |
-
(this as any)._comment = comment;
|
| 94 |
-
return this;
|
| 95 |
-
}
|
| 96 |
-
|
| 97 |
-
async save(context: UserContext): Promise<OrderStatus> {
|
| 98 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 99 |
-
return service.executeGraphSave(new MutationIntent((this as any)._comment), async (graph) => {
|
| 100 |
-
this.teaqlPreflightGraph(context, service, graph);
|
| 101 |
-
return this.teaqlSaveWithinGraph(context, service, graph);
|
| 102 |
-
});
|
| 103 |
-
}
|
| 104 |
-
|
| 105 |
-
/** @internal Validates and fixes the complete graph before its first mutation. */
|
| 106 |
-
teaqlPreflightGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): void {
|
| 107 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 108 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 109 |
-
}
|
| 110 |
-
const action = (this as any)._action;
|
| 111 |
-
if (action === "Update") {
|
| 112 |
-
const notLoaded = [{ member: "platform", canonical: "platform" }, { member: "id", canonical: "id" }, { member: "name", canonical: "name" }, { member: "code", canonical: "code" }, { member: "color", canonical: "color" }, { member: "displayOrder", canonical: "display_order" }, { member: "version", canonical: "version" }]
|
| 113 |
-
.find(field => !this.isLoaded(field.member));
|
| 114 |
-
if (notLoaded) {
|
| 115 |
-
throw new CheckException([{
|
| 116 |
-
ruleId: "invalid_type",
|
| 117 |
-
location: ObjectLocation.property(notLoaded.canonical),
|
| 118 |
-
message: "Mutation requires a fully loaded entity",
|
| 119 |
-
}]);
|
| 120 |
-
}
|
| 121 |
-
}
|
| 122 |
-
const request = graph.request({
|
| 123 |
-
entity: "OrderStatus", action,
|
| 124 |
-
payload: action === "Update"
|
| 125 |
-
? (this as any)._root.change(this.teaqlEntityKey())
|
| 126 |
-
: this.teaqlMutationPayload(),
|
| 127 |
-
id: (this as any).id, version: (this as any).version,
|
| 128 |
-
comment: (this as any)._comment,
|
| 129 |
-
ledgerKey: this.teaqlEntityKey(), ledgerRoot: (this as any)._root,
|
| 130 |
-
}, parent, (this as any)._comment).withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 131 |
-
service.preflightMutation(request);
|
| 132 |
-
const scope = request.scopeFor(this.teaqlEntityKey());
|
| 133 |
-
for (const [index, child] of (this as any)._customerOrderList.entries()) {
|
| 134 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 135 |
-
child.updateStatus(this);
|
| 136 |
-
try { child.teaqlPreflightGraph(context, service, graph, scope); }
|
| 137 |
-
catch (error) {
|
| 138 |
-
if (!(error instanceof CheckException)) throw error;
|
| 139 |
-
const prefix = ObjectLocation.property("customer_order_list").index(index);
|
| 140 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 141 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 142 |
-
})));
|
| 143 |
-
}
|
| 144 |
-
}
|
| 145 |
-
}
|
| 146 |
-
|
| 147 |
-
/** @internal Used by generated relation cascades inside the root graph transaction. */
|
| 148 |
-
async teaqlSaveWithinGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): Promise<OrderStatus> {
|
| 149 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 150 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 151 |
-
}
|
| 152 |
-
const action = (this as any)._action;
|
| 153 |
-
const ledgerPayload = (this as any)._root.change(this.teaqlEntityKey());
|
| 154 |
-
const mutation = {
|
| 155 |
-
entity: "OrderStatus",
|
| 156 |
-
action: (this as any)._action,
|
| 157 |
-
payload: action === "Update" ? ledgerPayload : this.teaqlMutationPayload(),
|
| 158 |
-
id: (this as any).id,
|
| 159 |
-
version: (this as any).version,
|
| 160 |
-
comment: (this as any)._comment
|
| 161 |
-
,ledgerKey: this.teaqlEntityKey()
|
| 162 |
-
,ledgerRoot: (this as any)._root
|
| 163 |
-
};
|
| 164 |
-
const request = graph.request(mutation, parent, (this as any)._comment)
|
| 165 |
-
.withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 166 |
-
const result = await service.executeMutation(request);
|
| 167 |
-
for (const [field, value] of Object.entries(mutation.payload as Record<string, unknown>)) {
|
| 168 |
-
if (field !== "id" && field !== "version") (this as any)._root.set(this.teaqlEntityKey(), field, value);
|
| 169 |
-
}
|
| 170 |
-
if (!result.persistedRecord) {
|
| 171 |
-
throw new Error("Mutation did not return the authoritative persisted record");
|
| 172 |
-
}
|
| 173 |
-
const rollbackState = {
|
| 174 |
-
payload: this.teaqlMutationPayload(),
|
| 175 |
-
ledgerId: (this as any)._ledgerId,
|
| 176 |
-
action: (this as any)._action,
|
| 177 |
-
loadedFields: new Set((this as any)._loadedFields),
|
| 178 |
-
fullyLoaded: (this as any)._fullyLoaded,
|
| 179 |
-
};
|
| 180 |
-
const oldKey = this.teaqlEntityKey();
|
| 181 |
-
Object.assign(this, result.persistedRecord);
|
| 182 |
-
(this as any)._ledgerId = (this as any).id ?? (this as any)._ledgerId;
|
| 183 |
-
const newKey = this.teaqlEntityKey();
|
| 184 |
-
(this as any)._root.rekey(oldKey, newKey);
|
| 185 |
-
service.afterGraphRollback(() => {
|
| 186 |
-
Object.assign(this, rollbackState.payload);
|
| 187 |
-
(this as any)._ledgerId = rollbackState.ledgerId;
|
| 188 |
-
(this as any)._action = rollbackState.action;
|
| 189 |
-
(this as any)._loadedFields = rollbackState.loadedFields;
|
| 190 |
-
(this as any)._fullyLoaded = rollbackState.fullyLoaded;
|
| 191 |
-
(this as any)._root.rekey(newKey, oldKey);
|
| 192 |
-
});
|
| 193 |
-
(this as any)._loadedFields = new Set(Object.keys(result.persistedRecord));
|
| 194 |
-
(this as any)._fullyLoaded = false;
|
| 195 |
-
if (mutation.action !== "Delete") (this as any)._action = "Update";
|
| 196 |
-
const scope = request.scopeFor(newKey);
|
| 197 |
-
for (const [index, child] of (this as any)._customerOrderList.entries()) {
|
| 198 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 199 |
-
child.updateStatus(this);
|
| 200 |
-
try { await child.teaqlSaveWithinGraph(context, service, graph, scope); }
|
| 201 |
-
catch (error) {
|
| 202 |
-
if (!(error instanceof CheckException)) throw error;
|
| 203 |
-
const prefix = ObjectLocation.property("customer_order_list").index(index);
|
| 204 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 205 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 206 |
-
})));
|
| 207 |
-
}
|
| 208 |
-
}
|
| 209 |
-
service.afterGraphCommit(() => {
|
| 210 |
-
(this as any)._root.clearEntity(newKey);
|
| 211 |
-
if ((this as any).version !== undefined) (this as any)._root.acceptCommittedVersion(newKey, Number((this as any).version));
|
| 212 |
-
});
|
| 213 |
-
return this;
|
| 214 |
-
}
|
| 215 |
-
|
| 216 |
-
private teaqlMutationPayload(): Record<string, unknown> {
|
| 217 |
-
return {
|
| 218 |
-
"platform": this.platform,
|
| 219 |
-
"id": this.id,
|
| 220 |
-
"name": this.name,
|
| 221 |
-
"code": this.code,
|
| 222 |
-
"color": this.color,
|
| 223 |
-
"display_order": this.displayOrder,
|
| 224 |
-
"version": this.version
|
| 225 |
-
};
|
| 226 |
-
}
|
| 227 |
-
|
| 228 |
-
updateId(value: string): this {
|
| 229 |
-
this.id = value;
|
| 230 |
-
this.markLoaded("id");
|
| 231 |
-
(this as any)._root.set(this.teaqlEntityKey(), "id", value);
|
| 232 |
-
return this;
|
| 233 |
-
}
|
| 234 |
-
|
| 235 |
-
updateName(value: string): this {
|
| 236 |
-
this.name = value;
|
| 237 |
-
this.markLoaded("name");
|
| 238 |
-
(this as any)._root.set(this.teaqlEntityKey(), "name", value);
|
| 239 |
-
return this;
|
| 240 |
-
}
|
| 241 |
-
|
| 242 |
-
updateCode(value: string): this {
|
| 243 |
-
this.code = value;
|
| 244 |
-
this.markLoaded("code");
|
| 245 |
-
(this as any)._root.set(this.teaqlEntityKey(), "code", value);
|
| 246 |
-
return this;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
updateColor(value: string): this {
|
| 250 |
-
this.color = value;
|
| 251 |
-
this.markLoaded("color");
|
| 252 |
-
(this as any)._root.set(this.teaqlEntityKey(), "color", value);
|
| 253 |
-
return this;
|
| 254 |
-
}
|
| 255 |
-
|
| 256 |
-
updateDisplayOrder(value: number): this {
|
| 257 |
-
this.displayOrder = value;
|
| 258 |
-
this.markLoaded("displayOrder");
|
| 259 |
-
(this as any)._root.set(this.teaqlEntityKey(), "display_order", value);
|
| 260 |
-
return this;
|
| 261 |
-
}
|
| 262 |
-
|
| 263 |
-
updateVersion(value: number): this {
|
| 264 |
-
this.version = value;
|
| 265 |
-
this.markLoaded("version");
|
| 266 |
-
(this as any)._root.set(this.teaqlEntityKey(), "version", value);
|
| 267 |
-
return this;
|
| 268 |
-
}
|
| 269 |
-
updatePlatform(value: any): this {
|
| 270 |
-
this.platform = value?.id ?? value;
|
| 271 |
-
this.markLoaded("platform");
|
| 272 |
-
(this as any)._root.set(this.teaqlEntityKey(), "platform", this.platform);
|
| 273 |
-
return this;
|
| 274 |
-
}
|
| 275 |
-
|
| 276 |
-
customerOrderList(): CustomerOrder[] {
|
| 277 |
-
return (this as any)._customerOrderList;
|
| 278 |
-
}
|
| 279 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/models/Platform.ts
DELETED
|
@@ -1,276 +0,0 @@
|
|
| 1 |
-
import { CheckException, EntityKey, EntityRoot, GraphMutationSession, LoadedScalarSnapshot, MutationIntent, MutationTraceScope, ObjectLocation, TeaQLDataService, UserContext } from '../../teaql-ts';
|
| 2 |
-
import { OrderStatus } from './OrderStatus';
|
| 3 |
-
import { Customer } from './Customer';
|
| 4 |
-
|
| 5 |
-
export class Platform {
|
| 6 |
-
private static teaqlTemporaryId = 0;
|
| 7 |
-
id?: string;
|
| 8 |
-
name?: string;
|
| 9 |
-
version?: number;
|
| 10 |
-
|
| 11 |
-
constructor(init?: Partial<Platform>) {
|
| 12 |
-
Object.defineProperty(this, "_action", { value: init && init.id ? "Update" : "Create", writable: true, enumerable: false });
|
| 13 |
-
Object.defineProperty(this, "_comment", { value: undefined, writable: true, enumerable: false });
|
| 14 |
-
Object.defineProperty(this, "_fullyLoaded", { value: !init || !init.id, writable: true, enumerable: false });
|
| 15 |
-
Object.defineProperty(this, "_loadedFields", { value: new Set(Object.keys(init || {})), writable: true, enumerable: false });
|
| 16 |
-
Object.defineProperty(this, "_root", { value: new EntityRoot(), writable: true, enumerable: false });
|
| 17 |
-
Object.defineProperty(this, "_ledgerId", { value: init?.id ?? --Platform.teaqlTemporaryId, writable: true, enumerable: false });
|
| 18 |
-
Object.defineProperty(this, "_orderStatusList", { value: [], writable: true, enumerable: false });
|
| 19 |
-
Object.defineProperty(this, "_customerList", { value: [], writable: true, enumerable: false });
|
| 20 |
-
if (init) {
|
| 21 |
-
const fields: Record<string, unknown> = { ...(init as Record<string, unknown>) };
|
| 22 |
-
delete fields["orderStatusList"];
|
| 23 |
-
delete fields["customerList"];
|
| 24 |
-
Object.assign(this, fields);
|
| 25 |
-
if (Array.isArray((init as any).orderStatusList)) {
|
| 26 |
-
(this as any)._orderStatusList = (init as any).orderStatusList.map(
|
| 27 |
-
(child: unknown) => child instanceof OrderStatus
|
| 28 |
-
? child
|
| 29 |
-
: OrderStatus.fromRecord(child as Record<string, unknown>),
|
| 30 |
-
);
|
| 31 |
-
this.markLoaded("orderStatusList");
|
| 32 |
-
}
|
| 33 |
-
if (Array.isArray((init as any).customerList)) {
|
| 34 |
-
(this as any)._customerList = (init as any).customerList.map(
|
| 35 |
-
(child: unknown) => child instanceof Customer
|
| 36 |
-
? child
|
| 37 |
-
: Customer.fromRecord(child as Record<string, unknown>),
|
| 38 |
-
);
|
| 39 |
-
this.markLoaded("customerList");
|
| 40 |
-
}
|
| 41 |
-
}
|
| 42 |
-
const key = this.teaqlEntityKey();
|
| 43 |
-
if ((this as any)._action === "Create") (this as any)._root.markAsNew(key);
|
| 44 |
-
else if ((this as any).version !== undefined) (this as any)._root.setOriginalVersion(key, Number((this as any).version));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
private teaqlEntityKey(): EntityKey { return { entity: "Platform", id: (this as any)._ledgerId }; }
|
| 48 |
-
private teaqlAttachRoot(root: EntityRoot): this {
|
| 49 |
-
if ((this as any)._root !== root) { root.mergeFrom((this as any)._root); (this as any)._root = root; }
|
| 50 |
-
for (const child of (this as any)._orderStatusList) child.teaqlAttachRoot(root);
|
| 51 |
-
for (const child of (this as any)._customerList) child.teaqlAttachRoot(root);
|
| 52 |
-
return this;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
static fromRecord(record: Record<string, unknown>, root?: EntityRoot): Platform {
|
| 56 |
-
const entity = new Platform(record as Partial<Platform>);
|
| 57 |
-
return root ? entity.teaqlAttachRoot(root) : entity;
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
isLoaded(field: string): boolean {
|
| 61 |
-
return (this as any)._fullyLoaded || (this as any)._loadedFields.has(field);
|
| 62 |
-
}
|
| 63 |
-
|
| 64 |
-
markLoaded(...fields: string[]): this {
|
| 65 |
-
for (const field of fields) (this as any)._loadedFields.add(field);
|
| 66 |
-
return this;
|
| 67 |
-
}
|
| 68 |
-
|
| 69 |
-
markLoadedOnly(...fields: string[]): this {
|
| 70 |
-
(this as any)._fullyLoaded = false;
|
| 71 |
-
(this as any)._loadedFields = new Set(fields);
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
static refer(id: string | number): Platform {
|
| 76 |
-
return new Platform({ id: String(id) } as Partial<Platform>);
|
| 77 |
-
}
|
| 78 |
-
|
| 79 |
-
/** @internal Generated Runtime Module fixed-ID construction capability. */
|
| 80 |
-
static teaqlBootstrapNew(id: string | number): Platform {
|
| 81 |
-
return new Platform().updateId(String(id));
|
| 82 |
-
}
|
| 83 |
-
|
| 84 |
-
markForDeletion(): this {
|
| 85 |
-
(this as any)._action = "Delete";
|
| 86 |
-
(this as any)._root.markAsDeleted(this.teaqlEntityKey());
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
auditAs(comment: string): this {
|
| 91 |
-
if (!comment?.trim()) {
|
| 92 |
-
throw new Error("Security audit failure: auditAs() requires a non-empty reason");
|
| 93 |
-
}
|
| 94 |
-
(this as any)._comment = comment;
|
| 95 |
-
return this;
|
| 96 |
-
}
|
| 97 |
-
|
| 98 |
-
async save(context: UserContext): Promise<Platform> {
|
| 99 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 100 |
-
return service.executeGraphSave(new MutationIntent((this as any)._comment), async (graph) => {
|
| 101 |
-
this.teaqlPreflightGraph(context, service, graph);
|
| 102 |
-
return this.teaqlSaveWithinGraph(context, service, graph);
|
| 103 |
-
});
|
| 104 |
-
}
|
| 105 |
-
|
| 106 |
-
/** @internal Validates and fixes the complete graph before its first mutation. */
|
| 107 |
-
teaqlPreflightGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): void {
|
| 108 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 109 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 110 |
-
}
|
| 111 |
-
const action = (this as any)._action;
|
| 112 |
-
if (action === "Update") {
|
| 113 |
-
const notLoaded = [{ member: "id", canonical: "id" }, { member: "name", canonical: "name" }, { member: "version", canonical: "version" }]
|
| 114 |
-
.find(field => !this.isLoaded(field.member));
|
| 115 |
-
if (notLoaded) {
|
| 116 |
-
throw new CheckException([{
|
| 117 |
-
ruleId: "invalid_type",
|
| 118 |
-
location: ObjectLocation.property(notLoaded.canonical),
|
| 119 |
-
message: "Mutation requires a fully loaded entity",
|
| 120 |
-
}]);
|
| 121 |
-
}
|
| 122 |
-
}
|
| 123 |
-
const request = graph.request({
|
| 124 |
-
entity: "Platform", action,
|
| 125 |
-
payload: action === "Update"
|
| 126 |
-
? (this as any)._root.change(this.teaqlEntityKey())
|
| 127 |
-
: this.teaqlMutationPayload(),
|
| 128 |
-
id: (this as any).id, version: (this as any).version,
|
| 129 |
-
comment: (this as any)._comment,
|
| 130 |
-
ledgerKey: this.teaqlEntityKey(), ledgerRoot: (this as any)._root,
|
| 131 |
-
}, parent, (this as any)._comment).withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 132 |
-
service.preflightMutation(request);
|
| 133 |
-
const scope = request.scopeFor(this.teaqlEntityKey());
|
| 134 |
-
for (const [index, child] of (this as any)._orderStatusList.entries()) {
|
| 135 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 136 |
-
child.updatePlatform(this);
|
| 137 |
-
try { child.teaqlPreflightGraph(context, service, graph, scope); }
|
| 138 |
-
catch (error) {
|
| 139 |
-
if (!(error instanceof CheckException)) throw error;
|
| 140 |
-
const prefix = ObjectLocation.property("order_status_list").index(index);
|
| 141 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 142 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 143 |
-
})));
|
| 144 |
-
}
|
| 145 |
-
}
|
| 146 |
-
for (const [index, child] of (this as any)._customerList.entries()) {
|
| 147 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 148 |
-
child.updatePlatform(this);
|
| 149 |
-
try { child.teaqlPreflightGraph(context, service, graph, scope); }
|
| 150 |
-
catch (error) {
|
| 151 |
-
if (!(error instanceof CheckException)) throw error;
|
| 152 |
-
const prefix = ObjectLocation.property("customer_list").index(index);
|
| 153 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 154 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 155 |
-
})));
|
| 156 |
-
}
|
| 157 |
-
}
|
| 158 |
-
}
|
| 159 |
-
|
| 160 |
-
/** @internal Used by generated relation cascades inside the root graph transaction. */
|
| 161 |
-
async teaqlSaveWithinGraph(context: UserContext, service: TeaQLDataService, graph: GraphMutationSession, parent?: MutationTraceScope): Promise<Platform> {
|
| 162 |
-
if (!parent && !(this as any)._comment?.trim()) {
|
| 163 |
-
throw new Error("Security audit failure: auditAs() must be called before save()");
|
| 164 |
-
}
|
| 165 |
-
const action = (this as any)._action;
|
| 166 |
-
const ledgerPayload = (this as any)._root.change(this.teaqlEntityKey());
|
| 167 |
-
const mutation = {
|
| 168 |
-
entity: "Platform",
|
| 169 |
-
action: (this as any)._action,
|
| 170 |
-
payload: action === "Update" ? ledgerPayload : this.teaqlMutationPayload(),
|
| 171 |
-
id: (this as any).id,
|
| 172 |
-
version: (this as any).version,
|
| 173 |
-
comment: (this as any)._comment
|
| 174 |
-
,ledgerKey: this.teaqlEntityKey()
|
| 175 |
-
,ledgerRoot: (this as any)._root
|
| 176 |
-
};
|
| 177 |
-
const request = graph.request(mutation, parent, (this as any)._comment)
|
| 178 |
-
.withLoadedSnapshot(new LoadedScalarSnapshot(this.teaqlMutationPayload()));
|
| 179 |
-
const result = await service.executeMutation(request);
|
| 180 |
-
for (const [field, value] of Object.entries(mutation.payload as Record<string, unknown>)) {
|
| 181 |
-
if (field !== "id" && field !== "version") (this as any)._root.set(this.teaqlEntityKey(), field, value);
|
| 182 |
-
}
|
| 183 |
-
if (!result.persistedRecord) {
|
| 184 |
-
throw new Error("Mutation did not return the authoritative persisted record");
|
| 185 |
-
}
|
| 186 |
-
const rollbackState = {
|
| 187 |
-
payload: this.teaqlMutationPayload(),
|
| 188 |
-
ledgerId: (this as any)._ledgerId,
|
| 189 |
-
action: (this as any)._action,
|
| 190 |
-
loadedFields: new Set((this as any)._loadedFields),
|
| 191 |
-
fullyLoaded: (this as any)._fullyLoaded,
|
| 192 |
-
};
|
| 193 |
-
const oldKey = this.teaqlEntityKey();
|
| 194 |
-
Object.assign(this, result.persistedRecord);
|
| 195 |
-
(this as any)._ledgerId = (this as any).id ?? (this as any)._ledgerId;
|
| 196 |
-
const newKey = this.teaqlEntityKey();
|
| 197 |
-
(this as any)._root.rekey(oldKey, newKey);
|
| 198 |
-
service.afterGraphRollback(() => {
|
| 199 |
-
Object.assign(this, rollbackState.payload);
|
| 200 |
-
(this as any)._ledgerId = rollbackState.ledgerId;
|
| 201 |
-
(this as any)._action = rollbackState.action;
|
| 202 |
-
(this as any)._loadedFields = rollbackState.loadedFields;
|
| 203 |
-
(this as any)._fullyLoaded = rollbackState.fullyLoaded;
|
| 204 |
-
(this as any)._root.rekey(newKey, oldKey);
|
| 205 |
-
});
|
| 206 |
-
(this as any)._loadedFields = new Set(Object.keys(result.persistedRecord));
|
| 207 |
-
(this as any)._fullyLoaded = false;
|
| 208 |
-
if (mutation.action !== "Delete") (this as any)._action = "Update";
|
| 209 |
-
const scope = request.scopeFor(newKey);
|
| 210 |
-
for (const [index, child] of (this as any)._orderStatusList.entries()) {
|
| 211 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 212 |
-
child.updatePlatform(this);
|
| 213 |
-
try { await child.teaqlSaveWithinGraph(context, service, graph, scope); }
|
| 214 |
-
catch (error) {
|
| 215 |
-
if (!(error instanceof CheckException)) throw error;
|
| 216 |
-
const prefix = ObjectLocation.property("order_status_list").index(index);
|
| 217 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 218 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 219 |
-
})));
|
| 220 |
-
}
|
| 221 |
-
}
|
| 222 |
-
for (const [index, child] of (this as any)._customerList.entries()) {
|
| 223 |
-
child.teaqlAttachRoot((this as any)._root);
|
| 224 |
-
child.updatePlatform(this);
|
| 225 |
-
try { await child.teaqlSaveWithinGraph(context, service, graph, scope); }
|
| 226 |
-
catch (error) {
|
| 227 |
-
if (!(error instanceof CheckException)) throw error;
|
| 228 |
-
const prefix = ObjectLocation.property("customer_list").index(index);
|
| 229 |
-
throw new CheckException(error.violations.map(violation => ({
|
| 230 |
-
...violation, location: violation.location.prefixedBy(prefix),
|
| 231 |
-
})));
|
| 232 |
-
}
|
| 233 |
-
}
|
| 234 |
-
service.afterGraphCommit(() => {
|
| 235 |
-
(this as any)._root.clearEntity(newKey);
|
| 236 |
-
if ((this as any).version !== undefined) (this as any)._root.acceptCommittedVersion(newKey, Number((this as any).version));
|
| 237 |
-
});
|
| 238 |
-
return this;
|
| 239 |
-
}
|
| 240 |
-
|
| 241 |
-
private teaqlMutationPayload(): Record<string, unknown> {
|
| 242 |
-
return {
|
| 243 |
-
"id": this.id,
|
| 244 |
-
"name": this.name,
|
| 245 |
-
"version": this.version
|
| 246 |
-
};
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
updateId(value: string): this {
|
| 250 |
-
this.id = value;
|
| 251 |
-
this.markLoaded("id");
|
| 252 |
-
(this as any)._root.set(this.teaqlEntityKey(), "id", value);
|
| 253 |
-
return this;
|
| 254 |
-
}
|
| 255 |
-
|
| 256 |
-
updateName(value: string): this {
|
| 257 |
-
this.name = value;
|
| 258 |
-
this.markLoaded("name");
|
| 259 |
-
(this as any)._root.set(this.teaqlEntityKey(), "name", value);
|
| 260 |
-
return this;
|
| 261 |
-
}
|
| 262 |
-
|
| 263 |
-
updateVersion(value: number): this {
|
| 264 |
-
this.version = value;
|
| 265 |
-
this.markLoaded("version");
|
| 266 |
-
(this as any)._root.set(this.teaqlEntityKey(), "version", value);
|
| 267 |
-
return this;
|
| 268 |
-
}
|
| 269 |
-
orderStatusList(): OrderStatus[] {
|
| 270 |
-
return (this as any)._orderStatusList;
|
| 271 |
-
}
|
| 272 |
-
|
| 273 |
-
customerList(): Customer[] {
|
| 274 |
-
return (this as any)._customerList;
|
| 275 |
-
}
|
| 276 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/requests/CustomerOrderRequest.ts
DELETED
|
@@ -1,1206 +0,0 @@
|
|
| 1 |
-
import { EntityRoot, SelectQuery, SmartList, TeaQLDataService, TeaQLPage, UserContext, executeRelationFacets } from '../../teaql-ts';
|
| 2 |
-
import { CustomerOrder } from '../models/CustomerOrder';
|
| 3 |
-
import { mergeGeneratedScalarSearch, DynamicSearchWarning } from 'teaql-ts';
|
| 4 |
-
import { GENERATED_SEARCH_MODELS } from '../../generated-search-models';
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
export class CustomerOrderRequest {
|
| 9 |
-
private query: SelectQuery;
|
| 10 |
-
private filters: any[] = [];
|
| 11 |
-
private _purpose: string | undefined;
|
| 12 |
-
private _comment: string | undefined;
|
| 13 |
-
private _pageCountAlias: string | undefined;
|
| 14 |
-
private _pageCountMethod: "count" | "countAs" | undefined;
|
| 15 |
-
private _dynamicSearchWarnings: DynamicSearchWarning[] = [];
|
| 16 |
-
|
| 17 |
-
constructor(minimal = false) {
|
| 18 |
-
this.query = new SelectQuery("CustomerOrder");
|
| 19 |
-
this.filters.push({ version: { "$gte": 1 } });
|
| 20 |
-
if (minimal) {
|
| 21 |
-
this.selectId();
|
| 22 |
-
this.selectVersion();
|
| 23 |
-
}
|
| 24 |
-
else this.selectSelfFields();
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
comment(c: string): this {
|
| 28 |
-
this.query.comment(c);
|
| 29 |
-
this._comment = c;
|
| 30 |
-
return this;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
filterByJson(source: unknown, warn?: (warning: DynamicSearchWarning) => void): this {
|
| 34 |
-
const base = this.query.clone();
|
| 35 |
-
if (this.filters.length > 0) base.filter({ "$and": this.filters });
|
| 36 |
-
const merged = mergeGeneratedScalarSearch(base, source, GENERATED_SEARCH_MODELS, warn);
|
| 37 |
-
this.query = merged.query as SelectQuery;
|
| 38 |
-
this.filters = this.query.filterCondition ? [this.query.filterCondition] : [];
|
| 39 |
-
this._dynamicSearchWarnings.push(...merged.warnings);
|
| 40 |
-
return this;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
get dynamicSearchWarnings(): readonly DynamicSearchWarning[] {
|
| 44 |
-
return this._dynamicSearchWarnings.map(warning => ({ ...warning }));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
purpose(p: string): ExecutableCustomerOrderRequest {
|
| 48 |
-
this.query.purpose(p);
|
| 49 |
-
this._purpose = p;
|
| 50 |
-
return new ExecutableCustomerOrderRequest(
|
| 51 |
-
(context) => this.executeForListInternal(context),
|
| 52 |
-
(context) => this.executeForRowsInternal(context),
|
| 53 |
-
(context, offset, limit) => this.executeForPageInternal(context, offset, limit),
|
| 54 |
-
(context, chunkSize) => this.executeForStreamInternal(context, chunkSize),
|
| 55 |
-
() => this.limit(1),
|
| 56 |
-
(c) => this.comment(c),
|
| 57 |
-
() => this.ensureIntent());
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
optimizeForContinuousPageFetch(): this {
|
| 61 |
-
this.query.optimizeForContinuousPageFetch();
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
optimizeForContinuousPageFetchWith(namespace: string, ttlSeconds: number): this {
|
| 66 |
-
this.query.optimizeForContinuousPageFetchWith(namespace, ttlSeconds);
|
| 67 |
-
return this;
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
optimizePaginationWithIdSet(): this {
|
| 71 |
-
this.query.optimizePaginationWithIdSet();
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
optimizePaginationWithIdSetConfig(namespace: string, ttlSeconds: number, maxIds: number): this {
|
| 76 |
-
this.query.optimizePaginationWithIdSetConfig(namespace, ttlSeconds, maxIds);
|
| 77 |
-
return this;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
topNProbeParentThreshold(threshold: number): this {
|
| 81 |
-
this.query.topNProbeParentThreshold(threshold);
|
| 82 |
-
return this;
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
limit(n: number): this {
|
| 86 |
-
this.query.limit(n);
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
offset(n: number): this {
|
| 91 |
-
this.query.offset(n);
|
| 92 |
-
return this;
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
toQuery(): SelectQuery {
|
| 96 |
-
if (this.filters.length > 0) {
|
| 97 |
-
this.query.filter({ "$and": this.filters });
|
| 98 |
-
}
|
| 99 |
-
return this.query;
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
withDeletedRows(): this {
|
| 103 |
-
this.filters = this.filters.filter(filter => !("version" in filter));
|
| 104 |
-
return this;
|
| 105 |
-
}
|
| 106 |
-
|
| 107 |
-
deletedRowsOnly(): this {
|
| 108 |
-
this.withDeletedRows();
|
| 109 |
-
this.filters.push({ version: { "$lte": -1 } });
|
| 110 |
-
return this;
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
selectSelfFields(): this {
|
| 114 |
-
this.query.select(["id", "customer", "status", "orderNumber", "orderDate", "totalAmount", "version"]);
|
| 115 |
-
return this;
|
| 116 |
-
}
|
| 117 |
-
|
| 118 |
-
selectId(): this {
|
| 119 |
-
this.query.select(["id"]);
|
| 120 |
-
return this;
|
| 121 |
-
}
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
selectOrderNumber(): this {
|
| 126 |
-
this.query.select(["orderNumber"]);
|
| 127 |
-
return this;
|
| 128 |
-
}
|
| 129 |
-
|
| 130 |
-
selectOrderDate(): this {
|
| 131 |
-
this.query.select(["orderDate"]);
|
| 132 |
-
return this;
|
| 133 |
-
}
|
| 134 |
-
|
| 135 |
-
selectTotalAmount(): this {
|
| 136 |
-
this.query.select(["totalAmount"]);
|
| 137 |
-
return this;
|
| 138 |
-
}
|
| 139 |
-
|
| 140 |
-
selectVersion(): this {
|
| 141 |
-
this.query.select(["version"]);
|
| 142 |
-
return this;
|
| 143 |
-
}
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
selectCustomerWith(request: { toQuery(): SelectQuery }): this {
|
| 147 |
-
this.query.select(["customer"]);
|
| 148 |
-
this.query.relationQuery(
|
| 149 |
-
"customer", request.toQuery(), "customer", "id", false,
|
| 150 |
-
{ kind: "relation-select", method: "selectCustomerWith", relation: "customer" });
|
| 151 |
-
return this;
|
| 152 |
-
}
|
| 153 |
-
selectStatusWith(request: { toQuery(): SelectQuery }): this {
|
| 154 |
-
this.query.select(["status"]);
|
| 155 |
-
this.query.relationQuery(
|
| 156 |
-
"status", request.toQuery(), "status", "id", false,
|
| 157 |
-
{ kind: "relation-select", method: "selectStatusWith", relation: "status" });
|
| 158 |
-
return this;
|
| 159 |
-
}
|
| 160 |
-
|
| 161 |
-
withCustomerMatching(request: { toQuery(): SelectQuery }): this {
|
| 162 |
-
this.filters.push({
|
| 163 |
-
"customer": {
|
| 164 |
-
"$inSubquery": { query: request.toQuery(), field: "id" },
|
| 165 |
-
},
|
| 166 |
-
});
|
| 167 |
-
return this;
|
| 168 |
-
}
|
| 169 |
-
|
| 170 |
-
withoutCustomerMatching(request: { toQuery(): SelectQuery }): this {
|
| 171 |
-
this.filters.push({
|
| 172 |
-
"customer": {
|
| 173 |
-
"$notInSubquery": { query: request.toQuery(), field: "id" },
|
| 174 |
-
},
|
| 175 |
-
});
|
| 176 |
-
return this;
|
| 177 |
-
}
|
| 178 |
-
withStatusMatching(request: { toQuery(): SelectQuery }): this {
|
| 179 |
-
this.filters.push({
|
| 180 |
-
"status": {
|
| 181 |
-
"$inSubquery": { query: request.toQuery(), field: "id" },
|
| 182 |
-
},
|
| 183 |
-
});
|
| 184 |
-
return this;
|
| 185 |
-
}
|
| 186 |
-
|
| 187 |
-
withoutStatusMatching(request: { toQuery(): SelectQuery }): this {
|
| 188 |
-
this.filters.push({
|
| 189 |
-
"status": {
|
| 190 |
-
"$notInSubquery": { query: request.toQuery(), field: "id" },
|
| 191 |
-
},
|
| 192 |
-
});
|
| 193 |
-
return this;
|
| 194 |
-
}
|
| 195 |
-
|
| 196 |
-
selectOrderItemListWith(request: { toQuery(): SelectQuery }): this {
|
| 197 |
-
this.query.relationQuery(
|
| 198 |
-
"orderItemList", request.toQuery(), "id", "customerOrder", true,
|
| 199 |
-
{ kind: "relation-select", method: "selectOrderItemListWith", relation: "orderItemList" });
|
| 200 |
-
return this;
|
| 201 |
-
}
|
| 202 |
-
|
| 203 |
-
haveOrderItems(): this {
|
| 204 |
-
return this.withOrderItemListMatching({
|
| 205 |
-
toQuery: () => new SelectQuery("OrderItem"),
|
| 206 |
-
});
|
| 207 |
-
}
|
| 208 |
-
|
| 209 |
-
haveNoOrderItems(): this {
|
| 210 |
-
return this.withoutOrderItemListMatching({
|
| 211 |
-
toQuery: () => new SelectQuery("OrderItem"),
|
| 212 |
-
});
|
| 213 |
-
}
|
| 214 |
-
|
| 215 |
-
withOrderItemListMatching(request: { toQuery(): SelectQuery }): this {
|
| 216 |
-
this.filters.push({
|
| 217 |
-
"id": {
|
| 218 |
-
"$inSubquery": {
|
| 219 |
-
query: request.toQuery(), field: "customerOrder",
|
| 220 |
-
},
|
| 221 |
-
},
|
| 222 |
-
});
|
| 223 |
-
return this;
|
| 224 |
-
}
|
| 225 |
-
|
| 226 |
-
withoutOrderItemListMatching(request: { toQuery(): SelectQuery }): this {
|
| 227 |
-
this.filters.push({
|
| 228 |
-
"id": {
|
| 229 |
-
"$notInSubquery": {
|
| 230 |
-
query: request.toQuery(), field: "customerOrder",
|
| 231 |
-
},
|
| 232 |
-
},
|
| 233 |
-
});
|
| 234 |
-
return this;
|
| 235 |
-
}
|
| 236 |
-
|
| 237 |
-
countOrderItems(): this {
|
| 238 |
-
return this.countOrderItemsAs("countOrderItems");
|
| 239 |
-
}
|
| 240 |
-
|
| 241 |
-
countOrderItemsAs(alias: string): this {
|
| 242 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 243 |
-
this.countOrderItemsWith(alias, { toQuery: () => query });
|
| 244 |
-
this.query.relationAggregates[this.query.relationAggregates.length - 1].operation = {
|
| 245 |
-
kind: "relation-count", method: "countOrderItemsAs", relation: "orderItemList", alias };
|
| 246 |
-
return this;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
countOrderItemsWith(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 250 |
-
const query = child.toQuery().clone();
|
| 251 |
-
query.aggregateItems = [];
|
| 252 |
-
query.aggregate("Count", "id", alias);
|
| 253 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 254 |
-
{ kind: "relation-count", method: "countOrderItemsWith", relation: "orderItemList", alias });
|
| 255 |
-
return this;
|
| 256 |
-
}
|
| 257 |
-
|
| 258 |
-
minQuantityOfOrderItems(): this {
|
| 259 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 260 |
-
return this.minQuantityOfOrderItemsAs(
|
| 261 |
-
"minOfQuantityOfOrderItems", { toQuery: () => query });
|
| 262 |
-
}
|
| 263 |
-
|
| 264 |
-
minQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 265 |
-
const query = child.toQuery().clone();
|
| 266 |
-
query.aggregateItems = [];
|
| 267 |
-
query.aggregate("min", "quantity", alias);
|
| 268 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 269 |
-
{ kind: "aggregate", method: "minQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 270 |
-
return this;
|
| 271 |
-
}
|
| 272 |
-
maxQuantityOfOrderItems(): this {
|
| 273 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 274 |
-
return this.maxQuantityOfOrderItemsAs(
|
| 275 |
-
"maxOfQuantityOfOrderItems", { toQuery: () => query });
|
| 276 |
-
}
|
| 277 |
-
|
| 278 |
-
maxQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 279 |
-
const query = child.toQuery().clone();
|
| 280 |
-
query.aggregateItems = [];
|
| 281 |
-
query.aggregate("max", "quantity", alias);
|
| 282 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 283 |
-
{ kind: "aggregate", method: "maxQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 284 |
-
return this;
|
| 285 |
-
}
|
| 286 |
-
sumQuantityOfOrderItems(): this {
|
| 287 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 288 |
-
return this.sumQuantityOfOrderItemsAs(
|
| 289 |
-
"sumOfQuantityOfOrderItems", { toQuery: () => query });
|
| 290 |
-
}
|
| 291 |
-
|
| 292 |
-
sumQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 293 |
-
const query = child.toQuery().clone();
|
| 294 |
-
query.aggregateItems = [];
|
| 295 |
-
query.aggregate("sum", "quantity", alias);
|
| 296 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 297 |
-
{ kind: "aggregate", method: "sumQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 298 |
-
return this;
|
| 299 |
-
}
|
| 300 |
-
avgQuantityOfOrderItems(): this {
|
| 301 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 302 |
-
return this.avgQuantityOfOrderItemsAs(
|
| 303 |
-
"avgOfQuantityOfOrderItems", { toQuery: () => query });
|
| 304 |
-
}
|
| 305 |
-
|
| 306 |
-
avgQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 307 |
-
const query = child.toQuery().clone();
|
| 308 |
-
query.aggregateItems = [];
|
| 309 |
-
query.aggregate("avg", "quantity", alias);
|
| 310 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 311 |
-
{ kind: "aggregate", method: "avgQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 312 |
-
return this;
|
| 313 |
-
}
|
| 314 |
-
standardDeviationQuantityOfOrderItems(): this {
|
| 315 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 316 |
-
return this.standardDeviationQuantityOfOrderItemsAs(
|
| 317 |
-
"standardDeviationOfQuantityOfOrderItems", { toQuery: () => query });
|
| 318 |
-
}
|
| 319 |
-
|
| 320 |
-
standardDeviationQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 321 |
-
const query = child.toQuery().clone();
|
| 322 |
-
query.aggregateItems = [];
|
| 323 |
-
query.aggregate("stddev", "quantity", alias);
|
| 324 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 325 |
-
{ kind: "aggregate", method: "standardDeviationQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 326 |
-
return this;
|
| 327 |
-
}
|
| 328 |
-
squareRootOfPopulationStandardDeviationQuantityOfOrderItems(): this {
|
| 329 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 330 |
-
return this.squareRootOfPopulationStandardDeviationQuantityOfOrderItemsAs(
|
| 331 |
-
"squareRootOfPopulationStandardDeviationOfQuantityOfOrderItems", { toQuery: () => query });
|
| 332 |
-
}
|
| 333 |
-
|
| 334 |
-
squareRootOfPopulationStandardDeviationQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 335 |
-
const query = child.toQuery().clone();
|
| 336 |
-
query.aggregateItems = [];
|
| 337 |
-
query.aggregate("stddev_pop", "quantity", alias);
|
| 338 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 339 |
-
{ kind: "aggregate", method: "squareRootOfPopulationStandardDeviationQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 340 |
-
return this;
|
| 341 |
-
}
|
| 342 |
-
sampleVarianceQuantityOfOrderItems(): this {
|
| 343 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 344 |
-
return this.sampleVarianceQuantityOfOrderItemsAs(
|
| 345 |
-
"sampleVarianceOfQuantityOfOrderItems", { toQuery: () => query });
|
| 346 |
-
}
|
| 347 |
-
|
| 348 |
-
sampleVarianceQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 349 |
-
const query = child.toQuery().clone();
|
| 350 |
-
query.aggregateItems = [];
|
| 351 |
-
query.aggregate("var_samp", "quantity", alias);
|
| 352 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 353 |
-
{ kind: "aggregate", method: "sampleVarianceQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 354 |
-
return this;
|
| 355 |
-
}
|
| 356 |
-
samplePopulationVarianceQuantityOfOrderItems(): this {
|
| 357 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 358 |
-
return this.samplePopulationVarianceQuantityOfOrderItemsAs(
|
| 359 |
-
"samplePopulationVarianceOfQuantityOfOrderItems", { toQuery: () => query });
|
| 360 |
-
}
|
| 361 |
-
|
| 362 |
-
samplePopulationVarianceQuantityOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 363 |
-
const query = child.toQuery().clone();
|
| 364 |
-
query.aggregateItems = [];
|
| 365 |
-
query.aggregate("var_pop", "quantity", alias);
|
| 366 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 367 |
-
{ kind: "aggregate", method: "samplePopulationVarianceQuantityOfOrderItemsAs", relation: "orderItemList", alias });
|
| 368 |
-
return this;
|
| 369 |
-
}
|
| 370 |
-
minUnitPriceOfOrderItems(): this {
|
| 371 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 372 |
-
return this.minUnitPriceOfOrderItemsAs(
|
| 373 |
-
"minOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 374 |
-
}
|
| 375 |
-
|
| 376 |
-
minUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 377 |
-
const query = child.toQuery().clone();
|
| 378 |
-
query.aggregateItems = [];
|
| 379 |
-
query.aggregate("min", "unitPrice", alias);
|
| 380 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 381 |
-
{ kind: "aggregate", method: "minUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 382 |
-
return this;
|
| 383 |
-
}
|
| 384 |
-
maxUnitPriceOfOrderItems(): this {
|
| 385 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 386 |
-
return this.maxUnitPriceOfOrderItemsAs(
|
| 387 |
-
"maxOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 388 |
-
}
|
| 389 |
-
|
| 390 |
-
maxUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 391 |
-
const query = child.toQuery().clone();
|
| 392 |
-
query.aggregateItems = [];
|
| 393 |
-
query.aggregate("max", "unitPrice", alias);
|
| 394 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 395 |
-
{ kind: "aggregate", method: "maxUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 396 |
-
return this;
|
| 397 |
-
}
|
| 398 |
-
sumUnitPriceOfOrderItems(): this {
|
| 399 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 400 |
-
return this.sumUnitPriceOfOrderItemsAs(
|
| 401 |
-
"sumOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 402 |
-
}
|
| 403 |
-
|
| 404 |
-
sumUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 405 |
-
const query = child.toQuery().clone();
|
| 406 |
-
query.aggregateItems = [];
|
| 407 |
-
query.aggregate("sum", "unitPrice", alias);
|
| 408 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 409 |
-
{ kind: "aggregate", method: "sumUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 410 |
-
return this;
|
| 411 |
-
}
|
| 412 |
-
avgUnitPriceOfOrderItems(): this {
|
| 413 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 414 |
-
return this.avgUnitPriceOfOrderItemsAs(
|
| 415 |
-
"avgOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 416 |
-
}
|
| 417 |
-
|
| 418 |
-
avgUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 419 |
-
const query = child.toQuery().clone();
|
| 420 |
-
query.aggregateItems = [];
|
| 421 |
-
query.aggregate("avg", "unitPrice", alias);
|
| 422 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 423 |
-
{ kind: "aggregate", method: "avgUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 424 |
-
return this;
|
| 425 |
-
}
|
| 426 |
-
standardDeviationUnitPriceOfOrderItems(): this {
|
| 427 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 428 |
-
return this.standardDeviationUnitPriceOfOrderItemsAs(
|
| 429 |
-
"standardDeviationOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 430 |
-
}
|
| 431 |
-
|
| 432 |
-
standardDeviationUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 433 |
-
const query = child.toQuery().clone();
|
| 434 |
-
query.aggregateItems = [];
|
| 435 |
-
query.aggregate("stddev", "unitPrice", alias);
|
| 436 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 437 |
-
{ kind: "aggregate", method: "standardDeviationUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 438 |
-
return this;
|
| 439 |
-
}
|
| 440 |
-
squareRootOfPopulationStandardDeviationUnitPriceOfOrderItems(): this {
|
| 441 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 442 |
-
return this.squareRootOfPopulationStandardDeviationUnitPriceOfOrderItemsAs(
|
| 443 |
-
"squareRootOfPopulationStandardDeviationOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 444 |
-
}
|
| 445 |
-
|
| 446 |
-
squareRootOfPopulationStandardDeviationUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 447 |
-
const query = child.toQuery().clone();
|
| 448 |
-
query.aggregateItems = [];
|
| 449 |
-
query.aggregate("stddev_pop", "unitPrice", alias);
|
| 450 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 451 |
-
{ kind: "aggregate", method: "squareRootOfPopulationStandardDeviationUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 452 |
-
return this;
|
| 453 |
-
}
|
| 454 |
-
sampleVarianceUnitPriceOfOrderItems(): this {
|
| 455 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 456 |
-
return this.sampleVarianceUnitPriceOfOrderItemsAs(
|
| 457 |
-
"sampleVarianceOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 458 |
-
}
|
| 459 |
-
|
| 460 |
-
sampleVarianceUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 461 |
-
const query = child.toQuery().clone();
|
| 462 |
-
query.aggregateItems = [];
|
| 463 |
-
query.aggregate("var_samp", "unitPrice", alias);
|
| 464 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 465 |
-
{ kind: "aggregate", method: "sampleVarianceUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 466 |
-
return this;
|
| 467 |
-
}
|
| 468 |
-
samplePopulationVarianceUnitPriceOfOrderItems(): this {
|
| 469 |
-
const query = new SelectQuery("OrderItem").filter({ version: { "$gte": 1 } });
|
| 470 |
-
return this.samplePopulationVarianceUnitPriceOfOrderItemsAs(
|
| 471 |
-
"samplePopulationVarianceOfUnitPriceOfOrderItems", { toQuery: () => query });
|
| 472 |
-
}
|
| 473 |
-
|
| 474 |
-
samplePopulationVarianceUnitPriceOfOrderItemsAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 475 |
-
const query = child.toQuery().clone();
|
| 476 |
-
query.aggregateItems = [];
|
| 477 |
-
query.aggregate("var_pop", "unitPrice", alias);
|
| 478 |
-
this.query.relationAggregate("orderItemList", alias, query, true,
|
| 479 |
-
{ kind: "aggregate", method: "samplePopulationVarianceUnitPriceOfOrderItemsAs", relation: "orderItemList", alias });
|
| 480 |
-
return this;
|
| 481 |
-
}
|
| 482 |
-
|
| 483 |
-
withIdIs(val: any): this {
|
| 484 |
-
this.filters.push({ "id": { "$eq": val } });
|
| 485 |
-
return this;
|
| 486 |
-
}
|
| 487 |
-
|
| 488 |
-
withIdIsNot(val: any): this {
|
| 489 |
-
this.filters.push({ "id": { "$ne": val } });
|
| 490 |
-
return this;
|
| 491 |
-
}
|
| 492 |
-
|
| 493 |
-
withIdIn(...vals: any[]): this {
|
| 494 |
-
this.filters.push({ "id": { "$in": vals } });
|
| 495 |
-
return this;
|
| 496 |
-
}
|
| 497 |
-
|
| 498 |
-
withIdNotIn(...vals: any[]): this {
|
| 499 |
-
this.filters.push({ "id": { "$notIn": vals } });
|
| 500 |
-
return this;
|
| 501 |
-
}
|
| 502 |
-
|
| 503 |
-
withIdGreaterThan(val: any): this {
|
| 504 |
-
this.filters.push({ "id": { "$gt": val } });
|
| 505 |
-
return this;
|
| 506 |
-
}
|
| 507 |
-
|
| 508 |
-
withIdGreaterThanOrEqualTo(val: any): this {
|
| 509 |
-
this.filters.push({ "id": { "$gte": val } });
|
| 510 |
-
return this;
|
| 511 |
-
}
|
| 512 |
-
|
| 513 |
-
withIdLessThan(val: any): this {
|
| 514 |
-
this.filters.push({ "id": { "$lt": val } });
|
| 515 |
-
return this;
|
| 516 |
-
}
|
| 517 |
-
|
| 518 |
-
withIdLessThanOrEqualTo(val: any): this {
|
| 519 |
-
this.filters.push({ "id": { "$lte": val } });
|
| 520 |
-
return this;
|
| 521 |
-
}
|
| 522 |
-
|
| 523 |
-
withIdBetween(lower: any, upper: any): this {
|
| 524 |
-
this.filters.push({ "id": { "$between": [lower, upper] } });
|
| 525 |
-
return this;
|
| 526 |
-
}
|
| 527 |
-
|
| 528 |
-
withIdIsKnown(): this {
|
| 529 |
-
this.filters.push({ "id": { "$isNull": false } });
|
| 530 |
-
return this;
|
| 531 |
-
}
|
| 532 |
-
|
| 533 |
-
withIdIsUnknown(): this {
|
| 534 |
-
this.filters.push({ "id": { "$isNull": true } });
|
| 535 |
-
return this;
|
| 536 |
-
}
|
| 537 |
-
|
| 538 |
-
filterByCustomer(val: any): this {
|
| 539 |
-
this.filters.push({ "customer": { "$eq": val } });
|
| 540 |
-
return this;
|
| 541 |
-
}
|
| 542 |
-
|
| 543 |
-
filterByCustomerIn(...vals: any[]): this {
|
| 544 |
-
this.filters.push({ "customer": { "$in": vals } });
|
| 545 |
-
return this;
|
| 546 |
-
}
|
| 547 |
-
|
| 548 |
-
withCustomerIsKnown(): this {
|
| 549 |
-
this.filters.push({ "customer": { "$isNull": false } });
|
| 550 |
-
return this;
|
| 551 |
-
}
|
| 552 |
-
|
| 553 |
-
withCustomerIsUnknown(): this {
|
| 554 |
-
this.filters.push({ "customer": { "$isNull": true } });
|
| 555 |
-
return this;
|
| 556 |
-
}
|
| 557 |
-
|
| 558 |
-
filterByStatus(val: any): this {
|
| 559 |
-
this.filters.push({ "status": { "$eq": val } });
|
| 560 |
-
return this;
|
| 561 |
-
}
|
| 562 |
-
|
| 563 |
-
filterByStatusIn(...vals: any[]): this {
|
| 564 |
-
this.filters.push({ "status": { "$in": vals } });
|
| 565 |
-
return this;
|
| 566 |
-
}
|
| 567 |
-
|
| 568 |
-
withStatusIsKnown(): this {
|
| 569 |
-
this.filters.push({ "status": { "$isNull": false } });
|
| 570 |
-
return this;
|
| 571 |
-
}
|
| 572 |
-
|
| 573 |
-
withStatusIsUnknown(): this {
|
| 574 |
-
this.filters.push({ "status": { "$isNull": true } });
|
| 575 |
-
return this;
|
| 576 |
-
}
|
| 577 |
-
withStatusIsNew(): this {
|
| 578 |
-
this.filters.push({ "status": { "$eq": "1001" } });
|
| 579 |
-
return this;
|
| 580 |
-
}
|
| 581 |
-
withStatusIsPaid(): this {
|
| 582 |
-
this.filters.push({ "status": { "$eq": "1002" } });
|
| 583 |
-
return this;
|
| 584 |
-
}
|
| 585 |
-
withStatusIsCancelled(): this {
|
| 586 |
-
this.filters.push({ "status": { "$eq": "1003" } });
|
| 587 |
-
return this;
|
| 588 |
-
}
|
| 589 |
-
|
| 590 |
-
withOrderNumberContaining(val: string): this {
|
| 591 |
-
this.filters.push({ "orderNumber": { "$contains": val } });
|
| 592 |
-
return this;
|
| 593 |
-
}
|
| 594 |
-
|
| 595 |
-
withOrderNumberIs(val: string): this {
|
| 596 |
-
this.filters.push({ "orderNumber": { "$eq": val } });
|
| 597 |
-
return this;
|
| 598 |
-
}
|
| 599 |
-
|
| 600 |
-
withOrderNumberIsNot(val: any): this {
|
| 601 |
-
this.filters.push({ "orderNumber": { "$ne": val } });
|
| 602 |
-
return this;
|
| 603 |
-
}
|
| 604 |
-
|
| 605 |
-
withOrderNumberIn(...vals: any[]): this {
|
| 606 |
-
this.filters.push({ "orderNumber": { "$in": vals } });
|
| 607 |
-
return this;
|
| 608 |
-
}
|
| 609 |
-
|
| 610 |
-
withOrderNumberNotIn(...vals: any[]): this {
|
| 611 |
-
this.filters.push({ "orderNumber": { "$notIn": vals } });
|
| 612 |
-
return this;
|
| 613 |
-
}
|
| 614 |
-
|
| 615 |
-
withOrderNumberGreaterThan(val: any): this {
|
| 616 |
-
this.filters.push({ "orderNumber": { "$gt": val } });
|
| 617 |
-
return this;
|
| 618 |
-
}
|
| 619 |
-
|
| 620 |
-
withOrderNumberGreaterThanOrEqualTo(val: any): this {
|
| 621 |
-
this.filters.push({ "orderNumber": { "$gte": val } });
|
| 622 |
-
return this;
|
| 623 |
-
}
|
| 624 |
-
|
| 625 |
-
withOrderNumberLessThan(val: any): this {
|
| 626 |
-
this.filters.push({ "orderNumber": { "$lt": val } });
|
| 627 |
-
return this;
|
| 628 |
-
}
|
| 629 |
-
|
| 630 |
-
withOrderNumberLessThanOrEqualTo(val: any): this {
|
| 631 |
-
this.filters.push({ "orderNumber": { "$lte": val } });
|
| 632 |
-
return this;
|
| 633 |
-
}
|
| 634 |
-
|
| 635 |
-
withOrderNumberBetween(lower: any, upper: any): this {
|
| 636 |
-
this.filters.push({ "orderNumber": { "$between": [lower, upper] } });
|
| 637 |
-
return this;
|
| 638 |
-
}
|
| 639 |
-
|
| 640 |
-
withOrderNumberIsKnown(): this {
|
| 641 |
-
this.filters.push({ "orderNumber": { "$isNull": false } });
|
| 642 |
-
return this;
|
| 643 |
-
}
|
| 644 |
-
|
| 645 |
-
withOrderNumberIsUnknown(): this {
|
| 646 |
-
this.filters.push({ "orderNumber": { "$isNull": true } });
|
| 647 |
-
return this;
|
| 648 |
-
}
|
| 649 |
-
withOrderNumberNotContaining(val: string): this {
|
| 650 |
-
this.filters.push({ "orderNumber": { "$notContains": val } });
|
| 651 |
-
return this;
|
| 652 |
-
}
|
| 653 |
-
|
| 654 |
-
withOrderNumberStartingWith(val: string): this {
|
| 655 |
-
this.filters.push({ "orderNumber": { "$startsWith": val } });
|
| 656 |
-
return this;
|
| 657 |
-
}
|
| 658 |
-
|
| 659 |
-
withOrderNumberNotStartingWith(val: string): this {
|
| 660 |
-
this.filters.push({ "orderNumber": { "$notStartsWith": val } });
|
| 661 |
-
return this;
|
| 662 |
-
}
|
| 663 |
-
|
| 664 |
-
withOrderNumberEndingWith(val: string): this {
|
| 665 |
-
this.filters.push({ "orderNumber": { "$endsWith": val } });
|
| 666 |
-
return this;
|
| 667 |
-
}
|
| 668 |
-
|
| 669 |
-
withOrderNumberNotEndingWith(val: string): this {
|
| 670 |
-
this.filters.push({ "orderNumber": { "$notEndsWith": val } });
|
| 671 |
-
return this;
|
| 672 |
-
}
|
| 673 |
-
|
| 674 |
-
withOrderNumberSoundingLike(val: string): this {
|
| 675 |
-
this.filters.push({ "orderNumber": { "$soundLike": val } });
|
| 676 |
-
return this;
|
| 677 |
-
}
|
| 678 |
-
|
| 679 |
-
withOrderDateIs(val: any): this {
|
| 680 |
-
this.filters.push({ "orderDate": { "$eq": val } });
|
| 681 |
-
return this;
|
| 682 |
-
}
|
| 683 |
-
|
| 684 |
-
withOrderDateIsNot(val: any): this {
|
| 685 |
-
this.filters.push({ "orderDate": { "$ne": val } });
|
| 686 |
-
return this;
|
| 687 |
-
}
|
| 688 |
-
|
| 689 |
-
withOrderDateIn(...vals: any[]): this {
|
| 690 |
-
this.filters.push({ "orderDate": { "$in": vals } });
|
| 691 |
-
return this;
|
| 692 |
-
}
|
| 693 |
-
|
| 694 |
-
withOrderDateNotIn(...vals: any[]): this {
|
| 695 |
-
this.filters.push({ "orderDate": { "$notIn": vals } });
|
| 696 |
-
return this;
|
| 697 |
-
}
|
| 698 |
-
|
| 699 |
-
withOrderDateGreaterThan(val: any): this {
|
| 700 |
-
this.filters.push({ "orderDate": { "$gt": val } });
|
| 701 |
-
return this;
|
| 702 |
-
}
|
| 703 |
-
|
| 704 |
-
withOrderDateGreaterThanOrEqualTo(val: any): this {
|
| 705 |
-
this.filters.push({ "orderDate": { "$gte": val } });
|
| 706 |
-
return this;
|
| 707 |
-
}
|
| 708 |
-
|
| 709 |
-
withOrderDateLessThan(val: any): this {
|
| 710 |
-
this.filters.push({ "orderDate": { "$lt": val } });
|
| 711 |
-
return this;
|
| 712 |
-
}
|
| 713 |
-
|
| 714 |
-
withOrderDateLessThanOrEqualTo(val: any): this {
|
| 715 |
-
this.filters.push({ "orderDate": { "$lte": val } });
|
| 716 |
-
return this;
|
| 717 |
-
}
|
| 718 |
-
|
| 719 |
-
withOrderDateBetween(lower: any, upper: any): this {
|
| 720 |
-
this.filters.push({ "orderDate": { "$between": [lower, upper] } });
|
| 721 |
-
return this;
|
| 722 |
-
}
|
| 723 |
-
|
| 724 |
-
withOrderDateIsKnown(): this {
|
| 725 |
-
this.filters.push({ "orderDate": { "$isNull": false } });
|
| 726 |
-
return this;
|
| 727 |
-
}
|
| 728 |
-
|
| 729 |
-
withOrderDateIsUnknown(): this {
|
| 730 |
-
this.filters.push({ "orderDate": { "$isNull": true } });
|
| 731 |
-
return this;
|
| 732 |
-
}
|
| 733 |
-
|
| 734 |
-
withTotalAmountIs(val: any): this {
|
| 735 |
-
this.filters.push({ "totalAmount": { "$eq": val } });
|
| 736 |
-
return this;
|
| 737 |
-
}
|
| 738 |
-
|
| 739 |
-
withTotalAmountIsNot(val: any): this {
|
| 740 |
-
this.filters.push({ "totalAmount": { "$ne": val } });
|
| 741 |
-
return this;
|
| 742 |
-
}
|
| 743 |
-
|
| 744 |
-
withTotalAmountIn(...vals: any[]): this {
|
| 745 |
-
this.filters.push({ "totalAmount": { "$in": vals } });
|
| 746 |
-
return this;
|
| 747 |
-
}
|
| 748 |
-
|
| 749 |
-
withTotalAmountNotIn(...vals: any[]): this {
|
| 750 |
-
this.filters.push({ "totalAmount": { "$notIn": vals } });
|
| 751 |
-
return this;
|
| 752 |
-
}
|
| 753 |
-
|
| 754 |
-
withTotalAmountGreaterThan(val: any): this {
|
| 755 |
-
this.filters.push({ "totalAmount": { "$gt": val } });
|
| 756 |
-
return this;
|
| 757 |
-
}
|
| 758 |
-
|
| 759 |
-
withTotalAmountGreaterThanOrEqualTo(val: any): this {
|
| 760 |
-
this.filters.push({ "totalAmount": { "$gte": val } });
|
| 761 |
-
return this;
|
| 762 |
-
}
|
| 763 |
-
|
| 764 |
-
withTotalAmountLessThan(val: any): this {
|
| 765 |
-
this.filters.push({ "totalAmount": { "$lt": val } });
|
| 766 |
-
return this;
|
| 767 |
-
}
|
| 768 |
-
|
| 769 |
-
withTotalAmountLessThanOrEqualTo(val: any): this {
|
| 770 |
-
this.filters.push({ "totalAmount": { "$lte": val } });
|
| 771 |
-
return this;
|
| 772 |
-
}
|
| 773 |
-
|
| 774 |
-
withTotalAmountBetween(lower: any, upper: any): this {
|
| 775 |
-
this.filters.push({ "totalAmount": { "$between": [lower, upper] } });
|
| 776 |
-
return this;
|
| 777 |
-
}
|
| 778 |
-
|
| 779 |
-
withTotalAmountIsKnown(): this {
|
| 780 |
-
this.filters.push({ "totalAmount": { "$isNull": false } });
|
| 781 |
-
return this;
|
| 782 |
-
}
|
| 783 |
-
|
| 784 |
-
withTotalAmountIsUnknown(): this {
|
| 785 |
-
this.filters.push({ "totalAmount": { "$isNull": true } });
|
| 786 |
-
return this;
|
| 787 |
-
}
|
| 788 |
-
|
| 789 |
-
withVersionIs(val: any): this {
|
| 790 |
-
this.filters.push({ "version": { "$eq": val } });
|
| 791 |
-
return this;
|
| 792 |
-
}
|
| 793 |
-
|
| 794 |
-
withVersionIsNot(val: any): this {
|
| 795 |
-
this.filters.push({ "version": { "$ne": val } });
|
| 796 |
-
return this;
|
| 797 |
-
}
|
| 798 |
-
|
| 799 |
-
withVersionIn(...vals: any[]): this {
|
| 800 |
-
this.filters.push({ "version": { "$in": vals } });
|
| 801 |
-
return this;
|
| 802 |
-
}
|
| 803 |
-
|
| 804 |
-
withVersionNotIn(...vals: any[]): this {
|
| 805 |
-
this.filters.push({ "version": { "$notIn": vals } });
|
| 806 |
-
return this;
|
| 807 |
-
}
|
| 808 |
-
|
| 809 |
-
withVersionGreaterThan(val: any): this {
|
| 810 |
-
this.filters.push({ "version": { "$gt": val } });
|
| 811 |
-
return this;
|
| 812 |
-
}
|
| 813 |
-
|
| 814 |
-
withVersionGreaterThanOrEqualTo(val: any): this {
|
| 815 |
-
this.filters.push({ "version": { "$gte": val } });
|
| 816 |
-
return this;
|
| 817 |
-
}
|
| 818 |
-
|
| 819 |
-
withVersionLessThan(val: any): this {
|
| 820 |
-
this.filters.push({ "version": { "$lt": val } });
|
| 821 |
-
return this;
|
| 822 |
-
}
|
| 823 |
-
|
| 824 |
-
withVersionLessThanOrEqualTo(val: any): this {
|
| 825 |
-
this.filters.push({ "version": { "$lte": val } });
|
| 826 |
-
return this;
|
| 827 |
-
}
|
| 828 |
-
|
| 829 |
-
withVersionBetween(lower: any, upper: any): this {
|
| 830 |
-
this.filters.push({ "version": { "$between": [lower, upper] } });
|
| 831 |
-
return this;
|
| 832 |
-
}
|
| 833 |
-
|
| 834 |
-
withVersionIsKnown(): this {
|
| 835 |
-
this.filters.push({ "version": { "$isNull": false } });
|
| 836 |
-
return this;
|
| 837 |
-
}
|
| 838 |
-
|
| 839 |
-
withVersionIsUnknown(): this {
|
| 840 |
-
this.filters.push({ "version": { "$isNull": true } });
|
| 841 |
-
return this;
|
| 842 |
-
}
|
| 843 |
-
|
| 844 |
-
orderByIdAscending(): this {
|
| 845 |
-
this.query.orderBy("id", "asc");
|
| 846 |
-
return this;
|
| 847 |
-
}
|
| 848 |
-
|
| 849 |
-
orderByIdDescending(): this {
|
| 850 |
-
this.query.orderBy("id", "desc");
|
| 851 |
-
return this;
|
| 852 |
-
}
|
| 853 |
-
|
| 854 |
-
|
| 855 |
-
|
| 856 |
-
orderByOrderNumberAscending(): this {
|
| 857 |
-
this.query.orderBy("orderNumber", "asc");
|
| 858 |
-
return this;
|
| 859 |
-
}
|
| 860 |
-
|
| 861 |
-
orderByOrderNumberDescending(): this {
|
| 862 |
-
this.query.orderBy("orderNumber", "desc");
|
| 863 |
-
return this;
|
| 864 |
-
}
|
| 865 |
-
|
| 866 |
-
orderByOrderDateAscending(): this {
|
| 867 |
-
this.query.orderBy("orderDate", "asc");
|
| 868 |
-
return this;
|
| 869 |
-
}
|
| 870 |
-
|
| 871 |
-
orderByOrderDateDescending(): this {
|
| 872 |
-
this.query.orderBy("orderDate", "desc");
|
| 873 |
-
return this;
|
| 874 |
-
}
|
| 875 |
-
|
| 876 |
-
orderByTotalAmountAscending(): this {
|
| 877 |
-
this.query.orderBy("totalAmount", "asc");
|
| 878 |
-
return this;
|
| 879 |
-
}
|
| 880 |
-
|
| 881 |
-
orderByTotalAmountDescending(): this {
|
| 882 |
-
this.query.orderBy("totalAmount", "desc");
|
| 883 |
-
return this;
|
| 884 |
-
}
|
| 885 |
-
|
| 886 |
-
orderByVersionAscending(): this {
|
| 887 |
-
this.query.orderBy("version", "asc");
|
| 888 |
-
return this;
|
| 889 |
-
}
|
| 890 |
-
|
| 891 |
-
orderByVersionDescending(): this {
|
| 892 |
-
this.query.orderBy("version", "desc");
|
| 893 |
-
return this;
|
| 894 |
-
}
|
| 895 |
-
|
| 896 |
-
|
| 897 |
-
// --- Aggregations ---
|
| 898 |
-
count(): this {
|
| 899 |
-
this.query.aggregate("Count", "id", "count");
|
| 900 |
-
this._pageCountAlias = "count";
|
| 901 |
-
this._pageCountMethod = "count";
|
| 902 |
-
return this;
|
| 903 |
-
}
|
| 904 |
-
|
| 905 |
-
countAs(retName: string): this {
|
| 906 |
-
this.query.aggregate("Count", "id", retName);
|
| 907 |
-
this._pageCountAlias = retName;
|
| 908 |
-
this._pageCountMethod = "countAs";
|
| 909 |
-
return this;
|
| 910 |
-
}
|
| 911 |
-
|
| 912 |
-
minTotalAmount(): this {
|
| 913 |
-
return this.minTotalAmountAs("minOfTotalAmount");
|
| 914 |
-
}
|
| 915 |
-
|
| 916 |
-
minTotalAmountAs(retName: string): this {
|
| 917 |
-
this.query.aggregate("min", "totalAmount", retName);
|
| 918 |
-
return this;
|
| 919 |
-
}
|
| 920 |
-
maxTotalAmount(): this {
|
| 921 |
-
return this.maxTotalAmountAs("maxOfTotalAmount");
|
| 922 |
-
}
|
| 923 |
-
|
| 924 |
-
maxTotalAmountAs(retName: string): this {
|
| 925 |
-
this.query.aggregate("max", "totalAmount", retName);
|
| 926 |
-
return this;
|
| 927 |
-
}
|
| 928 |
-
sumTotalAmount(): this {
|
| 929 |
-
return this.sumTotalAmountAs("sumOfTotalAmount");
|
| 930 |
-
}
|
| 931 |
-
|
| 932 |
-
sumTotalAmountAs(retName: string): this {
|
| 933 |
-
this.query.aggregate("sum", "totalAmount", retName);
|
| 934 |
-
return this;
|
| 935 |
-
}
|
| 936 |
-
avgTotalAmount(): this {
|
| 937 |
-
return this.avgTotalAmountAs("avgOfTotalAmount");
|
| 938 |
-
}
|
| 939 |
-
|
| 940 |
-
avgTotalAmountAs(retName: string): this {
|
| 941 |
-
this.query.aggregate("avg", "totalAmount", retName);
|
| 942 |
-
return this;
|
| 943 |
-
}
|
| 944 |
-
standardDeviationTotalAmount(): this {
|
| 945 |
-
return this.standardDeviationTotalAmountAs("standardDeviationOfTotalAmount");
|
| 946 |
-
}
|
| 947 |
-
|
| 948 |
-
standardDeviationTotalAmountAs(retName: string): this {
|
| 949 |
-
this.query.aggregate("stddev", "totalAmount", retName);
|
| 950 |
-
return this;
|
| 951 |
-
}
|
| 952 |
-
squareRootOfPopulationStandardDeviationTotalAmount(): this {
|
| 953 |
-
return this.squareRootOfPopulationStandardDeviationTotalAmountAs("squareRootOfPopulationStandardDeviationOfTotalAmount");
|
| 954 |
-
}
|
| 955 |
-
|
| 956 |
-
squareRootOfPopulationStandardDeviationTotalAmountAs(retName: string): this {
|
| 957 |
-
this.query.aggregate("stddev_pop", "totalAmount", retName);
|
| 958 |
-
return this;
|
| 959 |
-
}
|
| 960 |
-
sampleVarianceTotalAmount(): this {
|
| 961 |
-
return this.sampleVarianceTotalAmountAs("sampleVarianceOfTotalAmount");
|
| 962 |
-
}
|
| 963 |
-
|
| 964 |
-
sampleVarianceTotalAmountAs(retName: string): this {
|
| 965 |
-
this.query.aggregate("var_samp", "totalAmount", retName);
|
| 966 |
-
return this;
|
| 967 |
-
}
|
| 968 |
-
samplePopulationVarianceTotalAmount(): this {
|
| 969 |
-
return this.samplePopulationVarianceTotalAmountAs("samplePopulationVarianceOfTotalAmount");
|
| 970 |
-
}
|
| 971 |
-
|
| 972 |
-
samplePopulationVarianceTotalAmountAs(retName: string): this {
|
| 973 |
-
this.query.aggregate("var_pop", "totalAmount", retName);
|
| 974 |
-
return this;
|
| 975 |
-
}
|
| 976 |
-
|
| 977 |
-
// --- Group By ---
|
| 978 |
-
groupById(): this {
|
| 979 |
-
this.query.groupBy("id");
|
| 980 |
-
return this;
|
| 981 |
-
}
|
| 982 |
-
|
| 983 |
-
groupByIdAs(retName: string): this {
|
| 984 |
-
this.query.groupBy("id"); // In TS we don't alias group by yet natively
|
| 985 |
-
return this;
|
| 986 |
-
}
|
| 987 |
-
groupByCustomer(): this {
|
| 988 |
-
this.query.groupBy("customer");
|
| 989 |
-
return this;
|
| 990 |
-
}
|
| 991 |
-
|
| 992 |
-
groupByCustomerAs(retName: string): this {
|
| 993 |
-
this.query.groupBy("customer"); // In TS we don't alias group by yet natively
|
| 994 |
-
return this;
|
| 995 |
-
}
|
| 996 |
-
groupByStatus(): this {
|
| 997 |
-
this.query.groupBy("status");
|
| 998 |
-
return this;
|
| 999 |
-
}
|
| 1000 |
-
|
| 1001 |
-
groupByStatusAs(retName: string): this {
|
| 1002 |
-
this.query.groupBy("status"); // In TS we don't alias group by yet natively
|
| 1003 |
-
return this;
|
| 1004 |
-
}
|
| 1005 |
-
groupByOrderNumber(): this {
|
| 1006 |
-
this.query.groupBy("orderNumber");
|
| 1007 |
-
return this;
|
| 1008 |
-
}
|
| 1009 |
-
|
| 1010 |
-
groupByOrderNumberAs(retName: string): this {
|
| 1011 |
-
this.query.groupBy("orderNumber"); // In TS we don't alias group by yet natively
|
| 1012 |
-
return this;
|
| 1013 |
-
}
|
| 1014 |
-
groupByOrderDate(): this {
|
| 1015 |
-
this.query.groupBy("orderDate");
|
| 1016 |
-
return this;
|
| 1017 |
-
}
|
| 1018 |
-
|
| 1019 |
-
groupByOrderDateAs(retName: string): this {
|
| 1020 |
-
this.query.groupBy("orderDate"); // In TS we don't alias group by yet natively
|
| 1021 |
-
return this;
|
| 1022 |
-
}
|
| 1023 |
-
groupByTotalAmount(): this {
|
| 1024 |
-
this.query.groupBy("totalAmount");
|
| 1025 |
-
return this;
|
| 1026 |
-
}
|
| 1027 |
-
|
| 1028 |
-
groupByTotalAmountAs(retName: string): this {
|
| 1029 |
-
this.query.groupBy("totalAmount"); // In TS we don't alias group by yet natively
|
| 1030 |
-
return this;
|
| 1031 |
-
}
|
| 1032 |
-
groupByVersion(): this {
|
| 1033 |
-
this.query.groupBy("version");
|
| 1034 |
-
return this;
|
| 1035 |
-
}
|
| 1036 |
-
|
| 1037 |
-
groupByVersionAs(retName: string): this {
|
| 1038 |
-
this.query.groupBy("version"); // In TS we don't alias group by yet natively
|
| 1039 |
-
return this;
|
| 1040 |
-
}
|
| 1041 |
-
|
| 1042 |
-
// --- Facets ---
|
| 1043 |
-
facetByCustomerAs(
|
| 1044 |
-
facetName: string,
|
| 1045 |
-
request: { toQuery(): SelectQuery },
|
| 1046 |
-
includeAllFacets = true,
|
| 1047 |
-
): this {
|
| 1048 |
-
this.query.facetBy(facetName, "customer", request, includeAllFacets,
|
| 1049 |
-
{ kind: "facet", method: "facetByCustomerAs", relation: "customer", alias: facetName });
|
| 1050 |
-
return this;
|
| 1051 |
-
}
|
| 1052 |
-
|
| 1053 |
-
facetByStatusAs(
|
| 1054 |
-
facetName: string,
|
| 1055 |
-
request: { toQuery(): SelectQuery },
|
| 1056 |
-
includeAllFacets = true,
|
| 1057 |
-
): this {
|
| 1058 |
-
this.query.facetBy(facetName, "status", request, includeAllFacets,
|
| 1059 |
-
{ kind: "facet", method: "facetByStatusAs", relation: "status", alias: facetName });
|
| 1060 |
-
return this;
|
| 1061 |
-
}
|
| 1062 |
-
|
| 1063 |
-
|
| 1064 |
-
private async executeForListInternal(context: UserContext): Promise<SmartList<CustomerOrder>> {
|
| 1065 |
-
this.ensureIntent();
|
| 1066 |
-
if (this.filters.length > 0) {
|
| 1067 |
-
this.query.filter({ "$and": this.filters });
|
| 1068 |
-
}
|
| 1069 |
-
|
| 1070 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1071 |
-
const rows = await service.executeQuery(context.prepareQuery(this.query));
|
| 1072 |
-
const queryRoot = new EntityRoot();
|
| 1073 |
-
const aggregateOnly = this.query.aggregateItems.length > 0 && this.query.groupByItems.length === 0;
|
| 1074 |
-
const data = aggregateOnly ? [] : rows.map((row: unknown) =>
|
| 1075 |
-
row instanceof CustomerOrder
|
| 1076 |
-
? row
|
| 1077 |
-
: CustomerOrder.fromRecord(row as Record<string, unknown>, queryRoot));
|
| 1078 |
-
const result = new SmartList<CustomerOrder>(data);
|
| 1079 |
-
if (aggregateOnly && rows[0]) Object.assign(result.aggregations, rows[0]);
|
| 1080 |
-
|
| 1081 |
-
if (this.query.facets.length > 0) {
|
| 1082 |
-
result.facets = await executeRelationFacets(
|
| 1083 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 1084 |
-
}
|
| 1085 |
-
|
| 1086 |
-
return result;
|
| 1087 |
-
}
|
| 1088 |
-
|
| 1089 |
-
private async executeForRowsInternal(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 1090 |
-
this.ensureIntent();
|
| 1091 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1092 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1093 |
-
return new SmartList<Record<string, unknown>>(
|
| 1094 |
-
await service.executeQuery(context.prepareQuery(this.query)) as Record<string, unknown>[]);
|
| 1095 |
-
}
|
| 1096 |
-
|
| 1097 |
-
private async executeForPageInternal(
|
| 1098 |
-
context: UserContext, offset: number, limit: number,
|
| 1099 |
-
): Promise<TeaQLPage<CustomerOrder>> {
|
| 1100 |
-
this.ensureIntent();
|
| 1101 |
-
this.query.offset(offset).limit(limit);
|
| 1102 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1103 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1104 |
-
const useIdSet = this.query.localIdSetPaginationOptions() !== undefined;
|
| 1105 |
-
const countOperation = { kind: "named-count" as const,
|
| 1106 |
-
method: this._pageCountMethod ?? "count",
|
| 1107 |
-
...(this._pageCountMethod === "countAs" ? { alias: this._pageCountAlias } : {}) };
|
| 1108 |
-
const totalCountBeforeRows = useIdSet ? undefined : await service.executeCount(
|
| 1109 |
-
this.query, this._pageCountAlias, countOperation);
|
| 1110 |
-
const pageQuery = this.query.clone();
|
| 1111 |
-
// A page count describes the full filtered set, not an aggregate-only page row.
|
| 1112 |
-
pageQuery.aggregateItems = pageQuery.aggregateItems.filter(item =>
|
| 1113 |
-
!(String(item.function).toLowerCase() === "count" && item.alias === this._pageCountAlias));
|
| 1114 |
-
const rows = await service.executeQuery(context.prepareQuery(pageQuery));
|
| 1115 |
-
const totalCount = useIdSet && context.idSetPaginationCountAccuracy === "EXACT"
|
| 1116 |
-
? context.idSetPaginationCount!
|
| 1117 |
-
: (totalCountBeforeRows ?? await service.executeCount(this.query, this._pageCountAlias, countOperation));
|
| 1118 |
-
const queryRoot = new EntityRoot();
|
| 1119 |
-
const data = new SmartList(rows.map((row: unknown) =>
|
| 1120 |
-
row instanceof CustomerOrder
|
| 1121 |
-
? row
|
| 1122 |
-
: CustomerOrder.fromRecord(row as Record<string, unknown>, queryRoot)));
|
| 1123 |
-
data.totalCount = totalCount;
|
| 1124 |
-
if (this._pageCountAlias !== undefined) data.aggregations[this._pageCountAlias] = totalCount;
|
| 1125 |
-
if (this.query.facets.length > 0) {
|
| 1126 |
-
data.facets = await executeRelationFacets(
|
| 1127 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 1128 |
-
}
|
| 1129 |
-
return { data, totalCount, offset, limit };
|
| 1130 |
-
}
|
| 1131 |
-
|
| 1132 |
-
private async *executeForStreamInternal(context: UserContext, chunkSize: number): AsyncIterable<CustomerOrder> {
|
| 1133 |
-
this.ensureIntent();
|
| 1134 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1135 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1136 |
-
const queryRoot = new EntityRoot();
|
| 1137 |
-
for await (const chunk of service.executeForStream(this.query, chunkSize)) {
|
| 1138 |
-
for (const entity of chunk) {
|
| 1139 |
-
yield entity instanceof CustomerOrder
|
| 1140 |
-
? entity
|
| 1141 |
-
: CustomerOrder.fromRecord(entity as Record<string, unknown>, queryRoot);
|
| 1142 |
-
}
|
| 1143 |
-
}
|
| 1144 |
-
}
|
| 1145 |
-
|
| 1146 |
-
private ensureIntent(): void {
|
| 1147 |
-
if (!this._comment?.trim()) {
|
| 1148 |
-
throw new Error("Security audit failure: non-empty comment() is required before execution");
|
| 1149 |
-
}
|
| 1150 |
-
if (!this._purpose?.trim()) {
|
| 1151 |
-
throw new Error("Security audit failure: non-empty purpose() is required before execution");
|
| 1152 |
-
}
|
| 1153 |
-
}
|
| 1154 |
-
|
| 1155 |
-
}
|
| 1156 |
-
|
| 1157 |
-
export class ExecutableCustomerOrderRequest {
|
| 1158 |
-
constructor(
|
| 1159 |
-
private readonly execute: (context: UserContext) => Promise<SmartList<CustomerOrder>>,
|
| 1160 |
-
private readonly executeRows: (context: UserContext) => Promise<SmartList<Record<string, unknown>>>,
|
| 1161 |
-
private readonly page: (
|
| 1162 |
-
context: UserContext, offset: number, limit: number,
|
| 1163 |
-
) => Promise<TeaQLPage<CustomerOrder>>,
|
| 1164 |
-
private readonly stream: (context: UserContext, chunkSize: number) => AsyncIterable<CustomerOrder>,
|
| 1165 |
-
private readonly limitOne: () => void,
|
| 1166 |
-
private readonly addComment: (comment: string) => void,
|
| 1167 |
-
private readonly ensureIntent: () => void,
|
| 1168 |
-
) {}
|
| 1169 |
-
|
| 1170 |
-
comment(c: string): this {
|
| 1171 |
-
this.addComment(c);
|
| 1172 |
-
return this;
|
| 1173 |
-
}
|
| 1174 |
-
|
| 1175 |
-
newEntity(context: UserContext): CustomerOrder {
|
| 1176 |
-
this.ensureIntent();
|
| 1177 |
-
return new CustomerOrder();
|
| 1178 |
-
}
|
| 1179 |
-
|
| 1180 |
-
executeForList(context: UserContext): Promise<SmartList<CustomerOrder>> {
|
| 1181 |
-
this.ensureIntent();
|
| 1182 |
-
return this.execute(context);
|
| 1183 |
-
}
|
| 1184 |
-
|
| 1185 |
-
executeForRows(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 1186 |
-
this.ensureIntent();
|
| 1187 |
-
return this.executeRows(context);
|
| 1188 |
-
}
|
| 1189 |
-
|
| 1190 |
-
executeForPage(
|
| 1191 |
-
context: UserContext, offset: number, limit: number,
|
| 1192 |
-
): Promise<TeaQLPage<CustomerOrder>> {
|
| 1193 |
-
this.ensureIntent();
|
| 1194 |
-
return this.page(context, offset, limit);
|
| 1195 |
-
}
|
| 1196 |
-
|
| 1197 |
-
executeForStream(context: UserContext, chunkSize = 1000): AsyncIterable<CustomerOrder> {
|
| 1198 |
-
this.ensureIntent();
|
| 1199 |
-
return this.stream(context, chunkSize);
|
| 1200 |
-
}
|
| 1201 |
-
|
| 1202 |
-
async executeForOne(context: UserContext): Promise<CustomerOrder | undefined> {
|
| 1203 |
-
this.limitOne();
|
| 1204 |
-
return (await this.executeForList(context))[0];
|
| 1205 |
-
}
|
| 1206 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/requests/CustomerRequest.ts
DELETED
|
@@ -1,795 +0,0 @@
|
|
| 1 |
-
import { EntityRoot, SelectQuery, SmartList, TeaQLDataService, TeaQLPage, UserContext, executeRelationFacets } from '../../teaql-ts';
|
| 2 |
-
import { Customer } from '../models/Customer';
|
| 3 |
-
import { mergeGeneratedScalarSearch, DynamicSearchWarning } from 'teaql-ts';
|
| 4 |
-
import { GENERATED_SEARCH_MODELS } from '../../generated-search-models';
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
export class CustomerRequest {
|
| 9 |
-
private query: SelectQuery;
|
| 10 |
-
private filters: any[] = [];
|
| 11 |
-
private _purpose: string | undefined;
|
| 12 |
-
private _comment: string | undefined;
|
| 13 |
-
private _pageCountAlias: string | undefined;
|
| 14 |
-
private _pageCountMethod: "count" | "countAs" | undefined;
|
| 15 |
-
private _dynamicSearchWarnings: DynamicSearchWarning[] = [];
|
| 16 |
-
|
| 17 |
-
constructor(minimal = false) {
|
| 18 |
-
this.query = new SelectQuery("Customer");
|
| 19 |
-
this.filters.push({ version: { "$gte": 1 } });
|
| 20 |
-
if (minimal) {
|
| 21 |
-
this.selectId();
|
| 22 |
-
this.selectVersion();
|
| 23 |
-
}
|
| 24 |
-
else this.selectSelfFields();
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
comment(c: string): this {
|
| 28 |
-
this.query.comment(c);
|
| 29 |
-
this._comment = c;
|
| 30 |
-
return this;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
filterByJson(source: unknown, warn?: (warning: DynamicSearchWarning) => void): this {
|
| 34 |
-
const base = this.query.clone();
|
| 35 |
-
if (this.filters.length > 0) base.filter({ "$and": this.filters });
|
| 36 |
-
const merged = mergeGeneratedScalarSearch(base, source, GENERATED_SEARCH_MODELS, warn);
|
| 37 |
-
this.query = merged.query as SelectQuery;
|
| 38 |
-
this.filters = this.query.filterCondition ? [this.query.filterCondition] : [];
|
| 39 |
-
this._dynamicSearchWarnings.push(...merged.warnings);
|
| 40 |
-
return this;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
get dynamicSearchWarnings(): readonly DynamicSearchWarning[] {
|
| 44 |
-
return this._dynamicSearchWarnings.map(warning => ({ ...warning }));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
purpose(p: string): ExecutableCustomerRequest {
|
| 48 |
-
this.query.purpose(p);
|
| 49 |
-
this._purpose = p;
|
| 50 |
-
return new ExecutableCustomerRequest(
|
| 51 |
-
(context) => this.executeForListInternal(context),
|
| 52 |
-
(context) => this.executeForRowsInternal(context),
|
| 53 |
-
(context, offset, limit) => this.executeForPageInternal(context, offset, limit),
|
| 54 |
-
(context, chunkSize) => this.executeForStreamInternal(context, chunkSize),
|
| 55 |
-
() => this.limit(1),
|
| 56 |
-
(c) => this.comment(c),
|
| 57 |
-
() => this.ensureIntent());
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
optimizeForContinuousPageFetch(): this {
|
| 61 |
-
this.query.optimizeForContinuousPageFetch();
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
optimizeForContinuousPageFetchWith(namespace: string, ttlSeconds: number): this {
|
| 66 |
-
this.query.optimizeForContinuousPageFetchWith(namespace, ttlSeconds);
|
| 67 |
-
return this;
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
optimizePaginationWithIdSet(): this {
|
| 71 |
-
this.query.optimizePaginationWithIdSet();
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
optimizePaginationWithIdSetConfig(namespace: string, ttlSeconds: number, maxIds: number): this {
|
| 76 |
-
this.query.optimizePaginationWithIdSetConfig(namespace, ttlSeconds, maxIds);
|
| 77 |
-
return this;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
topNProbeParentThreshold(threshold: number): this {
|
| 81 |
-
this.query.topNProbeParentThreshold(threshold);
|
| 82 |
-
return this;
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
limit(n: number): this {
|
| 86 |
-
this.query.limit(n);
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
offset(n: number): this {
|
| 91 |
-
this.query.offset(n);
|
| 92 |
-
return this;
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
toQuery(): SelectQuery {
|
| 96 |
-
if (this.filters.length > 0) {
|
| 97 |
-
this.query.filter({ "$and": this.filters });
|
| 98 |
-
}
|
| 99 |
-
return this.query;
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
withDeletedRows(): this {
|
| 103 |
-
this.filters = this.filters.filter(filter => !("version" in filter));
|
| 104 |
-
return this;
|
| 105 |
-
}
|
| 106 |
-
|
| 107 |
-
deletedRowsOnly(): this {
|
| 108 |
-
this.withDeletedRows();
|
| 109 |
-
this.filters.push({ version: { "$lte": -1 } });
|
| 110 |
-
return this;
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
selectSelfFields(): this {
|
| 114 |
-
this.query.select(["id", "platform", "name", "version"]);
|
| 115 |
-
return this;
|
| 116 |
-
}
|
| 117 |
-
|
| 118 |
-
selectId(): this {
|
| 119 |
-
this.query.select(["id"]);
|
| 120 |
-
return this;
|
| 121 |
-
}
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
selectName(): this {
|
| 125 |
-
this.query.select(["name"]);
|
| 126 |
-
return this;
|
| 127 |
-
}
|
| 128 |
-
|
| 129 |
-
selectVersion(): this {
|
| 130 |
-
this.query.select(["version"]);
|
| 131 |
-
return this;
|
| 132 |
-
}
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
selectPlatformWith(request: { toQuery(): SelectQuery }): this {
|
| 136 |
-
this.query.select(["platform"]);
|
| 137 |
-
this.query.relationQuery(
|
| 138 |
-
"platform", request.toQuery(), "platform", "id", false,
|
| 139 |
-
{ kind: "relation-select", method: "selectPlatformWith", relation: "platform" });
|
| 140 |
-
return this;
|
| 141 |
-
}
|
| 142 |
-
|
| 143 |
-
withPlatformMatching(request: { toQuery(): SelectQuery }): this {
|
| 144 |
-
this.filters.push({
|
| 145 |
-
"platform": {
|
| 146 |
-
"$inSubquery": { query: request.toQuery(), field: "id" },
|
| 147 |
-
},
|
| 148 |
-
});
|
| 149 |
-
return this;
|
| 150 |
-
}
|
| 151 |
-
|
| 152 |
-
withoutPlatformMatching(request: { toQuery(): SelectQuery }): this {
|
| 153 |
-
this.filters.push({
|
| 154 |
-
"platform": {
|
| 155 |
-
"$notInSubquery": { query: request.toQuery(), field: "id" },
|
| 156 |
-
},
|
| 157 |
-
});
|
| 158 |
-
return this;
|
| 159 |
-
}
|
| 160 |
-
|
| 161 |
-
selectCustomerOrderListWith(request: { toQuery(): SelectQuery }): this {
|
| 162 |
-
this.query.relationQuery(
|
| 163 |
-
"customerOrderList", request.toQuery(), "id", "customer", true,
|
| 164 |
-
{ kind: "relation-select", method: "selectCustomerOrderListWith", relation: "customerOrderList" });
|
| 165 |
-
return this;
|
| 166 |
-
}
|
| 167 |
-
|
| 168 |
-
haveCustomerOrders(): this {
|
| 169 |
-
return this.withCustomerOrderListMatching({
|
| 170 |
-
toQuery: () => new SelectQuery("CustomerOrder"),
|
| 171 |
-
});
|
| 172 |
-
}
|
| 173 |
-
|
| 174 |
-
haveNoCustomerOrders(): this {
|
| 175 |
-
return this.withoutCustomerOrderListMatching({
|
| 176 |
-
toQuery: () => new SelectQuery("CustomerOrder"),
|
| 177 |
-
});
|
| 178 |
-
}
|
| 179 |
-
|
| 180 |
-
withCustomerOrderListMatching(request: { toQuery(): SelectQuery }): this {
|
| 181 |
-
this.filters.push({
|
| 182 |
-
"id": {
|
| 183 |
-
"$inSubquery": {
|
| 184 |
-
query: request.toQuery(), field: "customer",
|
| 185 |
-
},
|
| 186 |
-
},
|
| 187 |
-
});
|
| 188 |
-
return this;
|
| 189 |
-
}
|
| 190 |
-
|
| 191 |
-
withoutCustomerOrderListMatching(request: { toQuery(): SelectQuery }): this {
|
| 192 |
-
this.filters.push({
|
| 193 |
-
"id": {
|
| 194 |
-
"$notInSubquery": {
|
| 195 |
-
query: request.toQuery(), field: "customer",
|
| 196 |
-
},
|
| 197 |
-
},
|
| 198 |
-
});
|
| 199 |
-
return this;
|
| 200 |
-
}
|
| 201 |
-
|
| 202 |
-
countCustomerOrders(): this {
|
| 203 |
-
return this.countCustomerOrdersAs("countCustomerOrders");
|
| 204 |
-
}
|
| 205 |
-
|
| 206 |
-
countCustomerOrdersAs(alias: string): this {
|
| 207 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 208 |
-
this.countCustomerOrdersWith(alias, { toQuery: () => query });
|
| 209 |
-
this.query.relationAggregates[this.query.relationAggregates.length - 1].operation = {
|
| 210 |
-
kind: "relation-count", method: "countCustomerOrdersAs", relation: "customerOrderList", alias };
|
| 211 |
-
return this;
|
| 212 |
-
}
|
| 213 |
-
|
| 214 |
-
countCustomerOrdersWith(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 215 |
-
const query = child.toQuery().clone();
|
| 216 |
-
query.aggregateItems = [];
|
| 217 |
-
query.aggregate("Count", "id", alias);
|
| 218 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 219 |
-
{ kind: "relation-count", method: "countCustomerOrdersWith", relation: "customerOrderList", alias });
|
| 220 |
-
return this;
|
| 221 |
-
}
|
| 222 |
-
|
| 223 |
-
minTotalAmountOfCustomerOrders(): this {
|
| 224 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 225 |
-
return this.minTotalAmountOfCustomerOrdersAs(
|
| 226 |
-
"minOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 227 |
-
}
|
| 228 |
-
|
| 229 |
-
minTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 230 |
-
const query = child.toQuery().clone();
|
| 231 |
-
query.aggregateItems = [];
|
| 232 |
-
query.aggregate("min", "totalAmount", alias);
|
| 233 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 234 |
-
{ kind: "aggregate", method: "minTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 235 |
-
return this;
|
| 236 |
-
}
|
| 237 |
-
maxTotalAmountOfCustomerOrders(): this {
|
| 238 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 239 |
-
return this.maxTotalAmountOfCustomerOrdersAs(
|
| 240 |
-
"maxOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 241 |
-
}
|
| 242 |
-
|
| 243 |
-
maxTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 244 |
-
const query = child.toQuery().clone();
|
| 245 |
-
query.aggregateItems = [];
|
| 246 |
-
query.aggregate("max", "totalAmount", alias);
|
| 247 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 248 |
-
{ kind: "aggregate", method: "maxTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 249 |
-
return this;
|
| 250 |
-
}
|
| 251 |
-
sumTotalAmountOfCustomerOrders(): this {
|
| 252 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 253 |
-
return this.sumTotalAmountOfCustomerOrdersAs(
|
| 254 |
-
"sumOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 255 |
-
}
|
| 256 |
-
|
| 257 |
-
sumTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 258 |
-
const query = child.toQuery().clone();
|
| 259 |
-
query.aggregateItems = [];
|
| 260 |
-
query.aggregate("sum", "totalAmount", alias);
|
| 261 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 262 |
-
{ kind: "aggregate", method: "sumTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 263 |
-
return this;
|
| 264 |
-
}
|
| 265 |
-
avgTotalAmountOfCustomerOrders(): this {
|
| 266 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 267 |
-
return this.avgTotalAmountOfCustomerOrdersAs(
|
| 268 |
-
"avgOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 269 |
-
}
|
| 270 |
-
|
| 271 |
-
avgTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 272 |
-
const query = child.toQuery().clone();
|
| 273 |
-
query.aggregateItems = [];
|
| 274 |
-
query.aggregate("avg", "totalAmount", alias);
|
| 275 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 276 |
-
{ kind: "aggregate", method: "avgTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 277 |
-
return this;
|
| 278 |
-
}
|
| 279 |
-
standardDeviationTotalAmountOfCustomerOrders(): this {
|
| 280 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 281 |
-
return this.standardDeviationTotalAmountOfCustomerOrdersAs(
|
| 282 |
-
"standardDeviationOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 283 |
-
}
|
| 284 |
-
|
| 285 |
-
standardDeviationTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 286 |
-
const query = child.toQuery().clone();
|
| 287 |
-
query.aggregateItems = [];
|
| 288 |
-
query.aggregate("stddev", "totalAmount", alias);
|
| 289 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 290 |
-
{ kind: "aggregate", method: "standardDeviationTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 291 |
-
return this;
|
| 292 |
-
}
|
| 293 |
-
squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrders(): this {
|
| 294 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 295 |
-
return this.squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs(
|
| 296 |
-
"squareRootOfPopulationStandardDeviationOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 297 |
-
}
|
| 298 |
-
|
| 299 |
-
squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 300 |
-
const query = child.toQuery().clone();
|
| 301 |
-
query.aggregateItems = [];
|
| 302 |
-
query.aggregate("stddev_pop", "totalAmount", alias);
|
| 303 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 304 |
-
{ kind: "aggregate", method: "squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 305 |
-
return this;
|
| 306 |
-
}
|
| 307 |
-
sampleVarianceTotalAmountOfCustomerOrders(): this {
|
| 308 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 309 |
-
return this.sampleVarianceTotalAmountOfCustomerOrdersAs(
|
| 310 |
-
"sampleVarianceOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 311 |
-
}
|
| 312 |
-
|
| 313 |
-
sampleVarianceTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 314 |
-
const query = child.toQuery().clone();
|
| 315 |
-
query.aggregateItems = [];
|
| 316 |
-
query.aggregate("var_samp", "totalAmount", alias);
|
| 317 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 318 |
-
{ kind: "aggregate", method: "sampleVarianceTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 319 |
-
return this;
|
| 320 |
-
}
|
| 321 |
-
samplePopulationVarianceTotalAmountOfCustomerOrders(): this {
|
| 322 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 323 |
-
return this.samplePopulationVarianceTotalAmountOfCustomerOrdersAs(
|
| 324 |
-
"samplePopulationVarianceOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 325 |
-
}
|
| 326 |
-
|
| 327 |
-
samplePopulationVarianceTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 328 |
-
const query = child.toQuery().clone();
|
| 329 |
-
query.aggregateItems = [];
|
| 330 |
-
query.aggregate("var_pop", "totalAmount", alias);
|
| 331 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 332 |
-
{ kind: "aggregate", method: "samplePopulationVarianceTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 333 |
-
return this;
|
| 334 |
-
}
|
| 335 |
-
|
| 336 |
-
withIdIs(val: any): this {
|
| 337 |
-
this.filters.push({ "id": { "$eq": val } });
|
| 338 |
-
return this;
|
| 339 |
-
}
|
| 340 |
-
|
| 341 |
-
withIdIsNot(val: any): this {
|
| 342 |
-
this.filters.push({ "id": { "$ne": val } });
|
| 343 |
-
return this;
|
| 344 |
-
}
|
| 345 |
-
|
| 346 |
-
withIdIn(...vals: any[]): this {
|
| 347 |
-
this.filters.push({ "id": { "$in": vals } });
|
| 348 |
-
return this;
|
| 349 |
-
}
|
| 350 |
-
|
| 351 |
-
withIdNotIn(...vals: any[]): this {
|
| 352 |
-
this.filters.push({ "id": { "$notIn": vals } });
|
| 353 |
-
return this;
|
| 354 |
-
}
|
| 355 |
-
|
| 356 |
-
withIdGreaterThan(val: any): this {
|
| 357 |
-
this.filters.push({ "id": { "$gt": val } });
|
| 358 |
-
return this;
|
| 359 |
-
}
|
| 360 |
-
|
| 361 |
-
withIdGreaterThanOrEqualTo(val: any): this {
|
| 362 |
-
this.filters.push({ "id": { "$gte": val } });
|
| 363 |
-
return this;
|
| 364 |
-
}
|
| 365 |
-
|
| 366 |
-
withIdLessThan(val: any): this {
|
| 367 |
-
this.filters.push({ "id": { "$lt": val } });
|
| 368 |
-
return this;
|
| 369 |
-
}
|
| 370 |
-
|
| 371 |
-
withIdLessThanOrEqualTo(val: any): this {
|
| 372 |
-
this.filters.push({ "id": { "$lte": val } });
|
| 373 |
-
return this;
|
| 374 |
-
}
|
| 375 |
-
|
| 376 |
-
withIdBetween(lower: any, upper: any): this {
|
| 377 |
-
this.filters.push({ "id": { "$between": [lower, upper] } });
|
| 378 |
-
return this;
|
| 379 |
-
}
|
| 380 |
-
|
| 381 |
-
withIdIsKnown(): this {
|
| 382 |
-
this.filters.push({ "id": { "$isNull": false } });
|
| 383 |
-
return this;
|
| 384 |
-
}
|
| 385 |
-
|
| 386 |
-
withIdIsUnknown(): this {
|
| 387 |
-
this.filters.push({ "id": { "$isNull": true } });
|
| 388 |
-
return this;
|
| 389 |
-
}
|
| 390 |
-
|
| 391 |
-
filterByPlatform(val: any): this {
|
| 392 |
-
this.filters.push({ "platform": { "$eq": val } });
|
| 393 |
-
return this;
|
| 394 |
-
}
|
| 395 |
-
|
| 396 |
-
filterByPlatformIn(...vals: any[]): this {
|
| 397 |
-
this.filters.push({ "platform": { "$in": vals } });
|
| 398 |
-
return this;
|
| 399 |
-
}
|
| 400 |
-
|
| 401 |
-
withPlatformIsKnown(): this {
|
| 402 |
-
this.filters.push({ "platform": { "$isNull": false } });
|
| 403 |
-
return this;
|
| 404 |
-
}
|
| 405 |
-
|
| 406 |
-
withPlatformIsUnknown(): this {
|
| 407 |
-
this.filters.push({ "platform": { "$isNull": true } });
|
| 408 |
-
return this;
|
| 409 |
-
}
|
| 410 |
-
|
| 411 |
-
withNameContaining(val: string): this {
|
| 412 |
-
this.filters.push({ "name": { "$contains": val } });
|
| 413 |
-
return this;
|
| 414 |
-
}
|
| 415 |
-
|
| 416 |
-
withNameIs(val: string): this {
|
| 417 |
-
this.filters.push({ "name": { "$eq": val } });
|
| 418 |
-
return this;
|
| 419 |
-
}
|
| 420 |
-
|
| 421 |
-
withNameIsNot(val: any): this {
|
| 422 |
-
this.filters.push({ "name": { "$ne": val } });
|
| 423 |
-
return this;
|
| 424 |
-
}
|
| 425 |
-
|
| 426 |
-
withNameIn(...vals: any[]): this {
|
| 427 |
-
this.filters.push({ "name": { "$in": vals } });
|
| 428 |
-
return this;
|
| 429 |
-
}
|
| 430 |
-
|
| 431 |
-
withNameNotIn(...vals: any[]): this {
|
| 432 |
-
this.filters.push({ "name": { "$notIn": vals } });
|
| 433 |
-
return this;
|
| 434 |
-
}
|
| 435 |
-
|
| 436 |
-
withNameGreaterThan(val: any): this {
|
| 437 |
-
this.filters.push({ "name": { "$gt": val } });
|
| 438 |
-
return this;
|
| 439 |
-
}
|
| 440 |
-
|
| 441 |
-
withNameGreaterThanOrEqualTo(val: any): this {
|
| 442 |
-
this.filters.push({ "name": { "$gte": val } });
|
| 443 |
-
return this;
|
| 444 |
-
}
|
| 445 |
-
|
| 446 |
-
withNameLessThan(val: any): this {
|
| 447 |
-
this.filters.push({ "name": { "$lt": val } });
|
| 448 |
-
return this;
|
| 449 |
-
}
|
| 450 |
-
|
| 451 |
-
withNameLessThanOrEqualTo(val: any): this {
|
| 452 |
-
this.filters.push({ "name": { "$lte": val } });
|
| 453 |
-
return this;
|
| 454 |
-
}
|
| 455 |
-
|
| 456 |
-
withNameBetween(lower: any, upper: any): this {
|
| 457 |
-
this.filters.push({ "name": { "$between": [lower, upper] } });
|
| 458 |
-
return this;
|
| 459 |
-
}
|
| 460 |
-
|
| 461 |
-
withNameIsKnown(): this {
|
| 462 |
-
this.filters.push({ "name": { "$isNull": false } });
|
| 463 |
-
return this;
|
| 464 |
-
}
|
| 465 |
-
|
| 466 |
-
withNameIsUnknown(): this {
|
| 467 |
-
this.filters.push({ "name": { "$isNull": true } });
|
| 468 |
-
return this;
|
| 469 |
-
}
|
| 470 |
-
withNameNotContaining(val: string): this {
|
| 471 |
-
this.filters.push({ "name": { "$notContains": val } });
|
| 472 |
-
return this;
|
| 473 |
-
}
|
| 474 |
-
|
| 475 |
-
withNameStartingWith(val: string): this {
|
| 476 |
-
this.filters.push({ "name": { "$startsWith": val } });
|
| 477 |
-
return this;
|
| 478 |
-
}
|
| 479 |
-
|
| 480 |
-
withNameNotStartingWith(val: string): this {
|
| 481 |
-
this.filters.push({ "name": { "$notStartsWith": val } });
|
| 482 |
-
return this;
|
| 483 |
-
}
|
| 484 |
-
|
| 485 |
-
withNameEndingWith(val: string): this {
|
| 486 |
-
this.filters.push({ "name": { "$endsWith": val } });
|
| 487 |
-
return this;
|
| 488 |
-
}
|
| 489 |
-
|
| 490 |
-
withNameNotEndingWith(val: string): this {
|
| 491 |
-
this.filters.push({ "name": { "$notEndsWith": val } });
|
| 492 |
-
return this;
|
| 493 |
-
}
|
| 494 |
-
|
| 495 |
-
withNameSoundingLike(val: string): this {
|
| 496 |
-
this.filters.push({ "name": { "$soundLike": val } });
|
| 497 |
-
return this;
|
| 498 |
-
}
|
| 499 |
-
|
| 500 |
-
withVersionIs(val: any): this {
|
| 501 |
-
this.filters.push({ "version": { "$eq": val } });
|
| 502 |
-
return this;
|
| 503 |
-
}
|
| 504 |
-
|
| 505 |
-
withVersionIsNot(val: any): this {
|
| 506 |
-
this.filters.push({ "version": { "$ne": val } });
|
| 507 |
-
return this;
|
| 508 |
-
}
|
| 509 |
-
|
| 510 |
-
withVersionIn(...vals: any[]): this {
|
| 511 |
-
this.filters.push({ "version": { "$in": vals } });
|
| 512 |
-
return this;
|
| 513 |
-
}
|
| 514 |
-
|
| 515 |
-
withVersionNotIn(...vals: any[]): this {
|
| 516 |
-
this.filters.push({ "version": { "$notIn": vals } });
|
| 517 |
-
return this;
|
| 518 |
-
}
|
| 519 |
-
|
| 520 |
-
withVersionGreaterThan(val: any): this {
|
| 521 |
-
this.filters.push({ "version": { "$gt": val } });
|
| 522 |
-
return this;
|
| 523 |
-
}
|
| 524 |
-
|
| 525 |
-
withVersionGreaterThanOrEqualTo(val: any): this {
|
| 526 |
-
this.filters.push({ "version": { "$gte": val } });
|
| 527 |
-
return this;
|
| 528 |
-
}
|
| 529 |
-
|
| 530 |
-
withVersionLessThan(val: any): this {
|
| 531 |
-
this.filters.push({ "version": { "$lt": val } });
|
| 532 |
-
return this;
|
| 533 |
-
}
|
| 534 |
-
|
| 535 |
-
withVersionLessThanOrEqualTo(val: any): this {
|
| 536 |
-
this.filters.push({ "version": { "$lte": val } });
|
| 537 |
-
return this;
|
| 538 |
-
}
|
| 539 |
-
|
| 540 |
-
withVersionBetween(lower: any, upper: any): this {
|
| 541 |
-
this.filters.push({ "version": { "$between": [lower, upper] } });
|
| 542 |
-
return this;
|
| 543 |
-
}
|
| 544 |
-
|
| 545 |
-
withVersionIsKnown(): this {
|
| 546 |
-
this.filters.push({ "version": { "$isNull": false } });
|
| 547 |
-
return this;
|
| 548 |
-
}
|
| 549 |
-
|
| 550 |
-
withVersionIsUnknown(): this {
|
| 551 |
-
this.filters.push({ "version": { "$isNull": true } });
|
| 552 |
-
return this;
|
| 553 |
-
}
|
| 554 |
-
|
| 555 |
-
orderByIdAscending(): this {
|
| 556 |
-
this.query.orderBy("id", "asc");
|
| 557 |
-
return this;
|
| 558 |
-
}
|
| 559 |
-
|
| 560 |
-
orderByIdDescending(): this {
|
| 561 |
-
this.query.orderBy("id", "desc");
|
| 562 |
-
return this;
|
| 563 |
-
}
|
| 564 |
-
|
| 565 |
-
|
| 566 |
-
orderByNameAscending(): this {
|
| 567 |
-
this.query.orderBy("name", "asc");
|
| 568 |
-
return this;
|
| 569 |
-
}
|
| 570 |
-
|
| 571 |
-
orderByNameDescending(): this {
|
| 572 |
-
this.query.orderBy("name", "desc");
|
| 573 |
-
return this;
|
| 574 |
-
}
|
| 575 |
-
|
| 576 |
-
orderByVersionAscending(): this {
|
| 577 |
-
this.query.orderBy("version", "asc");
|
| 578 |
-
return this;
|
| 579 |
-
}
|
| 580 |
-
|
| 581 |
-
orderByVersionDescending(): this {
|
| 582 |
-
this.query.orderBy("version", "desc");
|
| 583 |
-
return this;
|
| 584 |
-
}
|
| 585 |
-
|
| 586 |
-
|
| 587 |
-
// --- Aggregations ---
|
| 588 |
-
count(): this {
|
| 589 |
-
this.query.aggregate("Count", "id", "count");
|
| 590 |
-
this._pageCountAlias = "count";
|
| 591 |
-
this._pageCountMethod = "count";
|
| 592 |
-
return this;
|
| 593 |
-
}
|
| 594 |
-
|
| 595 |
-
countAs(retName: string): this {
|
| 596 |
-
this.query.aggregate("Count", "id", retName);
|
| 597 |
-
this._pageCountAlias = retName;
|
| 598 |
-
this._pageCountMethod = "countAs";
|
| 599 |
-
return this;
|
| 600 |
-
}
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
// --- Group By ---
|
| 604 |
-
groupById(): this {
|
| 605 |
-
this.query.groupBy("id");
|
| 606 |
-
return this;
|
| 607 |
-
}
|
| 608 |
-
|
| 609 |
-
groupByIdAs(retName: string): this {
|
| 610 |
-
this.query.groupBy("id"); // In TS we don't alias group by yet natively
|
| 611 |
-
return this;
|
| 612 |
-
}
|
| 613 |
-
groupByPlatform(): this {
|
| 614 |
-
this.query.groupBy("platform");
|
| 615 |
-
return this;
|
| 616 |
-
}
|
| 617 |
-
|
| 618 |
-
groupByPlatformAs(retName: string): this {
|
| 619 |
-
this.query.groupBy("platform"); // In TS we don't alias group by yet natively
|
| 620 |
-
return this;
|
| 621 |
-
}
|
| 622 |
-
groupByName(): this {
|
| 623 |
-
this.query.groupBy("name");
|
| 624 |
-
return this;
|
| 625 |
-
}
|
| 626 |
-
|
| 627 |
-
groupByNameAs(retName: string): this {
|
| 628 |
-
this.query.groupBy("name"); // In TS we don't alias group by yet natively
|
| 629 |
-
return this;
|
| 630 |
-
}
|
| 631 |
-
groupByVersion(): this {
|
| 632 |
-
this.query.groupBy("version");
|
| 633 |
-
return this;
|
| 634 |
-
}
|
| 635 |
-
|
| 636 |
-
groupByVersionAs(retName: string): this {
|
| 637 |
-
this.query.groupBy("version"); // In TS we don't alias group by yet natively
|
| 638 |
-
return this;
|
| 639 |
-
}
|
| 640 |
-
|
| 641 |
-
// --- Facets ---
|
| 642 |
-
facetByPlatformAs(
|
| 643 |
-
facetName: string,
|
| 644 |
-
request: { toQuery(): SelectQuery },
|
| 645 |
-
includeAllFacets = true,
|
| 646 |
-
): this {
|
| 647 |
-
this.query.facetBy(facetName, "platform", request, includeAllFacets,
|
| 648 |
-
{ kind: "facet", method: "facetByPlatformAs", relation: "platform", alias: facetName });
|
| 649 |
-
return this;
|
| 650 |
-
}
|
| 651 |
-
|
| 652 |
-
|
| 653 |
-
private async executeForListInternal(context: UserContext): Promise<SmartList<Customer>> {
|
| 654 |
-
this.ensureIntent();
|
| 655 |
-
if (this.filters.length > 0) {
|
| 656 |
-
this.query.filter({ "$and": this.filters });
|
| 657 |
-
}
|
| 658 |
-
|
| 659 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 660 |
-
const rows = await service.executeQuery(context.prepareQuery(this.query));
|
| 661 |
-
const queryRoot = new EntityRoot();
|
| 662 |
-
const aggregateOnly = this.query.aggregateItems.length > 0 && this.query.groupByItems.length === 0;
|
| 663 |
-
const data = aggregateOnly ? [] : rows.map((row: unknown) =>
|
| 664 |
-
row instanceof Customer
|
| 665 |
-
? row
|
| 666 |
-
: Customer.fromRecord(row as Record<string, unknown>, queryRoot));
|
| 667 |
-
const result = new SmartList<Customer>(data);
|
| 668 |
-
if (aggregateOnly && rows[0]) Object.assign(result.aggregations, rows[0]);
|
| 669 |
-
|
| 670 |
-
if (this.query.facets.length > 0) {
|
| 671 |
-
result.facets = await executeRelationFacets(
|
| 672 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 673 |
-
}
|
| 674 |
-
|
| 675 |
-
return result;
|
| 676 |
-
}
|
| 677 |
-
|
| 678 |
-
private async executeForRowsInternal(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 679 |
-
this.ensureIntent();
|
| 680 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 681 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 682 |
-
return new SmartList<Record<string, unknown>>(
|
| 683 |
-
await service.executeQuery(context.prepareQuery(this.query)) as Record<string, unknown>[]);
|
| 684 |
-
}
|
| 685 |
-
|
| 686 |
-
private async executeForPageInternal(
|
| 687 |
-
context: UserContext, offset: number, limit: number,
|
| 688 |
-
): Promise<TeaQLPage<Customer>> {
|
| 689 |
-
this.ensureIntent();
|
| 690 |
-
this.query.offset(offset).limit(limit);
|
| 691 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 692 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 693 |
-
const useIdSet = this.query.localIdSetPaginationOptions() !== undefined;
|
| 694 |
-
const countOperation = { kind: "named-count" as const,
|
| 695 |
-
method: this._pageCountMethod ?? "count",
|
| 696 |
-
...(this._pageCountMethod === "countAs" ? { alias: this._pageCountAlias } : {}) };
|
| 697 |
-
const totalCountBeforeRows = useIdSet ? undefined : await service.executeCount(
|
| 698 |
-
this.query, this._pageCountAlias, countOperation);
|
| 699 |
-
const pageQuery = this.query.clone();
|
| 700 |
-
// A page count describes the full filtered set, not an aggregate-only page row.
|
| 701 |
-
pageQuery.aggregateItems = pageQuery.aggregateItems.filter(item =>
|
| 702 |
-
!(String(item.function).toLowerCase() === "count" && item.alias === this._pageCountAlias));
|
| 703 |
-
const rows = await service.executeQuery(context.prepareQuery(pageQuery));
|
| 704 |
-
const totalCount = useIdSet && context.idSetPaginationCountAccuracy === "EXACT"
|
| 705 |
-
? context.idSetPaginationCount!
|
| 706 |
-
: (totalCountBeforeRows ?? await service.executeCount(this.query, this._pageCountAlias, countOperation));
|
| 707 |
-
const queryRoot = new EntityRoot();
|
| 708 |
-
const data = new SmartList(rows.map((row: unknown) =>
|
| 709 |
-
row instanceof Customer
|
| 710 |
-
? row
|
| 711 |
-
: Customer.fromRecord(row as Record<string, unknown>, queryRoot)));
|
| 712 |
-
data.totalCount = totalCount;
|
| 713 |
-
if (this._pageCountAlias !== undefined) data.aggregations[this._pageCountAlias] = totalCount;
|
| 714 |
-
if (this.query.facets.length > 0) {
|
| 715 |
-
data.facets = await executeRelationFacets(
|
| 716 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 717 |
-
}
|
| 718 |
-
return { data, totalCount, offset, limit };
|
| 719 |
-
}
|
| 720 |
-
|
| 721 |
-
private async *executeForStreamInternal(context: UserContext, chunkSize: number): AsyncIterable<Customer> {
|
| 722 |
-
this.ensureIntent();
|
| 723 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 724 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 725 |
-
const queryRoot = new EntityRoot();
|
| 726 |
-
for await (const chunk of service.executeForStream(this.query, chunkSize)) {
|
| 727 |
-
for (const entity of chunk) {
|
| 728 |
-
yield entity instanceof Customer
|
| 729 |
-
? entity
|
| 730 |
-
: Customer.fromRecord(entity as Record<string, unknown>, queryRoot);
|
| 731 |
-
}
|
| 732 |
-
}
|
| 733 |
-
}
|
| 734 |
-
|
| 735 |
-
private ensureIntent(): void {
|
| 736 |
-
if (!this._comment?.trim()) {
|
| 737 |
-
throw new Error("Security audit failure: non-empty comment() is required before execution");
|
| 738 |
-
}
|
| 739 |
-
if (!this._purpose?.trim()) {
|
| 740 |
-
throw new Error("Security audit failure: non-empty purpose() is required before execution");
|
| 741 |
-
}
|
| 742 |
-
}
|
| 743 |
-
|
| 744 |
-
}
|
| 745 |
-
|
| 746 |
-
export class ExecutableCustomerRequest {
|
| 747 |
-
constructor(
|
| 748 |
-
private readonly execute: (context: UserContext) => Promise<SmartList<Customer>>,
|
| 749 |
-
private readonly executeRows: (context: UserContext) => Promise<SmartList<Record<string, unknown>>>,
|
| 750 |
-
private readonly page: (
|
| 751 |
-
context: UserContext, offset: number, limit: number,
|
| 752 |
-
) => Promise<TeaQLPage<Customer>>,
|
| 753 |
-
private readonly stream: (context: UserContext, chunkSize: number) => AsyncIterable<Customer>,
|
| 754 |
-
private readonly limitOne: () => void,
|
| 755 |
-
private readonly addComment: (comment: string) => void,
|
| 756 |
-
private readonly ensureIntent: () => void,
|
| 757 |
-
) {}
|
| 758 |
-
|
| 759 |
-
comment(c: string): this {
|
| 760 |
-
this.addComment(c);
|
| 761 |
-
return this;
|
| 762 |
-
}
|
| 763 |
-
|
| 764 |
-
newEntity(context: UserContext): Customer {
|
| 765 |
-
this.ensureIntent();
|
| 766 |
-
return new Customer();
|
| 767 |
-
}
|
| 768 |
-
|
| 769 |
-
executeForList(context: UserContext): Promise<SmartList<Customer>> {
|
| 770 |
-
this.ensureIntent();
|
| 771 |
-
return this.execute(context);
|
| 772 |
-
}
|
| 773 |
-
|
| 774 |
-
executeForRows(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 775 |
-
this.ensureIntent();
|
| 776 |
-
return this.executeRows(context);
|
| 777 |
-
}
|
| 778 |
-
|
| 779 |
-
executeForPage(
|
| 780 |
-
context: UserContext, offset: number, limit: number,
|
| 781 |
-
): Promise<TeaQLPage<Customer>> {
|
| 782 |
-
this.ensureIntent();
|
| 783 |
-
return this.page(context, offset, limit);
|
| 784 |
-
}
|
| 785 |
-
|
| 786 |
-
executeForStream(context: UserContext, chunkSize = 1000): AsyncIterable<Customer> {
|
| 787 |
-
this.ensureIntent();
|
| 788 |
-
return this.stream(context, chunkSize);
|
| 789 |
-
}
|
| 790 |
-
|
| 791 |
-
async executeForOne(context: UserContext): Promise<Customer | undefined> {
|
| 792 |
-
this.limitOne();
|
| 793 |
-
return (await this.executeForList(context))[0];
|
| 794 |
-
}
|
| 795 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/requests/OrderItemRequest.ts
DELETED
|
@@ -1,909 +0,0 @@
|
|
| 1 |
-
import { EntityRoot, SelectQuery, SmartList, TeaQLDataService, TeaQLPage, UserContext, executeRelationFacets } from '../../teaql-ts';
|
| 2 |
-
import { OrderItem } from '../models/OrderItem';
|
| 3 |
-
import { mergeGeneratedScalarSearch, DynamicSearchWarning } from 'teaql-ts';
|
| 4 |
-
import { GENERATED_SEARCH_MODELS } from '../../generated-search-models';
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
export class OrderItemRequest {
|
| 9 |
-
private query: SelectQuery;
|
| 10 |
-
private filters: any[] = [];
|
| 11 |
-
private _purpose: string | undefined;
|
| 12 |
-
private _comment: string | undefined;
|
| 13 |
-
private _pageCountAlias: string | undefined;
|
| 14 |
-
private _pageCountMethod: "count" | "countAs" | undefined;
|
| 15 |
-
private _dynamicSearchWarnings: DynamicSearchWarning[] = [];
|
| 16 |
-
|
| 17 |
-
constructor(minimal = false) {
|
| 18 |
-
this.query = new SelectQuery("OrderItem");
|
| 19 |
-
this.filters.push({ version: { "$gte": 1 } });
|
| 20 |
-
if (minimal) {
|
| 21 |
-
this.selectId();
|
| 22 |
-
this.selectVersion();
|
| 23 |
-
}
|
| 24 |
-
else this.selectSelfFields();
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
comment(c: string): this {
|
| 28 |
-
this.query.comment(c);
|
| 29 |
-
this._comment = c;
|
| 30 |
-
return this;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
filterByJson(source: unknown, warn?: (warning: DynamicSearchWarning) => void): this {
|
| 34 |
-
const base = this.query.clone();
|
| 35 |
-
if (this.filters.length > 0) base.filter({ "$and": this.filters });
|
| 36 |
-
const merged = mergeGeneratedScalarSearch(base, source, GENERATED_SEARCH_MODELS, warn);
|
| 37 |
-
this.query = merged.query as SelectQuery;
|
| 38 |
-
this.filters = this.query.filterCondition ? [this.query.filterCondition] : [];
|
| 39 |
-
this._dynamicSearchWarnings.push(...merged.warnings);
|
| 40 |
-
return this;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
get dynamicSearchWarnings(): readonly DynamicSearchWarning[] {
|
| 44 |
-
return this._dynamicSearchWarnings.map(warning => ({ ...warning }));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
purpose(p: string): ExecutableOrderItemRequest {
|
| 48 |
-
this.query.purpose(p);
|
| 49 |
-
this._purpose = p;
|
| 50 |
-
return new ExecutableOrderItemRequest(
|
| 51 |
-
(context) => this.executeForListInternal(context),
|
| 52 |
-
(context) => this.executeForRowsInternal(context),
|
| 53 |
-
(context, offset, limit) => this.executeForPageInternal(context, offset, limit),
|
| 54 |
-
(context, chunkSize) => this.executeForStreamInternal(context, chunkSize),
|
| 55 |
-
() => this.limit(1),
|
| 56 |
-
(c) => this.comment(c),
|
| 57 |
-
() => this.ensureIntent());
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
optimizeForContinuousPageFetch(): this {
|
| 61 |
-
this.query.optimizeForContinuousPageFetch();
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
optimizeForContinuousPageFetchWith(namespace: string, ttlSeconds: number): this {
|
| 66 |
-
this.query.optimizeForContinuousPageFetchWith(namespace, ttlSeconds);
|
| 67 |
-
return this;
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
optimizePaginationWithIdSet(): this {
|
| 71 |
-
this.query.optimizePaginationWithIdSet();
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
optimizePaginationWithIdSetConfig(namespace: string, ttlSeconds: number, maxIds: number): this {
|
| 76 |
-
this.query.optimizePaginationWithIdSetConfig(namespace, ttlSeconds, maxIds);
|
| 77 |
-
return this;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
topNProbeParentThreshold(threshold: number): this {
|
| 81 |
-
this.query.topNProbeParentThreshold(threshold);
|
| 82 |
-
return this;
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
limit(n: number): this {
|
| 86 |
-
this.query.limit(n);
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
offset(n: number): this {
|
| 91 |
-
this.query.offset(n);
|
| 92 |
-
return this;
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
toQuery(): SelectQuery {
|
| 96 |
-
if (this.filters.length > 0) {
|
| 97 |
-
this.query.filter({ "$and": this.filters });
|
| 98 |
-
}
|
| 99 |
-
return this.query;
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
withDeletedRows(): this {
|
| 103 |
-
this.filters = this.filters.filter(filter => !("version" in filter));
|
| 104 |
-
return this;
|
| 105 |
-
}
|
| 106 |
-
|
| 107 |
-
deletedRowsOnly(): this {
|
| 108 |
-
this.withDeletedRows();
|
| 109 |
-
this.filters.push({ version: { "$lte": -1 } });
|
| 110 |
-
return this;
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
selectSelfFields(): this {
|
| 114 |
-
this.query.select(["id", "customerOrder", "productName", "quantity", "unitPrice", "version"]);
|
| 115 |
-
return this;
|
| 116 |
-
}
|
| 117 |
-
|
| 118 |
-
selectId(): this {
|
| 119 |
-
this.query.select(["id"]);
|
| 120 |
-
return this;
|
| 121 |
-
}
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
selectProductName(): this {
|
| 125 |
-
this.query.select(["productName"]);
|
| 126 |
-
return this;
|
| 127 |
-
}
|
| 128 |
-
|
| 129 |
-
selectQuantity(): this {
|
| 130 |
-
this.query.select(["quantity"]);
|
| 131 |
-
return this;
|
| 132 |
-
}
|
| 133 |
-
|
| 134 |
-
selectUnitPrice(): this {
|
| 135 |
-
this.query.select(["unitPrice"]);
|
| 136 |
-
return this;
|
| 137 |
-
}
|
| 138 |
-
|
| 139 |
-
selectVersion(): this {
|
| 140 |
-
this.query.select(["version"]);
|
| 141 |
-
return this;
|
| 142 |
-
}
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
selectCustomerOrderWith(request: { toQuery(): SelectQuery }): this {
|
| 146 |
-
this.query.select(["customerOrder"]);
|
| 147 |
-
this.query.relationQuery(
|
| 148 |
-
"customerOrder", request.toQuery(), "customerOrder", "id", false,
|
| 149 |
-
{ kind: "relation-select", method: "selectCustomerOrderWith", relation: "customerOrder" });
|
| 150 |
-
return this;
|
| 151 |
-
}
|
| 152 |
-
|
| 153 |
-
withCustomerOrderMatching(request: { toQuery(): SelectQuery }): this {
|
| 154 |
-
this.filters.push({
|
| 155 |
-
"customerOrder": {
|
| 156 |
-
"$inSubquery": { query: request.toQuery(), field: "id" },
|
| 157 |
-
},
|
| 158 |
-
});
|
| 159 |
-
return this;
|
| 160 |
-
}
|
| 161 |
-
|
| 162 |
-
withoutCustomerOrderMatching(request: { toQuery(): SelectQuery }): this {
|
| 163 |
-
this.filters.push({
|
| 164 |
-
"customerOrder": {
|
| 165 |
-
"$notInSubquery": { query: request.toQuery(), field: "id" },
|
| 166 |
-
},
|
| 167 |
-
});
|
| 168 |
-
return this;
|
| 169 |
-
}
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
withIdIs(val: any): this {
|
| 175 |
-
this.filters.push({ "id": { "$eq": val } });
|
| 176 |
-
return this;
|
| 177 |
-
}
|
| 178 |
-
|
| 179 |
-
withIdIsNot(val: any): this {
|
| 180 |
-
this.filters.push({ "id": { "$ne": val } });
|
| 181 |
-
return this;
|
| 182 |
-
}
|
| 183 |
-
|
| 184 |
-
withIdIn(...vals: any[]): this {
|
| 185 |
-
this.filters.push({ "id": { "$in": vals } });
|
| 186 |
-
return this;
|
| 187 |
-
}
|
| 188 |
-
|
| 189 |
-
withIdNotIn(...vals: any[]): this {
|
| 190 |
-
this.filters.push({ "id": { "$notIn": vals } });
|
| 191 |
-
return this;
|
| 192 |
-
}
|
| 193 |
-
|
| 194 |
-
withIdGreaterThan(val: any): this {
|
| 195 |
-
this.filters.push({ "id": { "$gt": val } });
|
| 196 |
-
return this;
|
| 197 |
-
}
|
| 198 |
-
|
| 199 |
-
withIdGreaterThanOrEqualTo(val: any): this {
|
| 200 |
-
this.filters.push({ "id": { "$gte": val } });
|
| 201 |
-
return this;
|
| 202 |
-
}
|
| 203 |
-
|
| 204 |
-
withIdLessThan(val: any): this {
|
| 205 |
-
this.filters.push({ "id": { "$lt": val } });
|
| 206 |
-
return this;
|
| 207 |
-
}
|
| 208 |
-
|
| 209 |
-
withIdLessThanOrEqualTo(val: any): this {
|
| 210 |
-
this.filters.push({ "id": { "$lte": val } });
|
| 211 |
-
return this;
|
| 212 |
-
}
|
| 213 |
-
|
| 214 |
-
withIdBetween(lower: any, upper: any): this {
|
| 215 |
-
this.filters.push({ "id": { "$between": [lower, upper] } });
|
| 216 |
-
return this;
|
| 217 |
-
}
|
| 218 |
-
|
| 219 |
-
withIdIsKnown(): this {
|
| 220 |
-
this.filters.push({ "id": { "$isNull": false } });
|
| 221 |
-
return this;
|
| 222 |
-
}
|
| 223 |
-
|
| 224 |
-
withIdIsUnknown(): this {
|
| 225 |
-
this.filters.push({ "id": { "$isNull": true } });
|
| 226 |
-
return this;
|
| 227 |
-
}
|
| 228 |
-
|
| 229 |
-
filterByCustomerOrder(val: any): this {
|
| 230 |
-
this.filters.push({ "customerOrder": { "$eq": val } });
|
| 231 |
-
return this;
|
| 232 |
-
}
|
| 233 |
-
|
| 234 |
-
filterByCustomerOrderIn(...vals: any[]): this {
|
| 235 |
-
this.filters.push({ "customerOrder": { "$in": vals } });
|
| 236 |
-
return this;
|
| 237 |
-
}
|
| 238 |
-
|
| 239 |
-
withCustomerOrderIsKnown(): this {
|
| 240 |
-
this.filters.push({ "customerOrder": { "$isNull": false } });
|
| 241 |
-
return this;
|
| 242 |
-
}
|
| 243 |
-
|
| 244 |
-
withCustomerOrderIsUnknown(): this {
|
| 245 |
-
this.filters.push({ "customerOrder": { "$isNull": true } });
|
| 246 |
-
return this;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
withProductNameContaining(val: string): this {
|
| 250 |
-
this.filters.push({ "productName": { "$contains": val } });
|
| 251 |
-
return this;
|
| 252 |
-
}
|
| 253 |
-
|
| 254 |
-
withProductNameIs(val: string): this {
|
| 255 |
-
this.filters.push({ "productName": { "$eq": val } });
|
| 256 |
-
return this;
|
| 257 |
-
}
|
| 258 |
-
|
| 259 |
-
withProductNameIsNot(val: any): this {
|
| 260 |
-
this.filters.push({ "productName": { "$ne": val } });
|
| 261 |
-
return this;
|
| 262 |
-
}
|
| 263 |
-
|
| 264 |
-
withProductNameIn(...vals: any[]): this {
|
| 265 |
-
this.filters.push({ "productName": { "$in": vals } });
|
| 266 |
-
return this;
|
| 267 |
-
}
|
| 268 |
-
|
| 269 |
-
withProductNameNotIn(...vals: any[]): this {
|
| 270 |
-
this.filters.push({ "productName": { "$notIn": vals } });
|
| 271 |
-
return this;
|
| 272 |
-
}
|
| 273 |
-
|
| 274 |
-
withProductNameGreaterThan(val: any): this {
|
| 275 |
-
this.filters.push({ "productName": { "$gt": val } });
|
| 276 |
-
return this;
|
| 277 |
-
}
|
| 278 |
-
|
| 279 |
-
withProductNameGreaterThanOrEqualTo(val: any): this {
|
| 280 |
-
this.filters.push({ "productName": { "$gte": val } });
|
| 281 |
-
return this;
|
| 282 |
-
}
|
| 283 |
-
|
| 284 |
-
withProductNameLessThan(val: any): this {
|
| 285 |
-
this.filters.push({ "productName": { "$lt": val } });
|
| 286 |
-
return this;
|
| 287 |
-
}
|
| 288 |
-
|
| 289 |
-
withProductNameLessThanOrEqualTo(val: any): this {
|
| 290 |
-
this.filters.push({ "productName": { "$lte": val } });
|
| 291 |
-
return this;
|
| 292 |
-
}
|
| 293 |
-
|
| 294 |
-
withProductNameBetween(lower: any, upper: any): this {
|
| 295 |
-
this.filters.push({ "productName": { "$between": [lower, upper] } });
|
| 296 |
-
return this;
|
| 297 |
-
}
|
| 298 |
-
|
| 299 |
-
withProductNameIsKnown(): this {
|
| 300 |
-
this.filters.push({ "productName": { "$isNull": false } });
|
| 301 |
-
return this;
|
| 302 |
-
}
|
| 303 |
-
|
| 304 |
-
withProductNameIsUnknown(): this {
|
| 305 |
-
this.filters.push({ "productName": { "$isNull": true } });
|
| 306 |
-
return this;
|
| 307 |
-
}
|
| 308 |
-
withProductNameNotContaining(val: string): this {
|
| 309 |
-
this.filters.push({ "productName": { "$notContains": val } });
|
| 310 |
-
return this;
|
| 311 |
-
}
|
| 312 |
-
|
| 313 |
-
withProductNameStartingWith(val: string): this {
|
| 314 |
-
this.filters.push({ "productName": { "$startsWith": val } });
|
| 315 |
-
return this;
|
| 316 |
-
}
|
| 317 |
-
|
| 318 |
-
withProductNameNotStartingWith(val: string): this {
|
| 319 |
-
this.filters.push({ "productName": { "$notStartsWith": val } });
|
| 320 |
-
return this;
|
| 321 |
-
}
|
| 322 |
-
|
| 323 |
-
withProductNameEndingWith(val: string): this {
|
| 324 |
-
this.filters.push({ "productName": { "$endsWith": val } });
|
| 325 |
-
return this;
|
| 326 |
-
}
|
| 327 |
-
|
| 328 |
-
withProductNameNotEndingWith(val: string): this {
|
| 329 |
-
this.filters.push({ "productName": { "$notEndsWith": val } });
|
| 330 |
-
return this;
|
| 331 |
-
}
|
| 332 |
-
|
| 333 |
-
withProductNameSoundingLike(val: string): this {
|
| 334 |
-
this.filters.push({ "productName": { "$soundLike": val } });
|
| 335 |
-
return this;
|
| 336 |
-
}
|
| 337 |
-
|
| 338 |
-
withQuantityIs(val: any): this {
|
| 339 |
-
this.filters.push({ "quantity": { "$eq": val } });
|
| 340 |
-
return this;
|
| 341 |
-
}
|
| 342 |
-
|
| 343 |
-
withQuantityIsNot(val: any): this {
|
| 344 |
-
this.filters.push({ "quantity": { "$ne": val } });
|
| 345 |
-
return this;
|
| 346 |
-
}
|
| 347 |
-
|
| 348 |
-
withQuantityIn(...vals: any[]): this {
|
| 349 |
-
this.filters.push({ "quantity": { "$in": vals } });
|
| 350 |
-
return this;
|
| 351 |
-
}
|
| 352 |
-
|
| 353 |
-
withQuantityNotIn(...vals: any[]): this {
|
| 354 |
-
this.filters.push({ "quantity": { "$notIn": vals } });
|
| 355 |
-
return this;
|
| 356 |
-
}
|
| 357 |
-
|
| 358 |
-
withQuantityGreaterThan(val: any): this {
|
| 359 |
-
this.filters.push({ "quantity": { "$gt": val } });
|
| 360 |
-
return this;
|
| 361 |
-
}
|
| 362 |
-
|
| 363 |
-
withQuantityGreaterThanOrEqualTo(val: any): this {
|
| 364 |
-
this.filters.push({ "quantity": { "$gte": val } });
|
| 365 |
-
return this;
|
| 366 |
-
}
|
| 367 |
-
|
| 368 |
-
withQuantityLessThan(val: any): this {
|
| 369 |
-
this.filters.push({ "quantity": { "$lt": val } });
|
| 370 |
-
return this;
|
| 371 |
-
}
|
| 372 |
-
|
| 373 |
-
withQuantityLessThanOrEqualTo(val: any): this {
|
| 374 |
-
this.filters.push({ "quantity": { "$lte": val } });
|
| 375 |
-
return this;
|
| 376 |
-
}
|
| 377 |
-
|
| 378 |
-
withQuantityBetween(lower: any, upper: any): this {
|
| 379 |
-
this.filters.push({ "quantity": { "$between": [lower, upper] } });
|
| 380 |
-
return this;
|
| 381 |
-
}
|
| 382 |
-
|
| 383 |
-
withQuantityIsKnown(): this {
|
| 384 |
-
this.filters.push({ "quantity": { "$isNull": false } });
|
| 385 |
-
return this;
|
| 386 |
-
}
|
| 387 |
-
|
| 388 |
-
withQuantityIsUnknown(): this {
|
| 389 |
-
this.filters.push({ "quantity": { "$isNull": true } });
|
| 390 |
-
return this;
|
| 391 |
-
}
|
| 392 |
-
|
| 393 |
-
withUnitPriceIs(val: any): this {
|
| 394 |
-
this.filters.push({ "unitPrice": { "$eq": val } });
|
| 395 |
-
return this;
|
| 396 |
-
}
|
| 397 |
-
|
| 398 |
-
withUnitPriceIsNot(val: any): this {
|
| 399 |
-
this.filters.push({ "unitPrice": { "$ne": val } });
|
| 400 |
-
return this;
|
| 401 |
-
}
|
| 402 |
-
|
| 403 |
-
withUnitPriceIn(...vals: any[]): this {
|
| 404 |
-
this.filters.push({ "unitPrice": { "$in": vals } });
|
| 405 |
-
return this;
|
| 406 |
-
}
|
| 407 |
-
|
| 408 |
-
withUnitPriceNotIn(...vals: any[]): this {
|
| 409 |
-
this.filters.push({ "unitPrice": { "$notIn": vals } });
|
| 410 |
-
return this;
|
| 411 |
-
}
|
| 412 |
-
|
| 413 |
-
withUnitPriceGreaterThan(val: any): this {
|
| 414 |
-
this.filters.push({ "unitPrice": { "$gt": val } });
|
| 415 |
-
return this;
|
| 416 |
-
}
|
| 417 |
-
|
| 418 |
-
withUnitPriceGreaterThanOrEqualTo(val: any): this {
|
| 419 |
-
this.filters.push({ "unitPrice": { "$gte": val } });
|
| 420 |
-
return this;
|
| 421 |
-
}
|
| 422 |
-
|
| 423 |
-
withUnitPriceLessThan(val: any): this {
|
| 424 |
-
this.filters.push({ "unitPrice": { "$lt": val } });
|
| 425 |
-
return this;
|
| 426 |
-
}
|
| 427 |
-
|
| 428 |
-
withUnitPriceLessThanOrEqualTo(val: any): this {
|
| 429 |
-
this.filters.push({ "unitPrice": { "$lte": val } });
|
| 430 |
-
return this;
|
| 431 |
-
}
|
| 432 |
-
|
| 433 |
-
withUnitPriceBetween(lower: any, upper: any): this {
|
| 434 |
-
this.filters.push({ "unitPrice": { "$between": [lower, upper] } });
|
| 435 |
-
return this;
|
| 436 |
-
}
|
| 437 |
-
|
| 438 |
-
withUnitPriceIsKnown(): this {
|
| 439 |
-
this.filters.push({ "unitPrice": { "$isNull": false } });
|
| 440 |
-
return this;
|
| 441 |
-
}
|
| 442 |
-
|
| 443 |
-
withUnitPriceIsUnknown(): this {
|
| 444 |
-
this.filters.push({ "unitPrice": { "$isNull": true } });
|
| 445 |
-
return this;
|
| 446 |
-
}
|
| 447 |
-
|
| 448 |
-
withVersionIs(val: any): this {
|
| 449 |
-
this.filters.push({ "version": { "$eq": val } });
|
| 450 |
-
return this;
|
| 451 |
-
}
|
| 452 |
-
|
| 453 |
-
withVersionIsNot(val: any): this {
|
| 454 |
-
this.filters.push({ "version": { "$ne": val } });
|
| 455 |
-
return this;
|
| 456 |
-
}
|
| 457 |
-
|
| 458 |
-
withVersionIn(...vals: any[]): this {
|
| 459 |
-
this.filters.push({ "version": { "$in": vals } });
|
| 460 |
-
return this;
|
| 461 |
-
}
|
| 462 |
-
|
| 463 |
-
withVersionNotIn(...vals: any[]): this {
|
| 464 |
-
this.filters.push({ "version": { "$notIn": vals } });
|
| 465 |
-
return this;
|
| 466 |
-
}
|
| 467 |
-
|
| 468 |
-
withVersionGreaterThan(val: any): this {
|
| 469 |
-
this.filters.push({ "version": { "$gt": val } });
|
| 470 |
-
return this;
|
| 471 |
-
}
|
| 472 |
-
|
| 473 |
-
withVersionGreaterThanOrEqualTo(val: any): this {
|
| 474 |
-
this.filters.push({ "version": { "$gte": val } });
|
| 475 |
-
return this;
|
| 476 |
-
}
|
| 477 |
-
|
| 478 |
-
withVersionLessThan(val: any): this {
|
| 479 |
-
this.filters.push({ "version": { "$lt": val } });
|
| 480 |
-
return this;
|
| 481 |
-
}
|
| 482 |
-
|
| 483 |
-
withVersionLessThanOrEqualTo(val: any): this {
|
| 484 |
-
this.filters.push({ "version": { "$lte": val } });
|
| 485 |
-
return this;
|
| 486 |
-
}
|
| 487 |
-
|
| 488 |
-
withVersionBetween(lower: any, upper: any): this {
|
| 489 |
-
this.filters.push({ "version": { "$between": [lower, upper] } });
|
| 490 |
-
return this;
|
| 491 |
-
}
|
| 492 |
-
|
| 493 |
-
withVersionIsKnown(): this {
|
| 494 |
-
this.filters.push({ "version": { "$isNull": false } });
|
| 495 |
-
return this;
|
| 496 |
-
}
|
| 497 |
-
|
| 498 |
-
withVersionIsUnknown(): this {
|
| 499 |
-
this.filters.push({ "version": { "$isNull": true } });
|
| 500 |
-
return this;
|
| 501 |
-
}
|
| 502 |
-
|
| 503 |
-
orderByIdAscending(): this {
|
| 504 |
-
this.query.orderBy("id", "asc");
|
| 505 |
-
return this;
|
| 506 |
-
}
|
| 507 |
-
|
| 508 |
-
orderByIdDescending(): this {
|
| 509 |
-
this.query.orderBy("id", "desc");
|
| 510 |
-
return this;
|
| 511 |
-
}
|
| 512 |
-
|
| 513 |
-
|
| 514 |
-
orderByProductNameAscending(): this {
|
| 515 |
-
this.query.orderBy("productName", "asc");
|
| 516 |
-
return this;
|
| 517 |
-
}
|
| 518 |
-
|
| 519 |
-
orderByProductNameDescending(): this {
|
| 520 |
-
this.query.orderBy("productName", "desc");
|
| 521 |
-
return this;
|
| 522 |
-
}
|
| 523 |
-
|
| 524 |
-
orderByQuantityAscending(): this {
|
| 525 |
-
this.query.orderBy("quantity", "asc");
|
| 526 |
-
return this;
|
| 527 |
-
}
|
| 528 |
-
|
| 529 |
-
orderByQuantityDescending(): this {
|
| 530 |
-
this.query.orderBy("quantity", "desc");
|
| 531 |
-
return this;
|
| 532 |
-
}
|
| 533 |
-
|
| 534 |
-
orderByUnitPriceAscending(): this {
|
| 535 |
-
this.query.orderBy("unitPrice", "asc");
|
| 536 |
-
return this;
|
| 537 |
-
}
|
| 538 |
-
|
| 539 |
-
orderByUnitPriceDescending(): this {
|
| 540 |
-
this.query.orderBy("unitPrice", "desc");
|
| 541 |
-
return this;
|
| 542 |
-
}
|
| 543 |
-
|
| 544 |
-
orderByVersionAscending(): this {
|
| 545 |
-
this.query.orderBy("version", "asc");
|
| 546 |
-
return this;
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
orderByVersionDescending(): this {
|
| 550 |
-
this.query.orderBy("version", "desc");
|
| 551 |
-
return this;
|
| 552 |
-
}
|
| 553 |
-
|
| 554 |
-
|
| 555 |
-
// --- Aggregations ---
|
| 556 |
-
count(): this {
|
| 557 |
-
this.query.aggregate("Count", "id", "count");
|
| 558 |
-
this._pageCountAlias = "count";
|
| 559 |
-
this._pageCountMethod = "count";
|
| 560 |
-
return this;
|
| 561 |
-
}
|
| 562 |
-
|
| 563 |
-
countAs(retName: string): this {
|
| 564 |
-
this.query.aggregate("Count", "id", retName);
|
| 565 |
-
this._pageCountAlias = retName;
|
| 566 |
-
this._pageCountMethod = "countAs";
|
| 567 |
-
return this;
|
| 568 |
-
}
|
| 569 |
-
|
| 570 |
-
minQuantity(): this {
|
| 571 |
-
return this.minQuantityAs("minOfQuantity");
|
| 572 |
-
}
|
| 573 |
-
|
| 574 |
-
minQuantityAs(retName: string): this {
|
| 575 |
-
this.query.aggregate("min", "quantity", retName);
|
| 576 |
-
return this;
|
| 577 |
-
}
|
| 578 |
-
maxQuantity(): this {
|
| 579 |
-
return this.maxQuantityAs("maxOfQuantity");
|
| 580 |
-
}
|
| 581 |
-
|
| 582 |
-
maxQuantityAs(retName: string): this {
|
| 583 |
-
this.query.aggregate("max", "quantity", retName);
|
| 584 |
-
return this;
|
| 585 |
-
}
|
| 586 |
-
sumQuantity(): this {
|
| 587 |
-
return this.sumQuantityAs("sumOfQuantity");
|
| 588 |
-
}
|
| 589 |
-
|
| 590 |
-
sumQuantityAs(retName: string): this {
|
| 591 |
-
this.query.aggregate("sum", "quantity", retName);
|
| 592 |
-
return this;
|
| 593 |
-
}
|
| 594 |
-
avgQuantity(): this {
|
| 595 |
-
return this.avgQuantityAs("avgOfQuantity");
|
| 596 |
-
}
|
| 597 |
-
|
| 598 |
-
avgQuantityAs(retName: string): this {
|
| 599 |
-
this.query.aggregate("avg", "quantity", retName);
|
| 600 |
-
return this;
|
| 601 |
-
}
|
| 602 |
-
standardDeviationQuantity(): this {
|
| 603 |
-
return this.standardDeviationQuantityAs("standardDeviationOfQuantity");
|
| 604 |
-
}
|
| 605 |
-
|
| 606 |
-
standardDeviationQuantityAs(retName: string): this {
|
| 607 |
-
this.query.aggregate("stddev", "quantity", retName);
|
| 608 |
-
return this;
|
| 609 |
-
}
|
| 610 |
-
squareRootOfPopulationStandardDeviationQuantity(): this {
|
| 611 |
-
return this.squareRootOfPopulationStandardDeviationQuantityAs("squareRootOfPopulationStandardDeviationOfQuantity");
|
| 612 |
-
}
|
| 613 |
-
|
| 614 |
-
squareRootOfPopulationStandardDeviationQuantityAs(retName: string): this {
|
| 615 |
-
this.query.aggregate("stddev_pop", "quantity", retName);
|
| 616 |
-
return this;
|
| 617 |
-
}
|
| 618 |
-
sampleVarianceQuantity(): this {
|
| 619 |
-
return this.sampleVarianceQuantityAs("sampleVarianceOfQuantity");
|
| 620 |
-
}
|
| 621 |
-
|
| 622 |
-
sampleVarianceQuantityAs(retName: string): this {
|
| 623 |
-
this.query.aggregate("var_samp", "quantity", retName);
|
| 624 |
-
return this;
|
| 625 |
-
}
|
| 626 |
-
samplePopulationVarianceQuantity(): this {
|
| 627 |
-
return this.samplePopulationVarianceQuantityAs("samplePopulationVarianceOfQuantity");
|
| 628 |
-
}
|
| 629 |
-
|
| 630 |
-
samplePopulationVarianceQuantityAs(retName: string): this {
|
| 631 |
-
this.query.aggregate("var_pop", "quantity", retName);
|
| 632 |
-
return this;
|
| 633 |
-
}
|
| 634 |
-
minUnitPrice(): this {
|
| 635 |
-
return this.minUnitPriceAs("minOfUnitPrice");
|
| 636 |
-
}
|
| 637 |
-
|
| 638 |
-
minUnitPriceAs(retName: string): this {
|
| 639 |
-
this.query.aggregate("min", "unitPrice", retName);
|
| 640 |
-
return this;
|
| 641 |
-
}
|
| 642 |
-
maxUnitPrice(): this {
|
| 643 |
-
return this.maxUnitPriceAs("maxOfUnitPrice");
|
| 644 |
-
}
|
| 645 |
-
|
| 646 |
-
maxUnitPriceAs(retName: string): this {
|
| 647 |
-
this.query.aggregate("max", "unitPrice", retName);
|
| 648 |
-
return this;
|
| 649 |
-
}
|
| 650 |
-
sumUnitPrice(): this {
|
| 651 |
-
return this.sumUnitPriceAs("sumOfUnitPrice");
|
| 652 |
-
}
|
| 653 |
-
|
| 654 |
-
sumUnitPriceAs(retName: string): this {
|
| 655 |
-
this.query.aggregate("sum", "unitPrice", retName);
|
| 656 |
-
return this;
|
| 657 |
-
}
|
| 658 |
-
avgUnitPrice(): this {
|
| 659 |
-
return this.avgUnitPriceAs("avgOfUnitPrice");
|
| 660 |
-
}
|
| 661 |
-
|
| 662 |
-
avgUnitPriceAs(retName: string): this {
|
| 663 |
-
this.query.aggregate("avg", "unitPrice", retName);
|
| 664 |
-
return this;
|
| 665 |
-
}
|
| 666 |
-
standardDeviationUnitPrice(): this {
|
| 667 |
-
return this.standardDeviationUnitPriceAs("standardDeviationOfUnitPrice");
|
| 668 |
-
}
|
| 669 |
-
|
| 670 |
-
standardDeviationUnitPriceAs(retName: string): this {
|
| 671 |
-
this.query.aggregate("stddev", "unitPrice", retName);
|
| 672 |
-
return this;
|
| 673 |
-
}
|
| 674 |
-
squareRootOfPopulationStandardDeviationUnitPrice(): this {
|
| 675 |
-
return this.squareRootOfPopulationStandardDeviationUnitPriceAs("squareRootOfPopulationStandardDeviationOfUnitPrice");
|
| 676 |
-
}
|
| 677 |
-
|
| 678 |
-
squareRootOfPopulationStandardDeviationUnitPriceAs(retName: string): this {
|
| 679 |
-
this.query.aggregate("stddev_pop", "unitPrice", retName);
|
| 680 |
-
return this;
|
| 681 |
-
}
|
| 682 |
-
sampleVarianceUnitPrice(): this {
|
| 683 |
-
return this.sampleVarianceUnitPriceAs("sampleVarianceOfUnitPrice");
|
| 684 |
-
}
|
| 685 |
-
|
| 686 |
-
sampleVarianceUnitPriceAs(retName: string): this {
|
| 687 |
-
this.query.aggregate("var_samp", "unitPrice", retName);
|
| 688 |
-
return this;
|
| 689 |
-
}
|
| 690 |
-
samplePopulationVarianceUnitPrice(): this {
|
| 691 |
-
return this.samplePopulationVarianceUnitPriceAs("samplePopulationVarianceOfUnitPrice");
|
| 692 |
-
}
|
| 693 |
-
|
| 694 |
-
samplePopulationVarianceUnitPriceAs(retName: string): this {
|
| 695 |
-
this.query.aggregate("var_pop", "unitPrice", retName);
|
| 696 |
-
return this;
|
| 697 |
-
}
|
| 698 |
-
|
| 699 |
-
// --- Group By ---
|
| 700 |
-
groupById(): this {
|
| 701 |
-
this.query.groupBy("id");
|
| 702 |
-
return this;
|
| 703 |
-
}
|
| 704 |
-
|
| 705 |
-
groupByIdAs(retName: string): this {
|
| 706 |
-
this.query.groupBy("id"); // In TS we don't alias group by yet natively
|
| 707 |
-
return this;
|
| 708 |
-
}
|
| 709 |
-
groupByCustomerOrder(): this {
|
| 710 |
-
this.query.groupBy("customerOrder");
|
| 711 |
-
return this;
|
| 712 |
-
}
|
| 713 |
-
|
| 714 |
-
groupByCustomerOrderAs(retName: string): this {
|
| 715 |
-
this.query.groupBy("customerOrder"); // In TS we don't alias group by yet natively
|
| 716 |
-
return this;
|
| 717 |
-
}
|
| 718 |
-
groupByProductName(): this {
|
| 719 |
-
this.query.groupBy("productName");
|
| 720 |
-
return this;
|
| 721 |
-
}
|
| 722 |
-
|
| 723 |
-
groupByProductNameAs(retName: string): this {
|
| 724 |
-
this.query.groupBy("productName"); // In TS we don't alias group by yet natively
|
| 725 |
-
return this;
|
| 726 |
-
}
|
| 727 |
-
groupByQuantity(): this {
|
| 728 |
-
this.query.groupBy("quantity");
|
| 729 |
-
return this;
|
| 730 |
-
}
|
| 731 |
-
|
| 732 |
-
groupByQuantityAs(retName: string): this {
|
| 733 |
-
this.query.groupBy("quantity"); // In TS we don't alias group by yet natively
|
| 734 |
-
return this;
|
| 735 |
-
}
|
| 736 |
-
groupByUnitPrice(): this {
|
| 737 |
-
this.query.groupBy("unitPrice");
|
| 738 |
-
return this;
|
| 739 |
-
}
|
| 740 |
-
|
| 741 |
-
groupByUnitPriceAs(retName: string): this {
|
| 742 |
-
this.query.groupBy("unitPrice"); // In TS we don't alias group by yet natively
|
| 743 |
-
return this;
|
| 744 |
-
}
|
| 745 |
-
groupByVersion(): this {
|
| 746 |
-
this.query.groupBy("version");
|
| 747 |
-
return this;
|
| 748 |
-
}
|
| 749 |
-
|
| 750 |
-
groupByVersionAs(retName: string): this {
|
| 751 |
-
this.query.groupBy("version"); // In TS we don't alias group by yet natively
|
| 752 |
-
return this;
|
| 753 |
-
}
|
| 754 |
-
|
| 755 |
-
// --- Facets ---
|
| 756 |
-
facetByCustomerOrderAs(
|
| 757 |
-
facetName: string,
|
| 758 |
-
request: { toQuery(): SelectQuery },
|
| 759 |
-
includeAllFacets = true,
|
| 760 |
-
): this {
|
| 761 |
-
this.query.facetBy(facetName, "customerOrder", request, includeAllFacets,
|
| 762 |
-
{ kind: "facet", method: "facetByCustomerOrderAs", relation: "customerOrder", alias: facetName });
|
| 763 |
-
return this;
|
| 764 |
-
}
|
| 765 |
-
|
| 766 |
-
|
| 767 |
-
private async executeForListInternal(context: UserContext): Promise<SmartList<OrderItem>> {
|
| 768 |
-
this.ensureIntent();
|
| 769 |
-
if (this.filters.length > 0) {
|
| 770 |
-
this.query.filter({ "$and": this.filters });
|
| 771 |
-
}
|
| 772 |
-
|
| 773 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 774 |
-
const rows = await service.executeQuery(context.prepareQuery(this.query));
|
| 775 |
-
const queryRoot = new EntityRoot();
|
| 776 |
-
const aggregateOnly = this.query.aggregateItems.length > 0 && this.query.groupByItems.length === 0;
|
| 777 |
-
const data = aggregateOnly ? [] : rows.map((row: unknown) =>
|
| 778 |
-
row instanceof OrderItem
|
| 779 |
-
? row
|
| 780 |
-
: OrderItem.fromRecord(row as Record<string, unknown>, queryRoot));
|
| 781 |
-
const result = new SmartList<OrderItem>(data);
|
| 782 |
-
if (aggregateOnly && rows[0]) Object.assign(result.aggregations, rows[0]);
|
| 783 |
-
|
| 784 |
-
if (this.query.facets.length > 0) {
|
| 785 |
-
result.facets = await executeRelationFacets(
|
| 786 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 787 |
-
}
|
| 788 |
-
|
| 789 |
-
return result;
|
| 790 |
-
}
|
| 791 |
-
|
| 792 |
-
private async executeForRowsInternal(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 793 |
-
this.ensureIntent();
|
| 794 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 795 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 796 |
-
return new SmartList<Record<string, unknown>>(
|
| 797 |
-
await service.executeQuery(context.prepareQuery(this.query)) as Record<string, unknown>[]);
|
| 798 |
-
}
|
| 799 |
-
|
| 800 |
-
private async executeForPageInternal(
|
| 801 |
-
context: UserContext, offset: number, limit: number,
|
| 802 |
-
): Promise<TeaQLPage<OrderItem>> {
|
| 803 |
-
this.ensureIntent();
|
| 804 |
-
this.query.offset(offset).limit(limit);
|
| 805 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 806 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 807 |
-
const useIdSet = this.query.localIdSetPaginationOptions() !== undefined;
|
| 808 |
-
const countOperation = { kind: "named-count" as const,
|
| 809 |
-
method: this._pageCountMethod ?? "count",
|
| 810 |
-
...(this._pageCountMethod === "countAs" ? { alias: this._pageCountAlias } : {}) };
|
| 811 |
-
const totalCountBeforeRows = useIdSet ? undefined : await service.executeCount(
|
| 812 |
-
this.query, this._pageCountAlias, countOperation);
|
| 813 |
-
const pageQuery = this.query.clone();
|
| 814 |
-
// A page count describes the full filtered set, not an aggregate-only page row.
|
| 815 |
-
pageQuery.aggregateItems = pageQuery.aggregateItems.filter(item =>
|
| 816 |
-
!(String(item.function).toLowerCase() === "count" && item.alias === this._pageCountAlias));
|
| 817 |
-
const rows = await service.executeQuery(context.prepareQuery(pageQuery));
|
| 818 |
-
const totalCount = useIdSet && context.idSetPaginationCountAccuracy === "EXACT"
|
| 819 |
-
? context.idSetPaginationCount!
|
| 820 |
-
: (totalCountBeforeRows ?? await service.executeCount(this.query, this._pageCountAlias, countOperation));
|
| 821 |
-
const queryRoot = new EntityRoot();
|
| 822 |
-
const data = new SmartList(rows.map((row: unknown) =>
|
| 823 |
-
row instanceof OrderItem
|
| 824 |
-
? row
|
| 825 |
-
: OrderItem.fromRecord(row as Record<string, unknown>, queryRoot)));
|
| 826 |
-
data.totalCount = totalCount;
|
| 827 |
-
if (this._pageCountAlias !== undefined) data.aggregations[this._pageCountAlias] = totalCount;
|
| 828 |
-
if (this.query.facets.length > 0) {
|
| 829 |
-
data.facets = await executeRelationFacets(
|
| 830 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 831 |
-
}
|
| 832 |
-
return { data, totalCount, offset, limit };
|
| 833 |
-
}
|
| 834 |
-
|
| 835 |
-
private async *executeForStreamInternal(context: UserContext, chunkSize: number): AsyncIterable<OrderItem> {
|
| 836 |
-
this.ensureIntent();
|
| 837 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 838 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 839 |
-
const queryRoot = new EntityRoot();
|
| 840 |
-
for await (const chunk of service.executeForStream(this.query, chunkSize)) {
|
| 841 |
-
for (const entity of chunk) {
|
| 842 |
-
yield entity instanceof OrderItem
|
| 843 |
-
? entity
|
| 844 |
-
: OrderItem.fromRecord(entity as Record<string, unknown>, queryRoot);
|
| 845 |
-
}
|
| 846 |
-
}
|
| 847 |
-
}
|
| 848 |
-
|
| 849 |
-
private ensureIntent(): void {
|
| 850 |
-
if (!this._comment?.trim()) {
|
| 851 |
-
throw new Error("Security audit failure: non-empty comment() is required before execution");
|
| 852 |
-
}
|
| 853 |
-
if (!this._purpose?.trim()) {
|
| 854 |
-
throw new Error("Security audit failure: non-empty purpose() is required before execution");
|
| 855 |
-
}
|
| 856 |
-
}
|
| 857 |
-
|
| 858 |
-
}
|
| 859 |
-
|
| 860 |
-
export class ExecutableOrderItemRequest {
|
| 861 |
-
constructor(
|
| 862 |
-
private readonly execute: (context: UserContext) => Promise<SmartList<OrderItem>>,
|
| 863 |
-
private readonly executeRows: (context: UserContext) => Promise<SmartList<Record<string, unknown>>>,
|
| 864 |
-
private readonly page: (
|
| 865 |
-
context: UserContext, offset: number, limit: number,
|
| 866 |
-
) => Promise<TeaQLPage<OrderItem>>,
|
| 867 |
-
private readonly stream: (context: UserContext, chunkSize: number) => AsyncIterable<OrderItem>,
|
| 868 |
-
private readonly limitOne: () => void,
|
| 869 |
-
private readonly addComment: (comment: string) => void,
|
| 870 |
-
private readonly ensureIntent: () => void,
|
| 871 |
-
) {}
|
| 872 |
-
|
| 873 |
-
comment(c: string): this {
|
| 874 |
-
this.addComment(c);
|
| 875 |
-
return this;
|
| 876 |
-
}
|
| 877 |
-
|
| 878 |
-
newEntity(context: UserContext): OrderItem {
|
| 879 |
-
this.ensureIntent();
|
| 880 |
-
return new OrderItem();
|
| 881 |
-
}
|
| 882 |
-
|
| 883 |
-
executeForList(context: UserContext): Promise<SmartList<OrderItem>> {
|
| 884 |
-
this.ensureIntent();
|
| 885 |
-
return this.execute(context);
|
| 886 |
-
}
|
| 887 |
-
|
| 888 |
-
executeForRows(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 889 |
-
this.ensureIntent();
|
| 890 |
-
return this.executeRows(context);
|
| 891 |
-
}
|
| 892 |
-
|
| 893 |
-
executeForPage(
|
| 894 |
-
context: UserContext, offset: number, limit: number,
|
| 895 |
-
): Promise<TeaQLPage<OrderItem>> {
|
| 896 |
-
this.ensureIntent();
|
| 897 |
-
return this.page(context, offset, limit);
|
| 898 |
-
}
|
| 899 |
-
|
| 900 |
-
executeForStream(context: UserContext, chunkSize = 1000): AsyncIterable<OrderItem> {
|
| 901 |
-
this.ensureIntent();
|
| 902 |
-
return this.stream(context, chunkSize);
|
| 903 |
-
}
|
| 904 |
-
|
| 905 |
-
async executeForOne(context: UserContext): Promise<OrderItem | undefined> {
|
| 906 |
-
this.limitOne();
|
| 907 |
-
return (await this.executeForList(context))[0];
|
| 908 |
-
}
|
| 909 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/requests/OrderStatusRequest.ts
DELETED
|
@@ -1,1162 +0,0 @@
|
|
| 1 |
-
import { EntityRoot, SelectQuery, SmartList, TeaQLDataService, TeaQLPage, UserContext, executeRelationFacets } from '../../teaql-ts';
|
| 2 |
-
import { OrderStatus } from '../models/OrderStatus';
|
| 3 |
-
import { mergeGeneratedScalarSearch, DynamicSearchWarning } from 'teaql-ts';
|
| 4 |
-
import { GENERATED_SEARCH_MODELS } from '../../generated-search-models';
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
export class OrderStatusRequest {
|
| 9 |
-
private query: SelectQuery;
|
| 10 |
-
private filters: any[] = [];
|
| 11 |
-
private _purpose: string | undefined;
|
| 12 |
-
private _comment: string | undefined;
|
| 13 |
-
private _pageCountAlias: string | undefined;
|
| 14 |
-
private _pageCountMethod: "count" | "countAs" | undefined;
|
| 15 |
-
private _dynamicSearchWarnings: DynamicSearchWarning[] = [];
|
| 16 |
-
|
| 17 |
-
constructor(minimal = false) {
|
| 18 |
-
this.query = new SelectQuery("OrderStatus");
|
| 19 |
-
this.filters.push({ version: { "$gte": 1 } });
|
| 20 |
-
if (minimal) {
|
| 21 |
-
this.selectId();
|
| 22 |
-
this.selectVersion();
|
| 23 |
-
}
|
| 24 |
-
else this.selectSelfFields();
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
comment(c: string): this {
|
| 28 |
-
this.query.comment(c);
|
| 29 |
-
this._comment = c;
|
| 30 |
-
return this;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
filterByJson(source: unknown, warn?: (warning: DynamicSearchWarning) => void): this {
|
| 34 |
-
const base = this.query.clone();
|
| 35 |
-
if (this.filters.length > 0) base.filter({ "$and": this.filters });
|
| 36 |
-
const merged = mergeGeneratedScalarSearch(base, source, GENERATED_SEARCH_MODELS, warn);
|
| 37 |
-
this.query = merged.query as SelectQuery;
|
| 38 |
-
this.filters = this.query.filterCondition ? [this.query.filterCondition] : [];
|
| 39 |
-
this._dynamicSearchWarnings.push(...merged.warnings);
|
| 40 |
-
return this;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
get dynamicSearchWarnings(): readonly DynamicSearchWarning[] {
|
| 44 |
-
return this._dynamicSearchWarnings.map(warning => ({ ...warning }));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
purpose(p: string): ExecutableOrderStatusRequest {
|
| 48 |
-
this.query.purpose(p);
|
| 49 |
-
this._purpose = p;
|
| 50 |
-
return new ExecutableOrderStatusRequest(
|
| 51 |
-
(context) => this.executeForListInternal(context),
|
| 52 |
-
(context) => this.executeForRowsInternal(context),
|
| 53 |
-
(context, offset, limit) => this.executeForPageInternal(context, offset, limit),
|
| 54 |
-
(context, chunkSize) => this.executeForStreamInternal(context, chunkSize),
|
| 55 |
-
() => this.limit(1),
|
| 56 |
-
(c) => this.comment(c),
|
| 57 |
-
() => this.ensureIntent());
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
optimizeForContinuousPageFetch(): this {
|
| 61 |
-
this.query.optimizeForContinuousPageFetch();
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
optimizeForContinuousPageFetchWith(namespace: string, ttlSeconds: number): this {
|
| 66 |
-
this.query.optimizeForContinuousPageFetchWith(namespace, ttlSeconds);
|
| 67 |
-
return this;
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
optimizePaginationWithIdSet(): this {
|
| 71 |
-
this.query.optimizePaginationWithIdSet();
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
optimizePaginationWithIdSetConfig(namespace: string, ttlSeconds: number, maxIds: number): this {
|
| 76 |
-
this.query.optimizePaginationWithIdSetConfig(namespace, ttlSeconds, maxIds);
|
| 77 |
-
return this;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
topNProbeParentThreshold(threshold: number): this {
|
| 81 |
-
this.query.topNProbeParentThreshold(threshold);
|
| 82 |
-
return this;
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
limit(n: number): this {
|
| 86 |
-
this.query.limit(n);
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
offset(n: number): this {
|
| 91 |
-
this.query.offset(n);
|
| 92 |
-
return this;
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
toQuery(): SelectQuery {
|
| 96 |
-
if (this.filters.length > 0) {
|
| 97 |
-
this.query.filter({ "$and": this.filters });
|
| 98 |
-
}
|
| 99 |
-
return this.query;
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
withDeletedRows(): this {
|
| 103 |
-
this.filters = this.filters.filter(filter => !("version" in filter));
|
| 104 |
-
return this;
|
| 105 |
-
}
|
| 106 |
-
|
| 107 |
-
deletedRowsOnly(): this {
|
| 108 |
-
this.withDeletedRows();
|
| 109 |
-
this.filters.push({ version: { "$lte": -1 } });
|
| 110 |
-
return this;
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
selectSelfFields(): this {
|
| 114 |
-
this.query.select(["platform", "id", "name", "code", "color", "displayOrder", "version"]);
|
| 115 |
-
return this;
|
| 116 |
-
}
|
| 117 |
-
|
| 118 |
-
selectId(): this {
|
| 119 |
-
this.query.select(["id"]);
|
| 120 |
-
return this;
|
| 121 |
-
}
|
| 122 |
-
|
| 123 |
-
selectName(): this {
|
| 124 |
-
this.query.select(["name"]);
|
| 125 |
-
return this;
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
selectCode(): this {
|
| 129 |
-
this.query.select(["code"]);
|
| 130 |
-
return this;
|
| 131 |
-
}
|
| 132 |
-
|
| 133 |
-
selectColor(): this {
|
| 134 |
-
this.query.select(["color"]);
|
| 135 |
-
return this;
|
| 136 |
-
}
|
| 137 |
-
|
| 138 |
-
selectDisplayOrder(): this {
|
| 139 |
-
this.query.select(["displayOrder"]);
|
| 140 |
-
return this;
|
| 141 |
-
}
|
| 142 |
-
|
| 143 |
-
selectVersion(): this {
|
| 144 |
-
this.query.select(["version"]);
|
| 145 |
-
return this;
|
| 146 |
-
}
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
selectPlatformWith(request: { toQuery(): SelectQuery }): this {
|
| 150 |
-
this.query.select(["platform"]);
|
| 151 |
-
this.query.relationQuery(
|
| 152 |
-
"platform", request.toQuery(), "platform", "id", false,
|
| 153 |
-
{ kind: "relation-select", method: "selectPlatformWith", relation: "platform" });
|
| 154 |
-
return this;
|
| 155 |
-
}
|
| 156 |
-
|
| 157 |
-
withPlatformMatching(request: { toQuery(): SelectQuery }): this {
|
| 158 |
-
this.filters.push({
|
| 159 |
-
"platform": {
|
| 160 |
-
"$inSubquery": { query: request.toQuery(), field: "id" },
|
| 161 |
-
},
|
| 162 |
-
});
|
| 163 |
-
return this;
|
| 164 |
-
}
|
| 165 |
-
|
| 166 |
-
withoutPlatformMatching(request: { toQuery(): SelectQuery }): this {
|
| 167 |
-
this.filters.push({
|
| 168 |
-
"platform": {
|
| 169 |
-
"$notInSubquery": { query: request.toQuery(), field: "id" },
|
| 170 |
-
},
|
| 171 |
-
});
|
| 172 |
-
return this;
|
| 173 |
-
}
|
| 174 |
-
|
| 175 |
-
selectCustomerOrderListWith(request: { toQuery(): SelectQuery }): this {
|
| 176 |
-
this.query.relationQuery(
|
| 177 |
-
"customerOrderList", request.toQuery(), "id", "status", true,
|
| 178 |
-
{ kind: "relation-select", method: "selectCustomerOrderListWith", relation: "customerOrderList" });
|
| 179 |
-
return this;
|
| 180 |
-
}
|
| 181 |
-
|
| 182 |
-
haveCustomerOrders(): this {
|
| 183 |
-
return this.withCustomerOrderListMatching({
|
| 184 |
-
toQuery: () => new SelectQuery("CustomerOrder"),
|
| 185 |
-
});
|
| 186 |
-
}
|
| 187 |
-
|
| 188 |
-
haveNoCustomerOrders(): this {
|
| 189 |
-
return this.withoutCustomerOrderListMatching({
|
| 190 |
-
toQuery: () => new SelectQuery("CustomerOrder"),
|
| 191 |
-
});
|
| 192 |
-
}
|
| 193 |
-
|
| 194 |
-
withCustomerOrderListMatching(request: { toQuery(): SelectQuery }): this {
|
| 195 |
-
this.filters.push({
|
| 196 |
-
"id": {
|
| 197 |
-
"$inSubquery": {
|
| 198 |
-
query: request.toQuery(), field: "status",
|
| 199 |
-
},
|
| 200 |
-
},
|
| 201 |
-
});
|
| 202 |
-
return this;
|
| 203 |
-
}
|
| 204 |
-
|
| 205 |
-
withoutCustomerOrderListMatching(request: { toQuery(): SelectQuery }): this {
|
| 206 |
-
this.filters.push({
|
| 207 |
-
"id": {
|
| 208 |
-
"$notInSubquery": {
|
| 209 |
-
query: request.toQuery(), field: "status",
|
| 210 |
-
},
|
| 211 |
-
},
|
| 212 |
-
});
|
| 213 |
-
return this;
|
| 214 |
-
}
|
| 215 |
-
|
| 216 |
-
countCustomerOrders(): this {
|
| 217 |
-
return this.countCustomerOrdersAs("countCustomerOrders");
|
| 218 |
-
}
|
| 219 |
-
|
| 220 |
-
countCustomerOrdersAs(alias: string): this {
|
| 221 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 222 |
-
this.countCustomerOrdersWith(alias, { toQuery: () => query });
|
| 223 |
-
this.query.relationAggregates[this.query.relationAggregates.length - 1].operation = {
|
| 224 |
-
kind: "relation-count", method: "countCustomerOrdersAs", relation: "customerOrderList", alias };
|
| 225 |
-
return this;
|
| 226 |
-
}
|
| 227 |
-
|
| 228 |
-
countCustomerOrdersWith(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 229 |
-
const query = child.toQuery().clone();
|
| 230 |
-
query.aggregateItems = [];
|
| 231 |
-
query.aggregate("Count", "id", alias);
|
| 232 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 233 |
-
{ kind: "relation-count", method: "countCustomerOrdersWith", relation: "customerOrderList", alias });
|
| 234 |
-
return this;
|
| 235 |
-
}
|
| 236 |
-
|
| 237 |
-
minTotalAmountOfCustomerOrders(): this {
|
| 238 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 239 |
-
return this.minTotalAmountOfCustomerOrdersAs(
|
| 240 |
-
"minOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 241 |
-
}
|
| 242 |
-
|
| 243 |
-
minTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 244 |
-
const query = child.toQuery().clone();
|
| 245 |
-
query.aggregateItems = [];
|
| 246 |
-
query.aggregate("min", "totalAmount", alias);
|
| 247 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 248 |
-
{ kind: "aggregate", method: "minTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 249 |
-
return this;
|
| 250 |
-
}
|
| 251 |
-
maxTotalAmountOfCustomerOrders(): this {
|
| 252 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 253 |
-
return this.maxTotalAmountOfCustomerOrdersAs(
|
| 254 |
-
"maxOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 255 |
-
}
|
| 256 |
-
|
| 257 |
-
maxTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 258 |
-
const query = child.toQuery().clone();
|
| 259 |
-
query.aggregateItems = [];
|
| 260 |
-
query.aggregate("max", "totalAmount", alias);
|
| 261 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 262 |
-
{ kind: "aggregate", method: "maxTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 263 |
-
return this;
|
| 264 |
-
}
|
| 265 |
-
sumTotalAmountOfCustomerOrders(): this {
|
| 266 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 267 |
-
return this.sumTotalAmountOfCustomerOrdersAs(
|
| 268 |
-
"sumOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 269 |
-
}
|
| 270 |
-
|
| 271 |
-
sumTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 272 |
-
const query = child.toQuery().clone();
|
| 273 |
-
query.aggregateItems = [];
|
| 274 |
-
query.aggregate("sum", "totalAmount", alias);
|
| 275 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 276 |
-
{ kind: "aggregate", method: "sumTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 277 |
-
return this;
|
| 278 |
-
}
|
| 279 |
-
avgTotalAmountOfCustomerOrders(): this {
|
| 280 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 281 |
-
return this.avgTotalAmountOfCustomerOrdersAs(
|
| 282 |
-
"avgOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 283 |
-
}
|
| 284 |
-
|
| 285 |
-
avgTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 286 |
-
const query = child.toQuery().clone();
|
| 287 |
-
query.aggregateItems = [];
|
| 288 |
-
query.aggregate("avg", "totalAmount", alias);
|
| 289 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 290 |
-
{ kind: "aggregate", method: "avgTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 291 |
-
return this;
|
| 292 |
-
}
|
| 293 |
-
standardDeviationTotalAmountOfCustomerOrders(): this {
|
| 294 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 295 |
-
return this.standardDeviationTotalAmountOfCustomerOrdersAs(
|
| 296 |
-
"standardDeviationOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 297 |
-
}
|
| 298 |
-
|
| 299 |
-
standardDeviationTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 300 |
-
const query = child.toQuery().clone();
|
| 301 |
-
query.aggregateItems = [];
|
| 302 |
-
query.aggregate("stddev", "totalAmount", alias);
|
| 303 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 304 |
-
{ kind: "aggregate", method: "standardDeviationTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 305 |
-
return this;
|
| 306 |
-
}
|
| 307 |
-
squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrders(): this {
|
| 308 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 309 |
-
return this.squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs(
|
| 310 |
-
"squareRootOfPopulationStandardDeviationOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 311 |
-
}
|
| 312 |
-
|
| 313 |
-
squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 314 |
-
const query = child.toQuery().clone();
|
| 315 |
-
query.aggregateItems = [];
|
| 316 |
-
query.aggregate("stddev_pop", "totalAmount", alias);
|
| 317 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 318 |
-
{ kind: "aggregate", method: "squareRootOfPopulationStandardDeviationTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 319 |
-
return this;
|
| 320 |
-
}
|
| 321 |
-
sampleVarianceTotalAmountOfCustomerOrders(): this {
|
| 322 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 323 |
-
return this.sampleVarianceTotalAmountOfCustomerOrdersAs(
|
| 324 |
-
"sampleVarianceOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 325 |
-
}
|
| 326 |
-
|
| 327 |
-
sampleVarianceTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 328 |
-
const query = child.toQuery().clone();
|
| 329 |
-
query.aggregateItems = [];
|
| 330 |
-
query.aggregate("var_samp", "totalAmount", alias);
|
| 331 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 332 |
-
{ kind: "aggregate", method: "sampleVarianceTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 333 |
-
return this;
|
| 334 |
-
}
|
| 335 |
-
samplePopulationVarianceTotalAmountOfCustomerOrders(): this {
|
| 336 |
-
const query = new SelectQuery("CustomerOrder").filter({ version: { "$gte": 1 } });
|
| 337 |
-
return this.samplePopulationVarianceTotalAmountOfCustomerOrdersAs(
|
| 338 |
-
"samplePopulationVarianceOfTotalAmountOfCustomerOrders", { toQuery: () => query });
|
| 339 |
-
}
|
| 340 |
-
|
| 341 |
-
samplePopulationVarianceTotalAmountOfCustomerOrdersAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 342 |
-
const query = child.toQuery().clone();
|
| 343 |
-
query.aggregateItems = [];
|
| 344 |
-
query.aggregate("var_pop", "totalAmount", alias);
|
| 345 |
-
this.query.relationAggregate("customerOrderList", alias, query, true,
|
| 346 |
-
{ kind: "aggregate", method: "samplePopulationVarianceTotalAmountOfCustomerOrdersAs", relation: "customerOrderList", alias });
|
| 347 |
-
return this;
|
| 348 |
-
}
|
| 349 |
-
|
| 350 |
-
filterByPlatform(val: any): this {
|
| 351 |
-
this.filters.push({ "platform": { "$eq": val } });
|
| 352 |
-
return this;
|
| 353 |
-
}
|
| 354 |
-
|
| 355 |
-
filterByPlatformIn(...vals: any[]): this {
|
| 356 |
-
this.filters.push({ "platform": { "$in": vals } });
|
| 357 |
-
return this;
|
| 358 |
-
}
|
| 359 |
-
|
| 360 |
-
withPlatformIsKnown(): this {
|
| 361 |
-
this.filters.push({ "platform": { "$isNull": false } });
|
| 362 |
-
return this;
|
| 363 |
-
}
|
| 364 |
-
|
| 365 |
-
withPlatformIsUnknown(): this {
|
| 366 |
-
this.filters.push({ "platform": { "$isNull": true } });
|
| 367 |
-
return this;
|
| 368 |
-
}
|
| 369 |
-
|
| 370 |
-
withIdIs(val: any): this {
|
| 371 |
-
this.filters.push({ "id": { "$eq": val } });
|
| 372 |
-
return this;
|
| 373 |
-
}
|
| 374 |
-
|
| 375 |
-
withIdIsNot(val: any): this {
|
| 376 |
-
this.filters.push({ "id": { "$ne": val } });
|
| 377 |
-
return this;
|
| 378 |
-
}
|
| 379 |
-
|
| 380 |
-
withIdIn(...vals: any[]): this {
|
| 381 |
-
this.filters.push({ "id": { "$in": vals } });
|
| 382 |
-
return this;
|
| 383 |
-
}
|
| 384 |
-
|
| 385 |
-
withIdNotIn(...vals: any[]): this {
|
| 386 |
-
this.filters.push({ "id": { "$notIn": vals } });
|
| 387 |
-
return this;
|
| 388 |
-
}
|
| 389 |
-
|
| 390 |
-
withIdGreaterThan(val: any): this {
|
| 391 |
-
this.filters.push({ "id": { "$gt": val } });
|
| 392 |
-
return this;
|
| 393 |
-
}
|
| 394 |
-
|
| 395 |
-
withIdGreaterThanOrEqualTo(val: any): this {
|
| 396 |
-
this.filters.push({ "id": { "$gte": val } });
|
| 397 |
-
return this;
|
| 398 |
-
}
|
| 399 |
-
|
| 400 |
-
withIdLessThan(val: any): this {
|
| 401 |
-
this.filters.push({ "id": { "$lt": val } });
|
| 402 |
-
return this;
|
| 403 |
-
}
|
| 404 |
-
|
| 405 |
-
withIdLessThanOrEqualTo(val: any): this {
|
| 406 |
-
this.filters.push({ "id": { "$lte": val } });
|
| 407 |
-
return this;
|
| 408 |
-
}
|
| 409 |
-
|
| 410 |
-
withIdBetween(lower: any, upper: any): this {
|
| 411 |
-
this.filters.push({ "id": { "$between": [lower, upper] } });
|
| 412 |
-
return this;
|
| 413 |
-
}
|
| 414 |
-
|
| 415 |
-
withIdIsKnown(): this {
|
| 416 |
-
this.filters.push({ "id": { "$isNull": false } });
|
| 417 |
-
return this;
|
| 418 |
-
}
|
| 419 |
-
|
| 420 |
-
withIdIsUnknown(): this {
|
| 421 |
-
this.filters.push({ "id": { "$isNull": true } });
|
| 422 |
-
return this;
|
| 423 |
-
}
|
| 424 |
-
|
| 425 |
-
withNameContaining(val: string): this {
|
| 426 |
-
this.filters.push({ "name": { "$contains": val } });
|
| 427 |
-
return this;
|
| 428 |
-
}
|
| 429 |
-
|
| 430 |
-
withNameIs(val: string): this {
|
| 431 |
-
this.filters.push({ "name": { "$eq": val } });
|
| 432 |
-
return this;
|
| 433 |
-
}
|
| 434 |
-
|
| 435 |
-
withNameIsNot(val: any): this {
|
| 436 |
-
this.filters.push({ "name": { "$ne": val } });
|
| 437 |
-
return this;
|
| 438 |
-
}
|
| 439 |
-
|
| 440 |
-
withNameIn(...vals: any[]): this {
|
| 441 |
-
this.filters.push({ "name": { "$in": vals } });
|
| 442 |
-
return this;
|
| 443 |
-
}
|
| 444 |
-
|
| 445 |
-
withNameNotIn(...vals: any[]): this {
|
| 446 |
-
this.filters.push({ "name": { "$notIn": vals } });
|
| 447 |
-
return this;
|
| 448 |
-
}
|
| 449 |
-
|
| 450 |
-
withNameGreaterThan(val: any): this {
|
| 451 |
-
this.filters.push({ "name": { "$gt": val } });
|
| 452 |
-
return this;
|
| 453 |
-
}
|
| 454 |
-
|
| 455 |
-
withNameGreaterThanOrEqualTo(val: any): this {
|
| 456 |
-
this.filters.push({ "name": { "$gte": val } });
|
| 457 |
-
return this;
|
| 458 |
-
}
|
| 459 |
-
|
| 460 |
-
withNameLessThan(val: any): this {
|
| 461 |
-
this.filters.push({ "name": { "$lt": val } });
|
| 462 |
-
return this;
|
| 463 |
-
}
|
| 464 |
-
|
| 465 |
-
withNameLessThanOrEqualTo(val: any): this {
|
| 466 |
-
this.filters.push({ "name": { "$lte": val } });
|
| 467 |
-
return this;
|
| 468 |
-
}
|
| 469 |
-
|
| 470 |
-
withNameBetween(lower: any, upper: any): this {
|
| 471 |
-
this.filters.push({ "name": { "$between": [lower, upper] } });
|
| 472 |
-
return this;
|
| 473 |
-
}
|
| 474 |
-
|
| 475 |
-
withNameIsKnown(): this {
|
| 476 |
-
this.filters.push({ "name": { "$isNull": false } });
|
| 477 |
-
return this;
|
| 478 |
-
}
|
| 479 |
-
|
| 480 |
-
withNameIsUnknown(): this {
|
| 481 |
-
this.filters.push({ "name": { "$isNull": true } });
|
| 482 |
-
return this;
|
| 483 |
-
}
|
| 484 |
-
withNameNotContaining(val: string): this {
|
| 485 |
-
this.filters.push({ "name": { "$notContains": val } });
|
| 486 |
-
return this;
|
| 487 |
-
}
|
| 488 |
-
|
| 489 |
-
withNameStartingWith(val: string): this {
|
| 490 |
-
this.filters.push({ "name": { "$startsWith": val } });
|
| 491 |
-
return this;
|
| 492 |
-
}
|
| 493 |
-
|
| 494 |
-
withNameNotStartingWith(val: string): this {
|
| 495 |
-
this.filters.push({ "name": { "$notStartsWith": val } });
|
| 496 |
-
return this;
|
| 497 |
-
}
|
| 498 |
-
|
| 499 |
-
withNameEndingWith(val: string): this {
|
| 500 |
-
this.filters.push({ "name": { "$endsWith": val } });
|
| 501 |
-
return this;
|
| 502 |
-
}
|
| 503 |
-
|
| 504 |
-
withNameNotEndingWith(val: string): this {
|
| 505 |
-
this.filters.push({ "name": { "$notEndsWith": val } });
|
| 506 |
-
return this;
|
| 507 |
-
}
|
| 508 |
-
|
| 509 |
-
withNameSoundingLike(val: string): this {
|
| 510 |
-
this.filters.push({ "name": { "$soundLike": val } });
|
| 511 |
-
return this;
|
| 512 |
-
}
|
| 513 |
-
|
| 514 |
-
withCodeContaining(val: string): this {
|
| 515 |
-
this.filters.push({ "code": { "$contains": val } });
|
| 516 |
-
return this;
|
| 517 |
-
}
|
| 518 |
-
|
| 519 |
-
withCodeIs(val: string): this {
|
| 520 |
-
this.filters.push({ "code": { "$eq": val } });
|
| 521 |
-
return this;
|
| 522 |
-
}
|
| 523 |
-
|
| 524 |
-
withCodeIsNot(val: any): this {
|
| 525 |
-
this.filters.push({ "code": { "$ne": val } });
|
| 526 |
-
return this;
|
| 527 |
-
}
|
| 528 |
-
|
| 529 |
-
withCodeIn(...vals: any[]): this {
|
| 530 |
-
this.filters.push({ "code": { "$in": vals } });
|
| 531 |
-
return this;
|
| 532 |
-
}
|
| 533 |
-
|
| 534 |
-
withCodeNotIn(...vals: any[]): this {
|
| 535 |
-
this.filters.push({ "code": { "$notIn": vals } });
|
| 536 |
-
return this;
|
| 537 |
-
}
|
| 538 |
-
|
| 539 |
-
withCodeGreaterThan(val: any): this {
|
| 540 |
-
this.filters.push({ "code": { "$gt": val } });
|
| 541 |
-
return this;
|
| 542 |
-
}
|
| 543 |
-
|
| 544 |
-
withCodeGreaterThanOrEqualTo(val: any): this {
|
| 545 |
-
this.filters.push({ "code": { "$gte": val } });
|
| 546 |
-
return this;
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
withCodeLessThan(val: any): this {
|
| 550 |
-
this.filters.push({ "code": { "$lt": val } });
|
| 551 |
-
return this;
|
| 552 |
-
}
|
| 553 |
-
|
| 554 |
-
withCodeLessThanOrEqualTo(val: any): this {
|
| 555 |
-
this.filters.push({ "code": { "$lte": val } });
|
| 556 |
-
return this;
|
| 557 |
-
}
|
| 558 |
-
|
| 559 |
-
withCodeBetween(lower: any, upper: any): this {
|
| 560 |
-
this.filters.push({ "code": { "$between": [lower, upper] } });
|
| 561 |
-
return this;
|
| 562 |
-
}
|
| 563 |
-
|
| 564 |
-
withCodeIsKnown(): this {
|
| 565 |
-
this.filters.push({ "code": { "$isNull": false } });
|
| 566 |
-
return this;
|
| 567 |
-
}
|
| 568 |
-
|
| 569 |
-
withCodeIsUnknown(): this {
|
| 570 |
-
this.filters.push({ "code": { "$isNull": true } });
|
| 571 |
-
return this;
|
| 572 |
-
}
|
| 573 |
-
withCodeNotContaining(val: string): this {
|
| 574 |
-
this.filters.push({ "code": { "$notContains": val } });
|
| 575 |
-
return this;
|
| 576 |
-
}
|
| 577 |
-
|
| 578 |
-
withCodeStartingWith(val: string): this {
|
| 579 |
-
this.filters.push({ "code": { "$startsWith": val } });
|
| 580 |
-
return this;
|
| 581 |
-
}
|
| 582 |
-
|
| 583 |
-
withCodeNotStartingWith(val: string): this {
|
| 584 |
-
this.filters.push({ "code": { "$notStartsWith": val } });
|
| 585 |
-
return this;
|
| 586 |
-
}
|
| 587 |
-
|
| 588 |
-
withCodeEndingWith(val: string): this {
|
| 589 |
-
this.filters.push({ "code": { "$endsWith": val } });
|
| 590 |
-
return this;
|
| 591 |
-
}
|
| 592 |
-
|
| 593 |
-
withCodeNotEndingWith(val: string): this {
|
| 594 |
-
this.filters.push({ "code": { "$notEndsWith": val } });
|
| 595 |
-
return this;
|
| 596 |
-
}
|
| 597 |
-
|
| 598 |
-
withCodeSoundingLike(val: string): this {
|
| 599 |
-
this.filters.push({ "code": { "$soundLike": val } });
|
| 600 |
-
return this;
|
| 601 |
-
}
|
| 602 |
-
|
| 603 |
-
withColorContaining(val: string): this {
|
| 604 |
-
this.filters.push({ "color": { "$contains": val } });
|
| 605 |
-
return this;
|
| 606 |
-
}
|
| 607 |
-
|
| 608 |
-
withColorIs(val: string): this {
|
| 609 |
-
this.filters.push({ "color": { "$eq": val } });
|
| 610 |
-
return this;
|
| 611 |
-
}
|
| 612 |
-
|
| 613 |
-
withColorIsNot(val: any): this {
|
| 614 |
-
this.filters.push({ "color": { "$ne": val } });
|
| 615 |
-
return this;
|
| 616 |
-
}
|
| 617 |
-
|
| 618 |
-
withColorIn(...vals: any[]): this {
|
| 619 |
-
this.filters.push({ "color": { "$in": vals } });
|
| 620 |
-
return this;
|
| 621 |
-
}
|
| 622 |
-
|
| 623 |
-
withColorNotIn(...vals: any[]): this {
|
| 624 |
-
this.filters.push({ "color": { "$notIn": vals } });
|
| 625 |
-
return this;
|
| 626 |
-
}
|
| 627 |
-
|
| 628 |
-
withColorGreaterThan(val: any): this {
|
| 629 |
-
this.filters.push({ "color": { "$gt": val } });
|
| 630 |
-
return this;
|
| 631 |
-
}
|
| 632 |
-
|
| 633 |
-
withColorGreaterThanOrEqualTo(val: any): this {
|
| 634 |
-
this.filters.push({ "color": { "$gte": val } });
|
| 635 |
-
return this;
|
| 636 |
-
}
|
| 637 |
-
|
| 638 |
-
withColorLessThan(val: any): this {
|
| 639 |
-
this.filters.push({ "color": { "$lt": val } });
|
| 640 |
-
return this;
|
| 641 |
-
}
|
| 642 |
-
|
| 643 |
-
withColorLessThanOrEqualTo(val: any): this {
|
| 644 |
-
this.filters.push({ "color": { "$lte": val } });
|
| 645 |
-
return this;
|
| 646 |
-
}
|
| 647 |
-
|
| 648 |
-
withColorBetween(lower: any, upper: any): this {
|
| 649 |
-
this.filters.push({ "color": { "$between": [lower, upper] } });
|
| 650 |
-
return this;
|
| 651 |
-
}
|
| 652 |
-
|
| 653 |
-
withColorIsKnown(): this {
|
| 654 |
-
this.filters.push({ "color": { "$isNull": false } });
|
| 655 |
-
return this;
|
| 656 |
-
}
|
| 657 |
-
|
| 658 |
-
withColorIsUnknown(): this {
|
| 659 |
-
this.filters.push({ "color": { "$isNull": true } });
|
| 660 |
-
return this;
|
| 661 |
-
}
|
| 662 |
-
withColorNotContaining(val: string): this {
|
| 663 |
-
this.filters.push({ "color": { "$notContains": val } });
|
| 664 |
-
return this;
|
| 665 |
-
}
|
| 666 |
-
|
| 667 |
-
withColorStartingWith(val: string): this {
|
| 668 |
-
this.filters.push({ "color": { "$startsWith": val } });
|
| 669 |
-
return this;
|
| 670 |
-
}
|
| 671 |
-
|
| 672 |
-
withColorNotStartingWith(val: string): this {
|
| 673 |
-
this.filters.push({ "color": { "$notStartsWith": val } });
|
| 674 |
-
return this;
|
| 675 |
-
}
|
| 676 |
-
|
| 677 |
-
withColorEndingWith(val: string): this {
|
| 678 |
-
this.filters.push({ "color": { "$endsWith": val } });
|
| 679 |
-
return this;
|
| 680 |
-
}
|
| 681 |
-
|
| 682 |
-
withColorNotEndingWith(val: string): this {
|
| 683 |
-
this.filters.push({ "color": { "$notEndsWith": val } });
|
| 684 |
-
return this;
|
| 685 |
-
}
|
| 686 |
-
|
| 687 |
-
withColorSoundingLike(val: string): this {
|
| 688 |
-
this.filters.push({ "color": { "$soundLike": val } });
|
| 689 |
-
return this;
|
| 690 |
-
}
|
| 691 |
-
|
| 692 |
-
withDisplayOrderIs(val: any): this {
|
| 693 |
-
this.filters.push({ "displayOrder": { "$eq": val } });
|
| 694 |
-
return this;
|
| 695 |
-
}
|
| 696 |
-
|
| 697 |
-
withDisplayOrderIsNot(val: any): this {
|
| 698 |
-
this.filters.push({ "displayOrder": { "$ne": val } });
|
| 699 |
-
return this;
|
| 700 |
-
}
|
| 701 |
-
|
| 702 |
-
withDisplayOrderIn(...vals: any[]): this {
|
| 703 |
-
this.filters.push({ "displayOrder": { "$in": vals } });
|
| 704 |
-
return this;
|
| 705 |
-
}
|
| 706 |
-
|
| 707 |
-
withDisplayOrderNotIn(...vals: any[]): this {
|
| 708 |
-
this.filters.push({ "displayOrder": { "$notIn": vals } });
|
| 709 |
-
return this;
|
| 710 |
-
}
|
| 711 |
-
|
| 712 |
-
withDisplayOrderGreaterThan(val: any): this {
|
| 713 |
-
this.filters.push({ "displayOrder": { "$gt": val } });
|
| 714 |
-
return this;
|
| 715 |
-
}
|
| 716 |
-
|
| 717 |
-
withDisplayOrderGreaterThanOrEqualTo(val: any): this {
|
| 718 |
-
this.filters.push({ "displayOrder": { "$gte": val } });
|
| 719 |
-
return this;
|
| 720 |
-
}
|
| 721 |
-
|
| 722 |
-
withDisplayOrderLessThan(val: any): this {
|
| 723 |
-
this.filters.push({ "displayOrder": { "$lt": val } });
|
| 724 |
-
return this;
|
| 725 |
-
}
|
| 726 |
-
|
| 727 |
-
withDisplayOrderLessThanOrEqualTo(val: any): this {
|
| 728 |
-
this.filters.push({ "displayOrder": { "$lte": val } });
|
| 729 |
-
return this;
|
| 730 |
-
}
|
| 731 |
-
|
| 732 |
-
withDisplayOrderBetween(lower: any, upper: any): this {
|
| 733 |
-
this.filters.push({ "displayOrder": { "$between": [lower, upper] } });
|
| 734 |
-
return this;
|
| 735 |
-
}
|
| 736 |
-
|
| 737 |
-
withDisplayOrderIsKnown(): this {
|
| 738 |
-
this.filters.push({ "displayOrder": { "$isNull": false } });
|
| 739 |
-
return this;
|
| 740 |
-
}
|
| 741 |
-
|
| 742 |
-
withDisplayOrderIsUnknown(): this {
|
| 743 |
-
this.filters.push({ "displayOrder": { "$isNull": true } });
|
| 744 |
-
return this;
|
| 745 |
-
}
|
| 746 |
-
|
| 747 |
-
withVersionIs(val: any): this {
|
| 748 |
-
this.filters.push({ "version": { "$eq": val } });
|
| 749 |
-
return this;
|
| 750 |
-
}
|
| 751 |
-
|
| 752 |
-
withVersionIsNot(val: any): this {
|
| 753 |
-
this.filters.push({ "version": { "$ne": val } });
|
| 754 |
-
return this;
|
| 755 |
-
}
|
| 756 |
-
|
| 757 |
-
withVersionIn(...vals: any[]): this {
|
| 758 |
-
this.filters.push({ "version": { "$in": vals } });
|
| 759 |
-
return this;
|
| 760 |
-
}
|
| 761 |
-
|
| 762 |
-
withVersionNotIn(...vals: any[]): this {
|
| 763 |
-
this.filters.push({ "version": { "$notIn": vals } });
|
| 764 |
-
return this;
|
| 765 |
-
}
|
| 766 |
-
|
| 767 |
-
withVersionGreaterThan(val: any): this {
|
| 768 |
-
this.filters.push({ "version": { "$gt": val } });
|
| 769 |
-
return this;
|
| 770 |
-
}
|
| 771 |
-
|
| 772 |
-
withVersionGreaterThanOrEqualTo(val: any): this {
|
| 773 |
-
this.filters.push({ "version": { "$gte": val } });
|
| 774 |
-
return this;
|
| 775 |
-
}
|
| 776 |
-
|
| 777 |
-
withVersionLessThan(val: any): this {
|
| 778 |
-
this.filters.push({ "version": { "$lt": val } });
|
| 779 |
-
return this;
|
| 780 |
-
}
|
| 781 |
-
|
| 782 |
-
withVersionLessThanOrEqualTo(val: any): this {
|
| 783 |
-
this.filters.push({ "version": { "$lte": val } });
|
| 784 |
-
return this;
|
| 785 |
-
}
|
| 786 |
-
|
| 787 |
-
withVersionBetween(lower: any, upper: any): this {
|
| 788 |
-
this.filters.push({ "version": { "$between": [lower, upper] } });
|
| 789 |
-
return this;
|
| 790 |
-
}
|
| 791 |
-
|
| 792 |
-
withVersionIsKnown(): this {
|
| 793 |
-
this.filters.push({ "version": { "$isNull": false } });
|
| 794 |
-
return this;
|
| 795 |
-
}
|
| 796 |
-
|
| 797 |
-
withVersionIsUnknown(): this {
|
| 798 |
-
this.filters.push({ "version": { "$isNull": true } });
|
| 799 |
-
return this;
|
| 800 |
-
}
|
| 801 |
-
|
| 802 |
-
orderByIdAscending(): this {
|
| 803 |
-
this.query.orderBy("id", "asc");
|
| 804 |
-
return this;
|
| 805 |
-
}
|
| 806 |
-
|
| 807 |
-
orderByIdDescending(): this {
|
| 808 |
-
this.query.orderBy("id", "desc");
|
| 809 |
-
return this;
|
| 810 |
-
}
|
| 811 |
-
|
| 812 |
-
orderByNameAscending(): this {
|
| 813 |
-
this.query.orderBy("name", "asc");
|
| 814 |
-
return this;
|
| 815 |
-
}
|
| 816 |
-
|
| 817 |
-
orderByNameDescending(): this {
|
| 818 |
-
this.query.orderBy("name", "desc");
|
| 819 |
-
return this;
|
| 820 |
-
}
|
| 821 |
-
|
| 822 |
-
orderByCodeAscending(): this {
|
| 823 |
-
this.query.orderBy("code", "asc");
|
| 824 |
-
return this;
|
| 825 |
-
}
|
| 826 |
-
|
| 827 |
-
orderByCodeDescending(): this {
|
| 828 |
-
this.query.orderBy("code", "desc");
|
| 829 |
-
return this;
|
| 830 |
-
}
|
| 831 |
-
|
| 832 |
-
orderByColorAscending(): this {
|
| 833 |
-
this.query.orderBy("color", "asc");
|
| 834 |
-
return this;
|
| 835 |
-
}
|
| 836 |
-
|
| 837 |
-
orderByColorDescending(): this {
|
| 838 |
-
this.query.orderBy("color", "desc");
|
| 839 |
-
return this;
|
| 840 |
-
}
|
| 841 |
-
|
| 842 |
-
orderByDisplayOrderAscending(): this {
|
| 843 |
-
this.query.orderBy("displayOrder", "asc");
|
| 844 |
-
return this;
|
| 845 |
-
}
|
| 846 |
-
|
| 847 |
-
orderByDisplayOrderDescending(): this {
|
| 848 |
-
this.query.orderBy("displayOrder", "desc");
|
| 849 |
-
return this;
|
| 850 |
-
}
|
| 851 |
-
|
| 852 |
-
orderByVersionAscending(): this {
|
| 853 |
-
this.query.orderBy("version", "asc");
|
| 854 |
-
return this;
|
| 855 |
-
}
|
| 856 |
-
|
| 857 |
-
orderByVersionDescending(): this {
|
| 858 |
-
this.query.orderBy("version", "desc");
|
| 859 |
-
return this;
|
| 860 |
-
}
|
| 861 |
-
|
| 862 |
-
|
| 863 |
-
// --- Aggregations ---
|
| 864 |
-
count(): this {
|
| 865 |
-
this.query.aggregate("Count", "id", "count");
|
| 866 |
-
this._pageCountAlias = "count";
|
| 867 |
-
this._pageCountMethod = "count";
|
| 868 |
-
return this;
|
| 869 |
-
}
|
| 870 |
-
|
| 871 |
-
countAs(retName: string): this {
|
| 872 |
-
this.query.aggregate("Count", "id", retName);
|
| 873 |
-
this._pageCountAlias = retName;
|
| 874 |
-
this._pageCountMethod = "countAs";
|
| 875 |
-
return this;
|
| 876 |
-
}
|
| 877 |
-
|
| 878 |
-
minDisplayOrder(): this {
|
| 879 |
-
return this.minDisplayOrderAs("minOfDisplayOrder");
|
| 880 |
-
}
|
| 881 |
-
|
| 882 |
-
minDisplayOrderAs(retName: string): this {
|
| 883 |
-
this.query.aggregate("min", "displayOrder", retName);
|
| 884 |
-
return this;
|
| 885 |
-
}
|
| 886 |
-
maxDisplayOrder(): this {
|
| 887 |
-
return this.maxDisplayOrderAs("maxOfDisplayOrder");
|
| 888 |
-
}
|
| 889 |
-
|
| 890 |
-
maxDisplayOrderAs(retName: string): this {
|
| 891 |
-
this.query.aggregate("max", "displayOrder", retName);
|
| 892 |
-
return this;
|
| 893 |
-
}
|
| 894 |
-
sumDisplayOrder(): this {
|
| 895 |
-
return this.sumDisplayOrderAs("sumOfDisplayOrder");
|
| 896 |
-
}
|
| 897 |
-
|
| 898 |
-
sumDisplayOrderAs(retName: string): this {
|
| 899 |
-
this.query.aggregate("sum", "displayOrder", retName);
|
| 900 |
-
return this;
|
| 901 |
-
}
|
| 902 |
-
avgDisplayOrder(): this {
|
| 903 |
-
return this.avgDisplayOrderAs("avgOfDisplayOrder");
|
| 904 |
-
}
|
| 905 |
-
|
| 906 |
-
avgDisplayOrderAs(retName: string): this {
|
| 907 |
-
this.query.aggregate("avg", "displayOrder", retName);
|
| 908 |
-
return this;
|
| 909 |
-
}
|
| 910 |
-
standardDeviationDisplayOrder(): this {
|
| 911 |
-
return this.standardDeviationDisplayOrderAs("standardDeviationOfDisplayOrder");
|
| 912 |
-
}
|
| 913 |
-
|
| 914 |
-
standardDeviationDisplayOrderAs(retName: string): this {
|
| 915 |
-
this.query.aggregate("stddev", "displayOrder", retName);
|
| 916 |
-
return this;
|
| 917 |
-
}
|
| 918 |
-
squareRootOfPopulationStandardDeviationDisplayOrder(): this {
|
| 919 |
-
return this.squareRootOfPopulationStandardDeviationDisplayOrderAs("squareRootOfPopulationStandardDeviationOfDisplayOrder");
|
| 920 |
-
}
|
| 921 |
-
|
| 922 |
-
squareRootOfPopulationStandardDeviationDisplayOrderAs(retName: string): this {
|
| 923 |
-
this.query.aggregate("stddev_pop", "displayOrder", retName);
|
| 924 |
-
return this;
|
| 925 |
-
}
|
| 926 |
-
sampleVarianceDisplayOrder(): this {
|
| 927 |
-
return this.sampleVarianceDisplayOrderAs("sampleVarianceOfDisplayOrder");
|
| 928 |
-
}
|
| 929 |
-
|
| 930 |
-
sampleVarianceDisplayOrderAs(retName: string): this {
|
| 931 |
-
this.query.aggregate("var_samp", "displayOrder", retName);
|
| 932 |
-
return this;
|
| 933 |
-
}
|
| 934 |
-
samplePopulationVarianceDisplayOrder(): this {
|
| 935 |
-
return this.samplePopulationVarianceDisplayOrderAs("samplePopulationVarianceOfDisplayOrder");
|
| 936 |
-
}
|
| 937 |
-
|
| 938 |
-
samplePopulationVarianceDisplayOrderAs(retName: string): this {
|
| 939 |
-
this.query.aggregate("var_pop", "displayOrder", retName);
|
| 940 |
-
return this;
|
| 941 |
-
}
|
| 942 |
-
|
| 943 |
-
// --- Group By ---
|
| 944 |
-
groupByPlatform(): this {
|
| 945 |
-
this.query.groupBy("platform");
|
| 946 |
-
return this;
|
| 947 |
-
}
|
| 948 |
-
|
| 949 |
-
groupByPlatformAs(retName: string): this {
|
| 950 |
-
this.query.groupBy("platform"); // In TS we don't alias group by yet natively
|
| 951 |
-
return this;
|
| 952 |
-
}
|
| 953 |
-
groupById(): this {
|
| 954 |
-
this.query.groupBy("id");
|
| 955 |
-
return this;
|
| 956 |
-
}
|
| 957 |
-
|
| 958 |
-
groupByIdAs(retName: string): this {
|
| 959 |
-
this.query.groupBy("id"); // In TS we don't alias group by yet natively
|
| 960 |
-
return this;
|
| 961 |
-
}
|
| 962 |
-
groupByName(): this {
|
| 963 |
-
this.query.groupBy("name");
|
| 964 |
-
return this;
|
| 965 |
-
}
|
| 966 |
-
|
| 967 |
-
groupByNameAs(retName: string): this {
|
| 968 |
-
this.query.groupBy("name"); // In TS we don't alias group by yet natively
|
| 969 |
-
return this;
|
| 970 |
-
}
|
| 971 |
-
groupByCode(): this {
|
| 972 |
-
this.query.groupBy("code");
|
| 973 |
-
return this;
|
| 974 |
-
}
|
| 975 |
-
|
| 976 |
-
groupByCodeAs(retName: string): this {
|
| 977 |
-
this.query.groupBy("code"); // In TS we don't alias group by yet natively
|
| 978 |
-
return this;
|
| 979 |
-
}
|
| 980 |
-
groupByColor(): this {
|
| 981 |
-
this.query.groupBy("color");
|
| 982 |
-
return this;
|
| 983 |
-
}
|
| 984 |
-
|
| 985 |
-
groupByColorAs(retName: string): this {
|
| 986 |
-
this.query.groupBy("color"); // In TS we don't alias group by yet natively
|
| 987 |
-
return this;
|
| 988 |
-
}
|
| 989 |
-
groupByDisplayOrder(): this {
|
| 990 |
-
this.query.groupBy("displayOrder");
|
| 991 |
-
return this;
|
| 992 |
-
}
|
| 993 |
-
|
| 994 |
-
groupByDisplayOrderAs(retName: string): this {
|
| 995 |
-
this.query.groupBy("displayOrder"); // In TS we don't alias group by yet natively
|
| 996 |
-
return this;
|
| 997 |
-
}
|
| 998 |
-
groupByVersion(): this {
|
| 999 |
-
this.query.groupBy("version");
|
| 1000 |
-
return this;
|
| 1001 |
-
}
|
| 1002 |
-
|
| 1003 |
-
groupByVersionAs(retName: string): this {
|
| 1004 |
-
this.query.groupBy("version"); // In TS we don't alias group by yet natively
|
| 1005 |
-
return this;
|
| 1006 |
-
}
|
| 1007 |
-
|
| 1008 |
-
// --- Facets ---
|
| 1009 |
-
facetByPlatformAs(
|
| 1010 |
-
facetName: string,
|
| 1011 |
-
request: { toQuery(): SelectQuery },
|
| 1012 |
-
includeAllFacets = true,
|
| 1013 |
-
): this {
|
| 1014 |
-
this.query.facetBy(facetName, "platform", request, includeAllFacets,
|
| 1015 |
-
{ kind: "facet", method: "facetByPlatformAs", relation: "platform", alias: facetName });
|
| 1016 |
-
return this;
|
| 1017 |
-
}
|
| 1018 |
-
|
| 1019 |
-
|
| 1020 |
-
private async executeForListInternal(context: UserContext): Promise<SmartList<OrderStatus>> {
|
| 1021 |
-
this.ensureIntent();
|
| 1022 |
-
if (this.filters.length > 0) {
|
| 1023 |
-
this.query.filter({ "$and": this.filters });
|
| 1024 |
-
}
|
| 1025 |
-
|
| 1026 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1027 |
-
const rows = await service.executeQuery(context.prepareQuery(this.query));
|
| 1028 |
-
const queryRoot = new EntityRoot();
|
| 1029 |
-
const aggregateOnly = this.query.aggregateItems.length > 0 && this.query.groupByItems.length === 0;
|
| 1030 |
-
const data = aggregateOnly ? [] : rows.map((row: unknown) =>
|
| 1031 |
-
row instanceof OrderStatus
|
| 1032 |
-
? row
|
| 1033 |
-
: OrderStatus.fromRecord(row as Record<string, unknown>, queryRoot));
|
| 1034 |
-
const result = new SmartList<OrderStatus>(data);
|
| 1035 |
-
if (aggregateOnly && rows[0]) Object.assign(result.aggregations, rows[0]);
|
| 1036 |
-
|
| 1037 |
-
if (this.query.facets.length > 0) {
|
| 1038 |
-
result.facets = await executeRelationFacets(
|
| 1039 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 1040 |
-
}
|
| 1041 |
-
|
| 1042 |
-
return result;
|
| 1043 |
-
}
|
| 1044 |
-
|
| 1045 |
-
private async executeForRowsInternal(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 1046 |
-
this.ensureIntent();
|
| 1047 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1048 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1049 |
-
return new SmartList<Record<string, unknown>>(
|
| 1050 |
-
await service.executeQuery(context.prepareQuery(this.query)) as Record<string, unknown>[]);
|
| 1051 |
-
}
|
| 1052 |
-
|
| 1053 |
-
private async executeForPageInternal(
|
| 1054 |
-
context: UserContext, offset: number, limit: number,
|
| 1055 |
-
): Promise<TeaQLPage<OrderStatus>> {
|
| 1056 |
-
this.ensureIntent();
|
| 1057 |
-
this.query.offset(offset).limit(limit);
|
| 1058 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1059 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1060 |
-
const useIdSet = this.query.localIdSetPaginationOptions() !== undefined;
|
| 1061 |
-
const countOperation = { kind: "named-count" as const,
|
| 1062 |
-
method: this._pageCountMethod ?? "count",
|
| 1063 |
-
...(this._pageCountMethod === "countAs" ? { alias: this._pageCountAlias } : {}) };
|
| 1064 |
-
const totalCountBeforeRows = useIdSet ? undefined : await service.executeCount(
|
| 1065 |
-
this.query, this._pageCountAlias, countOperation);
|
| 1066 |
-
const pageQuery = this.query.clone();
|
| 1067 |
-
// A page count describes the full filtered set, not an aggregate-only page row.
|
| 1068 |
-
pageQuery.aggregateItems = pageQuery.aggregateItems.filter(item =>
|
| 1069 |
-
!(String(item.function).toLowerCase() === "count" && item.alias === this._pageCountAlias));
|
| 1070 |
-
const rows = await service.executeQuery(context.prepareQuery(pageQuery));
|
| 1071 |
-
const totalCount = useIdSet && context.idSetPaginationCountAccuracy === "EXACT"
|
| 1072 |
-
? context.idSetPaginationCount!
|
| 1073 |
-
: (totalCountBeforeRows ?? await service.executeCount(this.query, this._pageCountAlias, countOperation));
|
| 1074 |
-
const queryRoot = new EntityRoot();
|
| 1075 |
-
const data = new SmartList(rows.map((row: unknown) =>
|
| 1076 |
-
row instanceof OrderStatus
|
| 1077 |
-
? row
|
| 1078 |
-
: OrderStatus.fromRecord(row as Record<string, unknown>, queryRoot)));
|
| 1079 |
-
data.totalCount = totalCount;
|
| 1080 |
-
if (this._pageCountAlias !== undefined) data.aggregations[this._pageCountAlias] = totalCount;
|
| 1081 |
-
if (this.query.facets.length > 0) {
|
| 1082 |
-
data.facets = await executeRelationFacets(
|
| 1083 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 1084 |
-
}
|
| 1085 |
-
return { data, totalCount, offset, limit };
|
| 1086 |
-
}
|
| 1087 |
-
|
| 1088 |
-
private async *executeForStreamInternal(context: UserContext, chunkSize: number): AsyncIterable<OrderStatus> {
|
| 1089 |
-
this.ensureIntent();
|
| 1090 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 1091 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 1092 |
-
const queryRoot = new EntityRoot();
|
| 1093 |
-
for await (const chunk of service.executeForStream(this.query, chunkSize)) {
|
| 1094 |
-
for (const entity of chunk) {
|
| 1095 |
-
yield entity instanceof OrderStatus
|
| 1096 |
-
? entity
|
| 1097 |
-
: OrderStatus.fromRecord(entity as Record<string, unknown>, queryRoot);
|
| 1098 |
-
}
|
| 1099 |
-
}
|
| 1100 |
-
}
|
| 1101 |
-
|
| 1102 |
-
private ensureIntent(): void {
|
| 1103 |
-
if (!this._comment?.trim()) {
|
| 1104 |
-
throw new Error("Security audit failure: non-empty comment() is required before execution");
|
| 1105 |
-
}
|
| 1106 |
-
if (!this._purpose?.trim()) {
|
| 1107 |
-
throw new Error("Security audit failure: non-empty purpose() is required before execution");
|
| 1108 |
-
}
|
| 1109 |
-
}
|
| 1110 |
-
|
| 1111 |
-
}
|
| 1112 |
-
|
| 1113 |
-
export class ExecutableOrderStatusRequest {
|
| 1114 |
-
constructor(
|
| 1115 |
-
private readonly execute: (context: UserContext) => Promise<SmartList<OrderStatus>>,
|
| 1116 |
-
private readonly executeRows: (context: UserContext) => Promise<SmartList<Record<string, unknown>>>,
|
| 1117 |
-
private readonly page: (
|
| 1118 |
-
context: UserContext, offset: number, limit: number,
|
| 1119 |
-
) => Promise<TeaQLPage<OrderStatus>>,
|
| 1120 |
-
private readonly stream: (context: UserContext, chunkSize: number) => AsyncIterable<OrderStatus>,
|
| 1121 |
-
private readonly limitOne: () => void,
|
| 1122 |
-
private readonly addComment: (comment: string) => void,
|
| 1123 |
-
private readonly ensureIntent: () => void,
|
| 1124 |
-
) {}
|
| 1125 |
-
|
| 1126 |
-
comment(c: string): this {
|
| 1127 |
-
this.addComment(c);
|
| 1128 |
-
return this;
|
| 1129 |
-
}
|
| 1130 |
-
|
| 1131 |
-
newEntity(context: UserContext): OrderStatus {
|
| 1132 |
-
this.ensureIntent();
|
| 1133 |
-
return new OrderStatus();
|
| 1134 |
-
}
|
| 1135 |
-
|
| 1136 |
-
executeForList(context: UserContext): Promise<SmartList<OrderStatus>> {
|
| 1137 |
-
this.ensureIntent();
|
| 1138 |
-
return this.execute(context);
|
| 1139 |
-
}
|
| 1140 |
-
|
| 1141 |
-
executeForRows(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 1142 |
-
this.ensureIntent();
|
| 1143 |
-
return this.executeRows(context);
|
| 1144 |
-
}
|
| 1145 |
-
|
| 1146 |
-
executeForPage(
|
| 1147 |
-
context: UserContext, offset: number, limit: number,
|
| 1148 |
-
): Promise<TeaQLPage<OrderStatus>> {
|
| 1149 |
-
this.ensureIntent();
|
| 1150 |
-
return this.page(context, offset, limit);
|
| 1151 |
-
}
|
| 1152 |
-
|
| 1153 |
-
executeForStream(context: UserContext, chunkSize = 1000): AsyncIterable<OrderStatus> {
|
| 1154 |
-
this.ensureIntent();
|
| 1155 |
-
return this.stream(context, chunkSize);
|
| 1156 |
-
}
|
| 1157 |
-
|
| 1158 |
-
async executeForOne(context: UserContext): Promise<OrderStatus | undefined> {
|
| 1159 |
-
this.limitOne();
|
| 1160 |
-
return (await this.executeForList(context))[0];
|
| 1161 |
-
}
|
| 1162 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/generated/requests/PlatformRequest.ts
DELETED
|
@@ -1,791 +0,0 @@
|
|
| 1 |
-
import { EntityRoot, SelectQuery, SmartList, TeaQLDataService, TeaQLPage, UserContext, executeRelationFacets } from '../../teaql-ts';
|
| 2 |
-
import { Platform } from '../models/Platform';
|
| 3 |
-
import { mergeGeneratedScalarSearch, DynamicSearchWarning } from 'teaql-ts';
|
| 4 |
-
import { GENERATED_SEARCH_MODELS } from '../../generated-search-models';
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
export class PlatformRequest {
|
| 9 |
-
private query: SelectQuery;
|
| 10 |
-
private filters: any[] = [];
|
| 11 |
-
private _purpose: string | undefined;
|
| 12 |
-
private _comment: string | undefined;
|
| 13 |
-
private _pageCountAlias: string | undefined;
|
| 14 |
-
private _pageCountMethod: "count" | "countAs" | undefined;
|
| 15 |
-
private _dynamicSearchWarnings: DynamicSearchWarning[] = [];
|
| 16 |
-
|
| 17 |
-
constructor(minimal = false) {
|
| 18 |
-
this.query = new SelectQuery("Platform");
|
| 19 |
-
this.filters.push({ version: { "$gte": 1 } });
|
| 20 |
-
if (minimal) {
|
| 21 |
-
this.selectId();
|
| 22 |
-
this.selectVersion();
|
| 23 |
-
}
|
| 24 |
-
else this.selectSelfFields();
|
| 25 |
-
}
|
| 26 |
-
|
| 27 |
-
comment(c: string): this {
|
| 28 |
-
this.query.comment(c);
|
| 29 |
-
this._comment = c;
|
| 30 |
-
return this;
|
| 31 |
-
}
|
| 32 |
-
|
| 33 |
-
filterByJson(source: unknown, warn?: (warning: DynamicSearchWarning) => void): this {
|
| 34 |
-
const base = this.query.clone();
|
| 35 |
-
if (this.filters.length > 0) base.filter({ "$and": this.filters });
|
| 36 |
-
const merged = mergeGeneratedScalarSearch(base, source, GENERATED_SEARCH_MODELS, warn);
|
| 37 |
-
this.query = merged.query as SelectQuery;
|
| 38 |
-
this.filters = this.query.filterCondition ? [this.query.filterCondition] : [];
|
| 39 |
-
this._dynamicSearchWarnings.push(...merged.warnings);
|
| 40 |
-
return this;
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
get dynamicSearchWarnings(): readonly DynamicSearchWarning[] {
|
| 44 |
-
return this._dynamicSearchWarnings.map(warning => ({ ...warning }));
|
| 45 |
-
}
|
| 46 |
-
|
| 47 |
-
purpose(p: string): ExecutablePlatformRequest {
|
| 48 |
-
this.query.purpose(p);
|
| 49 |
-
this._purpose = p;
|
| 50 |
-
return new ExecutablePlatformRequest(
|
| 51 |
-
(context) => this.executeForListInternal(context),
|
| 52 |
-
(context) => this.executeForRowsInternal(context),
|
| 53 |
-
(context, offset, limit) => this.executeForPageInternal(context, offset, limit),
|
| 54 |
-
(context, chunkSize) => this.executeForStreamInternal(context, chunkSize),
|
| 55 |
-
() => this.limit(1),
|
| 56 |
-
(c) => this.comment(c),
|
| 57 |
-
() => this.ensureIntent());
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
optimizeForContinuousPageFetch(): this {
|
| 61 |
-
this.query.optimizeForContinuousPageFetch();
|
| 62 |
-
return this;
|
| 63 |
-
}
|
| 64 |
-
|
| 65 |
-
optimizeForContinuousPageFetchWith(namespace: string, ttlSeconds: number): this {
|
| 66 |
-
this.query.optimizeForContinuousPageFetchWith(namespace, ttlSeconds);
|
| 67 |
-
return this;
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
optimizePaginationWithIdSet(): this {
|
| 71 |
-
this.query.optimizePaginationWithIdSet();
|
| 72 |
-
return this;
|
| 73 |
-
}
|
| 74 |
-
|
| 75 |
-
optimizePaginationWithIdSetConfig(namespace: string, ttlSeconds: number, maxIds: number): this {
|
| 76 |
-
this.query.optimizePaginationWithIdSetConfig(namespace, ttlSeconds, maxIds);
|
| 77 |
-
return this;
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
topNProbeParentThreshold(threshold: number): this {
|
| 81 |
-
this.query.topNProbeParentThreshold(threshold);
|
| 82 |
-
return this;
|
| 83 |
-
}
|
| 84 |
-
|
| 85 |
-
limit(n: number): this {
|
| 86 |
-
this.query.limit(n);
|
| 87 |
-
return this;
|
| 88 |
-
}
|
| 89 |
-
|
| 90 |
-
offset(n: number): this {
|
| 91 |
-
this.query.offset(n);
|
| 92 |
-
return this;
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
toQuery(): SelectQuery {
|
| 96 |
-
if (this.filters.length > 0) {
|
| 97 |
-
this.query.filter({ "$and": this.filters });
|
| 98 |
-
}
|
| 99 |
-
return this.query;
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
withDeletedRows(): this {
|
| 103 |
-
this.filters = this.filters.filter(filter => !("version" in filter));
|
| 104 |
-
return this;
|
| 105 |
-
}
|
| 106 |
-
|
| 107 |
-
deletedRowsOnly(): this {
|
| 108 |
-
this.withDeletedRows();
|
| 109 |
-
this.filters.push({ version: { "$lte": -1 } });
|
| 110 |
-
return this;
|
| 111 |
-
}
|
| 112 |
-
|
| 113 |
-
selectSelfFields(): this {
|
| 114 |
-
this.query.select(["id", "name", "version"]);
|
| 115 |
-
return this;
|
| 116 |
-
}
|
| 117 |
-
|
| 118 |
-
selectId(): this {
|
| 119 |
-
this.query.select(["id"]);
|
| 120 |
-
return this;
|
| 121 |
-
}
|
| 122 |
-
|
| 123 |
-
selectName(): this {
|
| 124 |
-
this.query.select(["name"]);
|
| 125 |
-
return this;
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
selectVersion(): this {
|
| 129 |
-
this.query.select(["version"]);
|
| 130 |
-
return this;
|
| 131 |
-
}
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
selectOrderStatusListWith(request: { toQuery(): SelectQuery }): this {
|
| 137 |
-
this.query.relationQuery(
|
| 138 |
-
"orderStatusList", request.toQuery(), "id", "platform", true,
|
| 139 |
-
{ kind: "relation-select", method: "selectOrderStatusListWith", relation: "orderStatusList" });
|
| 140 |
-
return this;
|
| 141 |
-
}
|
| 142 |
-
selectCustomerListWith(request: { toQuery(): SelectQuery }): this {
|
| 143 |
-
this.query.relationQuery(
|
| 144 |
-
"customerList", request.toQuery(), "id", "platform", true,
|
| 145 |
-
{ kind: "relation-select", method: "selectCustomerListWith", relation: "customerList" });
|
| 146 |
-
return this;
|
| 147 |
-
}
|
| 148 |
-
|
| 149 |
-
haveOrderStatuses(): this {
|
| 150 |
-
return this.withOrderStatusListMatching({
|
| 151 |
-
toQuery: () => new SelectQuery("OrderStatus"),
|
| 152 |
-
});
|
| 153 |
-
}
|
| 154 |
-
|
| 155 |
-
haveNoOrderStatuses(): this {
|
| 156 |
-
return this.withoutOrderStatusListMatching({
|
| 157 |
-
toQuery: () => new SelectQuery("OrderStatus"),
|
| 158 |
-
});
|
| 159 |
-
}
|
| 160 |
-
|
| 161 |
-
withOrderStatusListMatching(request: { toQuery(): SelectQuery }): this {
|
| 162 |
-
this.filters.push({
|
| 163 |
-
"id": {
|
| 164 |
-
"$inSubquery": {
|
| 165 |
-
query: request.toQuery(), field: "platform",
|
| 166 |
-
},
|
| 167 |
-
},
|
| 168 |
-
});
|
| 169 |
-
return this;
|
| 170 |
-
}
|
| 171 |
-
|
| 172 |
-
withoutOrderStatusListMatching(request: { toQuery(): SelectQuery }): this {
|
| 173 |
-
this.filters.push({
|
| 174 |
-
"id": {
|
| 175 |
-
"$notInSubquery": {
|
| 176 |
-
query: request.toQuery(), field: "platform",
|
| 177 |
-
},
|
| 178 |
-
},
|
| 179 |
-
});
|
| 180 |
-
return this;
|
| 181 |
-
}
|
| 182 |
-
haveCustomers(): this {
|
| 183 |
-
return this.withCustomerListMatching({
|
| 184 |
-
toQuery: () => new SelectQuery("Customer"),
|
| 185 |
-
});
|
| 186 |
-
}
|
| 187 |
-
|
| 188 |
-
haveNoCustomers(): this {
|
| 189 |
-
return this.withoutCustomerListMatching({
|
| 190 |
-
toQuery: () => new SelectQuery("Customer"),
|
| 191 |
-
});
|
| 192 |
-
}
|
| 193 |
-
|
| 194 |
-
withCustomerListMatching(request: { toQuery(): SelectQuery }): this {
|
| 195 |
-
this.filters.push({
|
| 196 |
-
"id": {
|
| 197 |
-
"$inSubquery": {
|
| 198 |
-
query: request.toQuery(), field: "platform",
|
| 199 |
-
},
|
| 200 |
-
},
|
| 201 |
-
});
|
| 202 |
-
return this;
|
| 203 |
-
}
|
| 204 |
-
|
| 205 |
-
withoutCustomerListMatching(request: { toQuery(): SelectQuery }): this {
|
| 206 |
-
this.filters.push({
|
| 207 |
-
"id": {
|
| 208 |
-
"$notInSubquery": {
|
| 209 |
-
query: request.toQuery(), field: "platform",
|
| 210 |
-
},
|
| 211 |
-
},
|
| 212 |
-
});
|
| 213 |
-
return this;
|
| 214 |
-
}
|
| 215 |
-
|
| 216 |
-
countOrderStatuses(): this {
|
| 217 |
-
return this.countOrderStatusesAs("countOrderStatuses");
|
| 218 |
-
}
|
| 219 |
-
|
| 220 |
-
countOrderStatusesAs(alias: string): this {
|
| 221 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 222 |
-
this.countOrderStatusesWith(alias, { toQuery: () => query });
|
| 223 |
-
this.query.relationAggregates[this.query.relationAggregates.length - 1].operation = {
|
| 224 |
-
kind: "relation-count", method: "countOrderStatusesAs", relation: "orderStatusList", alias };
|
| 225 |
-
return this;
|
| 226 |
-
}
|
| 227 |
-
|
| 228 |
-
countOrderStatusesWith(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 229 |
-
const query = child.toQuery().clone();
|
| 230 |
-
query.aggregateItems = [];
|
| 231 |
-
query.aggregate("Count", "id", alias);
|
| 232 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 233 |
-
{ kind: "relation-count", method: "countOrderStatusesWith", relation: "orderStatusList", alias });
|
| 234 |
-
return this;
|
| 235 |
-
}
|
| 236 |
-
|
| 237 |
-
minDisplayOrderOfOrderStatuses(): this {
|
| 238 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 239 |
-
return this.minDisplayOrderOfOrderStatusesAs(
|
| 240 |
-
"minOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 241 |
-
}
|
| 242 |
-
|
| 243 |
-
minDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 244 |
-
const query = child.toQuery().clone();
|
| 245 |
-
query.aggregateItems = [];
|
| 246 |
-
query.aggregate("min", "displayOrder", alias);
|
| 247 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 248 |
-
{ kind: "aggregate", method: "minDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 249 |
-
return this;
|
| 250 |
-
}
|
| 251 |
-
maxDisplayOrderOfOrderStatuses(): this {
|
| 252 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 253 |
-
return this.maxDisplayOrderOfOrderStatusesAs(
|
| 254 |
-
"maxOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 255 |
-
}
|
| 256 |
-
|
| 257 |
-
maxDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 258 |
-
const query = child.toQuery().clone();
|
| 259 |
-
query.aggregateItems = [];
|
| 260 |
-
query.aggregate("max", "displayOrder", alias);
|
| 261 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 262 |
-
{ kind: "aggregate", method: "maxDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 263 |
-
return this;
|
| 264 |
-
}
|
| 265 |
-
sumDisplayOrderOfOrderStatuses(): this {
|
| 266 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 267 |
-
return this.sumDisplayOrderOfOrderStatusesAs(
|
| 268 |
-
"sumOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 269 |
-
}
|
| 270 |
-
|
| 271 |
-
sumDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 272 |
-
const query = child.toQuery().clone();
|
| 273 |
-
query.aggregateItems = [];
|
| 274 |
-
query.aggregate("sum", "displayOrder", alias);
|
| 275 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 276 |
-
{ kind: "aggregate", method: "sumDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 277 |
-
return this;
|
| 278 |
-
}
|
| 279 |
-
avgDisplayOrderOfOrderStatuses(): this {
|
| 280 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 281 |
-
return this.avgDisplayOrderOfOrderStatusesAs(
|
| 282 |
-
"avgOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 283 |
-
}
|
| 284 |
-
|
| 285 |
-
avgDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 286 |
-
const query = child.toQuery().clone();
|
| 287 |
-
query.aggregateItems = [];
|
| 288 |
-
query.aggregate("avg", "displayOrder", alias);
|
| 289 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 290 |
-
{ kind: "aggregate", method: "avgDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 291 |
-
return this;
|
| 292 |
-
}
|
| 293 |
-
standardDeviationDisplayOrderOfOrderStatuses(): this {
|
| 294 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 295 |
-
return this.standardDeviationDisplayOrderOfOrderStatusesAs(
|
| 296 |
-
"standardDeviationOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 297 |
-
}
|
| 298 |
-
|
| 299 |
-
standardDeviationDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 300 |
-
const query = child.toQuery().clone();
|
| 301 |
-
query.aggregateItems = [];
|
| 302 |
-
query.aggregate("stddev", "displayOrder", alias);
|
| 303 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 304 |
-
{ kind: "aggregate", method: "standardDeviationDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 305 |
-
return this;
|
| 306 |
-
}
|
| 307 |
-
squareRootOfPopulationStandardDeviationDisplayOrderOfOrderStatuses(): this {
|
| 308 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 309 |
-
return this.squareRootOfPopulationStandardDeviationDisplayOrderOfOrderStatusesAs(
|
| 310 |
-
"squareRootOfPopulationStandardDeviationOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 311 |
-
}
|
| 312 |
-
|
| 313 |
-
squareRootOfPopulationStandardDeviationDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 314 |
-
const query = child.toQuery().clone();
|
| 315 |
-
query.aggregateItems = [];
|
| 316 |
-
query.aggregate("stddev_pop", "displayOrder", alias);
|
| 317 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 318 |
-
{ kind: "aggregate", method: "squareRootOfPopulationStandardDeviationDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 319 |
-
return this;
|
| 320 |
-
}
|
| 321 |
-
sampleVarianceDisplayOrderOfOrderStatuses(): this {
|
| 322 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 323 |
-
return this.sampleVarianceDisplayOrderOfOrderStatusesAs(
|
| 324 |
-
"sampleVarianceOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 325 |
-
}
|
| 326 |
-
|
| 327 |
-
sampleVarianceDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 328 |
-
const query = child.toQuery().clone();
|
| 329 |
-
query.aggregateItems = [];
|
| 330 |
-
query.aggregate("var_samp", "displayOrder", alias);
|
| 331 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 332 |
-
{ kind: "aggregate", method: "sampleVarianceDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 333 |
-
return this;
|
| 334 |
-
}
|
| 335 |
-
samplePopulationVarianceDisplayOrderOfOrderStatuses(): this {
|
| 336 |
-
const query = new SelectQuery("OrderStatus").filter({ version: { "$gte": 1 } });
|
| 337 |
-
return this.samplePopulationVarianceDisplayOrderOfOrderStatusesAs(
|
| 338 |
-
"samplePopulationVarianceOfDisplayOrderOfOrderStatuses", { toQuery: () => query });
|
| 339 |
-
}
|
| 340 |
-
|
| 341 |
-
samplePopulationVarianceDisplayOrderOfOrderStatusesAs(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 342 |
-
const query = child.toQuery().clone();
|
| 343 |
-
query.aggregateItems = [];
|
| 344 |
-
query.aggregate("var_pop", "displayOrder", alias);
|
| 345 |
-
this.query.relationAggregate("orderStatusList", alias, query, true,
|
| 346 |
-
{ kind: "aggregate", method: "samplePopulationVarianceDisplayOrderOfOrderStatusesAs", relation: "orderStatusList", alias });
|
| 347 |
-
return this;
|
| 348 |
-
}
|
| 349 |
-
countCustomers(): this {
|
| 350 |
-
return this.countCustomersAs("countCustomers");
|
| 351 |
-
}
|
| 352 |
-
|
| 353 |
-
countCustomersAs(alias: string): this {
|
| 354 |
-
const query = new SelectQuery("Customer").filter({ version: { "$gte": 1 } });
|
| 355 |
-
this.countCustomersWith(alias, { toQuery: () => query });
|
| 356 |
-
this.query.relationAggregates[this.query.relationAggregates.length - 1].operation = {
|
| 357 |
-
kind: "relation-count", method: "countCustomersAs", relation: "customerList", alias };
|
| 358 |
-
return this;
|
| 359 |
-
}
|
| 360 |
-
|
| 361 |
-
countCustomersWith(alias: string, child: { toQuery(): SelectQuery }): this {
|
| 362 |
-
const query = child.toQuery().clone();
|
| 363 |
-
query.aggregateItems = [];
|
| 364 |
-
query.aggregate("Count", "id", alias);
|
| 365 |
-
this.query.relationAggregate("customerList", alias, query, true,
|
| 366 |
-
{ kind: "relation-count", method: "countCustomersWith", relation: "customerList", alias });
|
| 367 |
-
return this;
|
| 368 |
-
}
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
withIdIs(val: any): this {
|
| 373 |
-
this.filters.push({ "id": { "$eq": val } });
|
| 374 |
-
return this;
|
| 375 |
-
}
|
| 376 |
-
|
| 377 |
-
withIdIsNot(val: any): this {
|
| 378 |
-
this.filters.push({ "id": { "$ne": val } });
|
| 379 |
-
return this;
|
| 380 |
-
}
|
| 381 |
-
|
| 382 |
-
withIdIn(...vals: any[]): this {
|
| 383 |
-
this.filters.push({ "id": { "$in": vals } });
|
| 384 |
-
return this;
|
| 385 |
-
}
|
| 386 |
-
|
| 387 |
-
withIdNotIn(...vals: any[]): this {
|
| 388 |
-
this.filters.push({ "id": { "$notIn": vals } });
|
| 389 |
-
return this;
|
| 390 |
-
}
|
| 391 |
-
|
| 392 |
-
withIdGreaterThan(val: any): this {
|
| 393 |
-
this.filters.push({ "id": { "$gt": val } });
|
| 394 |
-
return this;
|
| 395 |
-
}
|
| 396 |
-
|
| 397 |
-
withIdGreaterThanOrEqualTo(val: any): this {
|
| 398 |
-
this.filters.push({ "id": { "$gte": val } });
|
| 399 |
-
return this;
|
| 400 |
-
}
|
| 401 |
-
|
| 402 |
-
withIdLessThan(val: any): this {
|
| 403 |
-
this.filters.push({ "id": { "$lt": val } });
|
| 404 |
-
return this;
|
| 405 |
-
}
|
| 406 |
-
|
| 407 |
-
withIdLessThanOrEqualTo(val: any): this {
|
| 408 |
-
this.filters.push({ "id": { "$lte": val } });
|
| 409 |
-
return this;
|
| 410 |
-
}
|
| 411 |
-
|
| 412 |
-
withIdBetween(lower: any, upper: any): this {
|
| 413 |
-
this.filters.push({ "id": { "$between": [lower, upper] } });
|
| 414 |
-
return this;
|
| 415 |
-
}
|
| 416 |
-
|
| 417 |
-
withIdIsKnown(): this {
|
| 418 |
-
this.filters.push({ "id": { "$isNull": false } });
|
| 419 |
-
return this;
|
| 420 |
-
}
|
| 421 |
-
|
| 422 |
-
withIdIsUnknown(): this {
|
| 423 |
-
this.filters.push({ "id": { "$isNull": true } });
|
| 424 |
-
return this;
|
| 425 |
-
}
|
| 426 |
-
|
| 427 |
-
withNameContaining(val: string): this {
|
| 428 |
-
this.filters.push({ "name": { "$contains": val } });
|
| 429 |
-
return this;
|
| 430 |
-
}
|
| 431 |
-
|
| 432 |
-
withNameIs(val: string): this {
|
| 433 |
-
this.filters.push({ "name": { "$eq": val } });
|
| 434 |
-
return this;
|
| 435 |
-
}
|
| 436 |
-
|
| 437 |
-
withNameIsNot(val: any): this {
|
| 438 |
-
this.filters.push({ "name": { "$ne": val } });
|
| 439 |
-
return this;
|
| 440 |
-
}
|
| 441 |
-
|
| 442 |
-
withNameIn(...vals: any[]): this {
|
| 443 |
-
this.filters.push({ "name": { "$in": vals } });
|
| 444 |
-
return this;
|
| 445 |
-
}
|
| 446 |
-
|
| 447 |
-
withNameNotIn(...vals: any[]): this {
|
| 448 |
-
this.filters.push({ "name": { "$notIn": vals } });
|
| 449 |
-
return this;
|
| 450 |
-
}
|
| 451 |
-
|
| 452 |
-
withNameGreaterThan(val: any): this {
|
| 453 |
-
this.filters.push({ "name": { "$gt": val } });
|
| 454 |
-
return this;
|
| 455 |
-
}
|
| 456 |
-
|
| 457 |
-
withNameGreaterThanOrEqualTo(val: any): this {
|
| 458 |
-
this.filters.push({ "name": { "$gte": val } });
|
| 459 |
-
return this;
|
| 460 |
-
}
|
| 461 |
-
|
| 462 |
-
withNameLessThan(val: any): this {
|
| 463 |
-
this.filters.push({ "name": { "$lt": val } });
|
| 464 |
-
return this;
|
| 465 |
-
}
|
| 466 |
-
|
| 467 |
-
withNameLessThanOrEqualTo(val: any): this {
|
| 468 |
-
this.filters.push({ "name": { "$lte": val } });
|
| 469 |
-
return this;
|
| 470 |
-
}
|
| 471 |
-
|
| 472 |
-
withNameBetween(lower: any, upper: any): this {
|
| 473 |
-
this.filters.push({ "name": { "$between": [lower, upper] } });
|
| 474 |
-
return this;
|
| 475 |
-
}
|
| 476 |
-
|
| 477 |
-
withNameIsKnown(): this {
|
| 478 |
-
this.filters.push({ "name": { "$isNull": false } });
|
| 479 |
-
return this;
|
| 480 |
-
}
|
| 481 |
-
|
| 482 |
-
withNameIsUnknown(): this {
|
| 483 |
-
this.filters.push({ "name": { "$isNull": true } });
|
| 484 |
-
return this;
|
| 485 |
-
}
|
| 486 |
-
withNameNotContaining(val: string): this {
|
| 487 |
-
this.filters.push({ "name": { "$notContains": val } });
|
| 488 |
-
return this;
|
| 489 |
-
}
|
| 490 |
-
|
| 491 |
-
withNameStartingWith(val: string): this {
|
| 492 |
-
this.filters.push({ "name": { "$startsWith": val } });
|
| 493 |
-
return this;
|
| 494 |
-
}
|
| 495 |
-
|
| 496 |
-
withNameNotStartingWith(val: string): this {
|
| 497 |
-
this.filters.push({ "name": { "$notStartsWith": val } });
|
| 498 |
-
return this;
|
| 499 |
-
}
|
| 500 |
-
|
| 501 |
-
withNameEndingWith(val: string): this {
|
| 502 |
-
this.filters.push({ "name": { "$endsWith": val } });
|
| 503 |
-
return this;
|
| 504 |
-
}
|
| 505 |
-
|
| 506 |
-
withNameNotEndingWith(val: string): this {
|
| 507 |
-
this.filters.push({ "name": { "$notEndsWith": val } });
|
| 508 |
-
return this;
|
| 509 |
-
}
|
| 510 |
-
|
| 511 |
-
withNameSoundingLike(val: string): this {
|
| 512 |
-
this.filters.push({ "name": { "$soundLike": val } });
|
| 513 |
-
return this;
|
| 514 |
-
}
|
| 515 |
-
|
| 516 |
-
withVersionIs(val: any): this {
|
| 517 |
-
this.filters.push({ "version": { "$eq": val } });
|
| 518 |
-
return this;
|
| 519 |
-
}
|
| 520 |
-
|
| 521 |
-
withVersionIsNot(val: any): this {
|
| 522 |
-
this.filters.push({ "version": { "$ne": val } });
|
| 523 |
-
return this;
|
| 524 |
-
}
|
| 525 |
-
|
| 526 |
-
withVersionIn(...vals: any[]): this {
|
| 527 |
-
this.filters.push({ "version": { "$in": vals } });
|
| 528 |
-
return this;
|
| 529 |
-
}
|
| 530 |
-
|
| 531 |
-
withVersionNotIn(...vals: any[]): this {
|
| 532 |
-
this.filters.push({ "version": { "$notIn": vals } });
|
| 533 |
-
return this;
|
| 534 |
-
}
|
| 535 |
-
|
| 536 |
-
withVersionGreaterThan(val: any): this {
|
| 537 |
-
this.filters.push({ "version": { "$gt": val } });
|
| 538 |
-
return this;
|
| 539 |
-
}
|
| 540 |
-
|
| 541 |
-
withVersionGreaterThanOrEqualTo(val: any): this {
|
| 542 |
-
this.filters.push({ "version": { "$gte": val } });
|
| 543 |
-
return this;
|
| 544 |
-
}
|
| 545 |
-
|
| 546 |
-
withVersionLessThan(val: any): this {
|
| 547 |
-
this.filters.push({ "version": { "$lt": val } });
|
| 548 |
-
return this;
|
| 549 |
-
}
|
| 550 |
-
|
| 551 |
-
withVersionLessThanOrEqualTo(val: any): this {
|
| 552 |
-
this.filters.push({ "version": { "$lte": val } });
|
| 553 |
-
return this;
|
| 554 |
-
}
|
| 555 |
-
|
| 556 |
-
withVersionBetween(lower: any, upper: any): this {
|
| 557 |
-
this.filters.push({ "version": { "$between": [lower, upper] } });
|
| 558 |
-
return this;
|
| 559 |
-
}
|
| 560 |
-
|
| 561 |
-
withVersionIsKnown(): this {
|
| 562 |
-
this.filters.push({ "version": { "$isNull": false } });
|
| 563 |
-
return this;
|
| 564 |
-
}
|
| 565 |
-
|
| 566 |
-
withVersionIsUnknown(): this {
|
| 567 |
-
this.filters.push({ "version": { "$isNull": true } });
|
| 568 |
-
return this;
|
| 569 |
-
}
|
| 570 |
-
|
| 571 |
-
orderByIdAscending(): this {
|
| 572 |
-
this.query.orderBy("id", "asc");
|
| 573 |
-
return this;
|
| 574 |
-
}
|
| 575 |
-
|
| 576 |
-
orderByIdDescending(): this {
|
| 577 |
-
this.query.orderBy("id", "desc");
|
| 578 |
-
return this;
|
| 579 |
-
}
|
| 580 |
-
|
| 581 |
-
orderByNameAscending(): this {
|
| 582 |
-
this.query.orderBy("name", "asc");
|
| 583 |
-
return this;
|
| 584 |
-
}
|
| 585 |
-
|
| 586 |
-
orderByNameDescending(): this {
|
| 587 |
-
this.query.orderBy("name", "desc");
|
| 588 |
-
return this;
|
| 589 |
-
}
|
| 590 |
-
|
| 591 |
-
orderByVersionAscending(): this {
|
| 592 |
-
this.query.orderBy("version", "asc");
|
| 593 |
-
return this;
|
| 594 |
-
}
|
| 595 |
-
|
| 596 |
-
orderByVersionDescending(): this {
|
| 597 |
-
this.query.orderBy("version", "desc");
|
| 598 |
-
return this;
|
| 599 |
-
}
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
// --- Aggregations ---
|
| 603 |
-
count(): this {
|
| 604 |
-
this.query.aggregate("Count", "id", "count");
|
| 605 |
-
this._pageCountAlias = "count";
|
| 606 |
-
this._pageCountMethod = "count";
|
| 607 |
-
return this;
|
| 608 |
-
}
|
| 609 |
-
|
| 610 |
-
countAs(retName: string): this {
|
| 611 |
-
this.query.aggregate("Count", "id", retName);
|
| 612 |
-
this._pageCountAlias = retName;
|
| 613 |
-
this._pageCountMethod = "countAs";
|
| 614 |
-
return this;
|
| 615 |
-
}
|
| 616 |
-
|
| 617 |
-
|
| 618 |
-
// --- Group By ---
|
| 619 |
-
groupById(): this {
|
| 620 |
-
this.query.groupBy("id");
|
| 621 |
-
return this;
|
| 622 |
-
}
|
| 623 |
-
|
| 624 |
-
groupByIdAs(retName: string): this {
|
| 625 |
-
this.query.groupBy("id"); // In TS we don't alias group by yet natively
|
| 626 |
-
return this;
|
| 627 |
-
}
|
| 628 |
-
groupByName(): this {
|
| 629 |
-
this.query.groupBy("name");
|
| 630 |
-
return this;
|
| 631 |
-
}
|
| 632 |
-
|
| 633 |
-
groupByNameAs(retName: string): this {
|
| 634 |
-
this.query.groupBy("name"); // In TS we don't alias group by yet natively
|
| 635 |
-
return this;
|
| 636 |
-
}
|
| 637 |
-
groupByVersion(): this {
|
| 638 |
-
this.query.groupBy("version");
|
| 639 |
-
return this;
|
| 640 |
-
}
|
| 641 |
-
|
| 642 |
-
groupByVersionAs(retName: string): this {
|
| 643 |
-
this.query.groupBy("version"); // In TS we don't alias group by yet natively
|
| 644 |
-
return this;
|
| 645 |
-
}
|
| 646 |
-
|
| 647 |
-
// --- Facets ---
|
| 648 |
-
|
| 649 |
-
private async executeForListInternal(context: UserContext): Promise<SmartList<Platform>> {
|
| 650 |
-
this.ensureIntent();
|
| 651 |
-
if (this.filters.length > 0) {
|
| 652 |
-
this.query.filter({ "$and": this.filters });
|
| 653 |
-
}
|
| 654 |
-
|
| 655 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 656 |
-
const rows = await service.executeQuery(context.prepareQuery(this.query));
|
| 657 |
-
const queryRoot = new EntityRoot();
|
| 658 |
-
const aggregateOnly = this.query.aggregateItems.length > 0 && this.query.groupByItems.length === 0;
|
| 659 |
-
const data = aggregateOnly ? [] : rows.map((row: unknown) =>
|
| 660 |
-
row instanceof Platform
|
| 661 |
-
? row
|
| 662 |
-
: Platform.fromRecord(row as Record<string, unknown>, queryRoot));
|
| 663 |
-
const result = new SmartList<Platform>(data);
|
| 664 |
-
if (aggregateOnly && rows[0]) Object.assign(result.aggregations, rows[0]);
|
| 665 |
-
|
| 666 |
-
if (this.query.facets.length > 0) {
|
| 667 |
-
result.facets = await executeRelationFacets(
|
| 668 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 669 |
-
}
|
| 670 |
-
|
| 671 |
-
return result;
|
| 672 |
-
}
|
| 673 |
-
|
| 674 |
-
private async executeForRowsInternal(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 675 |
-
this.ensureIntent();
|
| 676 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 677 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 678 |
-
return new SmartList<Record<string, unknown>>(
|
| 679 |
-
await service.executeQuery(context.prepareQuery(this.query)) as Record<string, unknown>[]);
|
| 680 |
-
}
|
| 681 |
-
|
| 682 |
-
private async executeForPageInternal(
|
| 683 |
-
context: UserContext, offset: number, limit: number,
|
| 684 |
-
): Promise<TeaQLPage<Platform>> {
|
| 685 |
-
this.ensureIntent();
|
| 686 |
-
this.query.offset(offset).limit(limit);
|
| 687 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 688 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 689 |
-
const useIdSet = this.query.localIdSetPaginationOptions() !== undefined;
|
| 690 |
-
const countOperation = { kind: "named-count" as const,
|
| 691 |
-
method: this._pageCountMethod ?? "count",
|
| 692 |
-
...(this._pageCountMethod === "countAs" ? { alias: this._pageCountAlias } : {}) };
|
| 693 |
-
const totalCountBeforeRows = useIdSet ? undefined : await service.executeCount(
|
| 694 |
-
this.query, this._pageCountAlias, countOperation);
|
| 695 |
-
const pageQuery = this.query.clone();
|
| 696 |
-
// A page count describes the full filtered set, not an aggregate-only page row.
|
| 697 |
-
pageQuery.aggregateItems = pageQuery.aggregateItems.filter(item =>
|
| 698 |
-
!(String(item.function).toLowerCase() === "count" && item.alias === this._pageCountAlias));
|
| 699 |
-
const rows = await service.executeQuery(context.prepareQuery(pageQuery));
|
| 700 |
-
const totalCount = useIdSet && context.idSetPaginationCountAccuracy === "EXACT"
|
| 701 |
-
? context.idSetPaginationCount!
|
| 702 |
-
: (totalCountBeforeRows ?? await service.executeCount(this.query, this._pageCountAlias, countOperation));
|
| 703 |
-
const queryRoot = new EntityRoot();
|
| 704 |
-
const data = new SmartList(rows.map((row: unknown) =>
|
| 705 |
-
row instanceof Platform
|
| 706 |
-
? row
|
| 707 |
-
: Platform.fromRecord(row as Record<string, unknown>, queryRoot)));
|
| 708 |
-
data.totalCount = totalCount;
|
| 709 |
-
if (this._pageCountAlias !== undefined) data.aggregations[this._pageCountAlias] = totalCount;
|
| 710 |
-
if (this.query.facets.length > 0) {
|
| 711 |
-
data.facets = await executeRelationFacets(
|
| 712 |
-
service, (query: any) => context.prepareQuery(query), this.query, this.query.facets);
|
| 713 |
-
}
|
| 714 |
-
return { data, totalCount, offset, limit };
|
| 715 |
-
}
|
| 716 |
-
|
| 717 |
-
private async *executeForStreamInternal(context: UserContext, chunkSize: number): AsyncIterable<Platform> {
|
| 718 |
-
this.ensureIntent();
|
| 719 |
-
if (this.filters.length > 0) this.query.filter({ "$and": this.filters });
|
| 720 |
-
const service = context.requireResource<TeaQLDataService>("dataService");
|
| 721 |
-
const queryRoot = new EntityRoot();
|
| 722 |
-
for await (const chunk of service.executeForStream(this.query, chunkSize)) {
|
| 723 |
-
for (const entity of chunk) {
|
| 724 |
-
yield entity instanceof Platform
|
| 725 |
-
? entity
|
| 726 |
-
: Platform.fromRecord(entity as Record<string, unknown>, queryRoot);
|
| 727 |
-
}
|
| 728 |
-
}
|
| 729 |
-
}
|
| 730 |
-
|
| 731 |
-
private ensureIntent(): void {
|
| 732 |
-
if (!this._comment?.trim()) {
|
| 733 |
-
throw new Error("Security audit failure: non-empty comment() is required before execution");
|
| 734 |
-
}
|
| 735 |
-
if (!this._purpose?.trim()) {
|
| 736 |
-
throw new Error("Security audit failure: non-empty purpose() is required before execution");
|
| 737 |
-
}
|
| 738 |
-
}
|
| 739 |
-
|
| 740 |
-
}
|
| 741 |
-
|
| 742 |
-
export class ExecutablePlatformRequest {
|
| 743 |
-
constructor(
|
| 744 |
-
private readonly execute: (context: UserContext) => Promise<SmartList<Platform>>,
|
| 745 |
-
private readonly executeRows: (context: UserContext) => Promise<SmartList<Record<string, unknown>>>,
|
| 746 |
-
private readonly page: (
|
| 747 |
-
context: UserContext, offset: number, limit: number,
|
| 748 |
-
) => Promise<TeaQLPage<Platform>>,
|
| 749 |
-
private readonly stream: (context: UserContext, chunkSize: number) => AsyncIterable<Platform>,
|
| 750 |
-
private readonly limitOne: () => void,
|
| 751 |
-
private readonly addComment: (comment: string) => void,
|
| 752 |
-
private readonly ensureIntent: () => void,
|
| 753 |
-
) {}
|
| 754 |
-
|
| 755 |
-
comment(c: string): this {
|
| 756 |
-
this.addComment(c);
|
| 757 |
-
return this;
|
| 758 |
-
}
|
| 759 |
-
|
| 760 |
-
newEntity(context: UserContext): Platform {
|
| 761 |
-
this.ensureIntent();
|
| 762 |
-
return new Platform();
|
| 763 |
-
}
|
| 764 |
-
|
| 765 |
-
executeForList(context: UserContext): Promise<SmartList<Platform>> {
|
| 766 |
-
this.ensureIntent();
|
| 767 |
-
return this.execute(context);
|
| 768 |
-
}
|
| 769 |
-
|
| 770 |
-
executeForRows(context: UserContext): Promise<SmartList<Record<string, unknown>>> {
|
| 771 |
-
this.ensureIntent();
|
| 772 |
-
return this.executeRows(context);
|
| 773 |
-
}
|
| 774 |
-
|
| 775 |
-
executeForPage(
|
| 776 |
-
context: UserContext, offset: number, limit: number,
|
| 777 |
-
): Promise<TeaQLPage<Platform>> {
|
| 778 |
-
this.ensureIntent();
|
| 779 |
-
return this.page(context, offset, limit);
|
| 780 |
-
}
|
| 781 |
-
|
| 782 |
-
executeForStream(context: UserContext, chunkSize = 1000): AsyncIterable<Platform> {
|
| 783 |
-
this.ensureIntent();
|
| 784 |
-
return this.stream(context, chunkSize);
|
| 785 |
-
}
|
| 786 |
-
|
| 787 |
-
async executeForOne(context: UserContext): Promise<Platform | undefined> {
|
| 788 |
-
this.limitOne();
|
| 789 |
-
return (await this.executeForList(context))[0];
|
| 790 |
-
}
|
| 791 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/runtime-module.ts
DELETED
|
@@ -1,150 +0,0 @@
|
|
| 1 |
-
import { ObjectLocation, RuntimeModule } from "teaql-ts";
|
| 2 |
-
import { ENTITY_SCHEMAS } from "./teaql-schemas";
|
| 3 |
-
import { ensureGeneratedBootstrap } from "./generated-bootstrap";
|
| 4 |
-
|
| 5 |
-
/** Generated canonical KSML to selected-wire mapping. Never infer this from TS members. */
|
| 6 |
-
export const GENERATED_WIRE_MODEL_METADATA = Object.freeze({
|
| 7 |
-
profile: "camelCase" as const,
|
| 8 |
-
entities: Object.freeze({
|
| 9 |
-
"Platform": Object.freeze({
|
| 10 |
-
entityType: "Platform",
|
| 11 |
-
profile: "camelCase" as const,
|
| 12 |
-
fields: Object.freeze({
|
| 13 |
-
"id": Object.freeze({ canonicalName: "id", wireName: "id", aliases: Object.freeze([] as string[]) }),
|
| 14 |
-
"name": Object.freeze({ canonicalName: "name", wireName: "name", aliases: Object.freeze([] as string[]) }),
|
| 15 |
-
"version": Object.freeze({ canonicalName: "version", wireName: "version", aliases: Object.freeze([] as string[]) })
|
| 16 |
-
}),
|
| 17 |
-
}),
|
| 18 |
-
"OrderStatus": Object.freeze({
|
| 19 |
-
entityType: "OrderStatus",
|
| 20 |
-
profile: "camelCase" as const,
|
| 21 |
-
fields: Object.freeze({
|
| 22 |
-
"platform": Object.freeze({ canonicalName: "platform", wireName: "platform", aliases: Object.freeze([] as string[]) }),
|
| 23 |
-
"id": Object.freeze({ canonicalName: "id", wireName: "id", aliases: Object.freeze([] as string[]) }),
|
| 24 |
-
"name": Object.freeze({ canonicalName: "name", wireName: "name", aliases: Object.freeze([] as string[]) }),
|
| 25 |
-
"code": Object.freeze({ canonicalName: "code", wireName: "code", aliases: Object.freeze([] as string[]) }),
|
| 26 |
-
"color": Object.freeze({ canonicalName: "color", wireName: "color", aliases: Object.freeze([] as string[]) }),
|
| 27 |
-
"display_order": Object.freeze({ canonicalName: "display_order", wireName: "displayOrder", aliases: Object.freeze([] as string[]) }),
|
| 28 |
-
"version": Object.freeze({ canonicalName: "version", wireName: "version", aliases: Object.freeze([] as string[]) })
|
| 29 |
-
}),
|
| 30 |
-
}),
|
| 31 |
-
"Customer": Object.freeze({
|
| 32 |
-
entityType: "Customer",
|
| 33 |
-
profile: "camelCase" as const,
|
| 34 |
-
fields: Object.freeze({
|
| 35 |
-
"id": Object.freeze({ canonicalName: "id", wireName: "id", aliases: Object.freeze([] as string[]) }),
|
| 36 |
-
"platform": Object.freeze({ canonicalName: "platform", wireName: "platform", aliases: Object.freeze([] as string[]) }),
|
| 37 |
-
"name": Object.freeze({ canonicalName: "name", wireName: "name", aliases: Object.freeze([] as string[]) }),
|
| 38 |
-
"version": Object.freeze({ canonicalName: "version", wireName: "version", aliases: Object.freeze([] as string[]) })
|
| 39 |
-
}),
|
| 40 |
-
}),
|
| 41 |
-
"CustomerOrder": Object.freeze({
|
| 42 |
-
entityType: "CustomerOrder",
|
| 43 |
-
profile: "camelCase" as const,
|
| 44 |
-
fields: Object.freeze({
|
| 45 |
-
"id": Object.freeze({ canonicalName: "id", wireName: "id", aliases: Object.freeze([] as string[]) }),
|
| 46 |
-
"customer": Object.freeze({ canonicalName: "customer", wireName: "customer", aliases: Object.freeze([] as string[]) }),
|
| 47 |
-
"status": Object.freeze({ canonicalName: "status", wireName: "status", aliases: Object.freeze([] as string[]) }),
|
| 48 |
-
"order_number": Object.freeze({ canonicalName: "order_number", wireName: "orderNumber", aliases: Object.freeze([] as string[]) }),
|
| 49 |
-
"order_date": Object.freeze({ canonicalName: "order_date", wireName: "orderDate", aliases: Object.freeze([] as string[]) }),
|
| 50 |
-
"total_amount": Object.freeze({ canonicalName: "total_amount", wireName: "totalAmount", aliases: Object.freeze([] as string[]) }),
|
| 51 |
-
"version": Object.freeze({ canonicalName: "version", wireName: "version", aliases: Object.freeze([] as string[]) })
|
| 52 |
-
}),
|
| 53 |
-
}),
|
| 54 |
-
"OrderItem": Object.freeze({
|
| 55 |
-
entityType: "OrderItem",
|
| 56 |
-
profile: "camelCase" as const,
|
| 57 |
-
fields: Object.freeze({
|
| 58 |
-
"id": Object.freeze({ canonicalName: "id", wireName: "id", aliases: Object.freeze([] as string[]) }),
|
| 59 |
-
"customer_order": Object.freeze({ canonicalName: "customer_order", wireName: "customerOrder", aliases: Object.freeze([] as string[]) }),
|
| 60 |
-
"product_name": Object.freeze({ canonicalName: "product_name", wireName: "productName", aliases: Object.freeze([] as string[]) }),
|
| 61 |
-
"quantity": Object.freeze({ canonicalName: "quantity", wireName: "quantity", aliases: Object.freeze([] as string[]) }),
|
| 62 |
-
"unit_price": Object.freeze({ canonicalName: "unit_price", wireName: "unitPrice", aliases: Object.freeze([] as string[]) }),
|
| 63 |
-
"version": Object.freeze({ canonicalName: "version", wireName: "version", aliases: Object.freeze([] as string[]) })
|
| 64 |
-
}),
|
| 65 |
-
})
|
| 66 |
-
}),
|
| 67 |
-
});
|
| 68 |
-
|
| 69 |
-
/** Passive generated metadata manifest. It never modifies the database schema. */
|
| 70 |
-
export const GENERATED_RUNTIME_MODULE = new RuntimeModule(ENTITY_SCHEMAS, {
|
| 71 |
-
"Platform": {
|
| 72 |
-
checkAndFix(context, mutation, results) {
|
| 73 |
-
const now = context.getResource("fixTime");
|
| 74 |
-
if ((mutation.action === "Create" && mutation.payload["name"] === undefined) || mutation.payload["name"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("name") });
|
| 75 |
-
if (mutation.payload["name"] != null && [...String(mutation.payload["name"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("name"), inputValue: mutation.payload["name"], systemValue: 100 });
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
},
|
| 79 |
-
},
|
| 80 |
-
"OrderStatus": {
|
| 81 |
-
checkAndFix(context, mutation, results) {
|
| 82 |
-
const now = context.getResource("fixTime");
|
| 83 |
-
if ((mutation.action === "Create" && mutation.payload["platform"] === undefined) || mutation.payload["platform"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("platform") });
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
if ((mutation.action === "Create" && mutation.payload["name"] === undefined) || mutation.payload["name"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("name") });
|
| 87 |
-
if (mutation.payload["name"] != null && [...String(mutation.payload["name"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("name"), inputValue: mutation.payload["name"], systemValue: 100 });
|
| 88 |
-
|
| 89 |
-
if ((mutation.action === "Create" && mutation.payload["code"] === undefined) || mutation.payload["code"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("code") });
|
| 90 |
-
if (mutation.payload["code"] != null && [...String(mutation.payload["code"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("code"), inputValue: mutation.payload["code"], systemValue: 100 });
|
| 91 |
-
|
| 92 |
-
if ((mutation.action === "Create" && mutation.payload["color"] === undefined) || mutation.payload["color"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("color") });
|
| 93 |
-
if (mutation.payload["color"] != null && [...String(mutation.payload["color"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("color"), inputValue: mutation.payload["color"], systemValue: 100 });
|
| 94 |
-
|
| 95 |
-
if ((mutation.action === "Create" && mutation.payload["display_order"] === undefined) || mutation.payload["display_order"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("display_order") });
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
},
|
| 99 |
-
},
|
| 100 |
-
"Customer": {
|
| 101 |
-
checkAndFix(context, mutation, results) {
|
| 102 |
-
const now = context.getResource("fixTime");
|
| 103 |
-
if ((mutation.action === "Create" && mutation.payload["platform"] === undefined) || mutation.payload["platform"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("platform") });
|
| 104 |
-
|
| 105 |
-
if ((mutation.action === "Create" && mutation.payload["name"] === undefined) || mutation.payload["name"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("name") });
|
| 106 |
-
if (mutation.payload["name"] != null && [...String(mutation.payload["name"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("name"), inputValue: mutation.payload["name"], systemValue: 100 });
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
},
|
| 110 |
-
},
|
| 111 |
-
"CustomerOrder": {
|
| 112 |
-
checkAndFix(context, mutation, results) {
|
| 113 |
-
const now = context.getResource("fixTime");
|
| 114 |
-
if ((mutation.action === "Create" && mutation.payload["customer"] === undefined) || mutation.payload["customer"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("customer") });
|
| 115 |
-
|
| 116 |
-
if ((mutation.action === "Create" && mutation.payload["status"] === undefined) || mutation.payload["status"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("status") });
|
| 117 |
-
|
| 118 |
-
if ((mutation.action === "Create" && mutation.payload["order_number"] === undefined) || mutation.payload["order_number"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("order_number") });
|
| 119 |
-
if (mutation.payload["order_number"] != null && [...String(mutation.payload["order_number"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("order_number"), inputValue: mutation.payload["order_number"], systemValue: 100 });
|
| 120 |
-
|
| 121 |
-
if ((mutation.action === "Create" && mutation.payload["order_date"] === undefined) || mutation.payload["order_date"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("order_date") });
|
| 122 |
-
|
| 123 |
-
if ((mutation.action === "Create" && mutation.payload["total_amount"] === undefined) || mutation.payload["total_amount"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("total_amount") });
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
},
|
| 127 |
-
},
|
| 128 |
-
"OrderItem": {
|
| 129 |
-
checkAndFix(context, mutation, results) {
|
| 130 |
-
const now = context.getResource("fixTime");
|
| 131 |
-
if ((mutation.action === "Create" && mutation.payload["customer_order"] === undefined) || mutation.payload["customer_order"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("customer_order") });
|
| 132 |
-
|
| 133 |
-
if ((mutation.action === "Create" && mutation.payload["product_name"] === undefined) || mutation.payload["product_name"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("product_name") });
|
| 134 |
-
if (mutation.payload["product_name"] != null && [...String(mutation.payload["product_name"])].length > 100) results.push({ ruleId: "max_length", location: ObjectLocation.property("product_name"), inputValue: mutation.payload["product_name"], systemValue: 100 });
|
| 135 |
-
|
| 136 |
-
if ((mutation.action === "Create" && mutation.payload["quantity"] === undefined) || mutation.payload["quantity"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("quantity") });
|
| 137 |
-
|
| 138 |
-
if ((mutation.action === "Create" && mutation.payload["unit_price"] === undefined) || mutation.payload["unit_price"] === null) results.push({ ruleId: "required", location: ObjectLocation.property("unit_price") });
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
},
|
| 142 |
-
}
|
| 143 |
-
}, { ...{
|
| 144 |
-
defaultDomainRoot: { entity: "Platform", id: "1", values: { "name": "Commerce Test Platform" } },
|
| 145 |
-
constants: [
|
| 146 |
-
{ entity: "OrderStatus", id: "1001", values: { "platform": "1", "name": "New", "code": "NEW", "color": "#94A3B8", "displayOrder": 1 } },
|
| 147 |
-
{ entity: "OrderStatus", id: "1002", values: { "platform": "1", "name": "Paid", "code": "PAID", "color": "#22C55E", "displayOrder": 2 } },
|
| 148 |
-
{ entity: "OrderStatus", id: "1003", values: { "platform": "1", "name": "Cancelled", "code": "CANCELLED", "color": "#EF4444", "displayOrder": 3 } }
|
| 149 |
-
]
|
| 150 |
-
}, ensure: ensureGeneratedBootstrap });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/teaql-schemas.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
| 1 |
-
import { EntitySchema } from "teaql-ts/sql/core";
|
| 2 |
-
|
| 3 |
-
export const ENTITY_SCHEMAS: Record<string, EntitySchema> = {
|
| 4 |
-
"Platform": {
|
| 5 |
-
table: "platform_data",
|
| 6 |
-
auditMaskFields: [],
|
| 7 |
-
columns: {"id": { columnName: "id", modelName: "id", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "name": { columnName: "name", modelName: "name", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "version": { columnName: "version", modelName: "version", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }},
|
| 8 |
-
relations: {"orderStatusList": { targetEntity: "OrderStatus", localKey: "id", foreignKey: "platform", many: true }, "customerList": { targetEntity: "Customer", localKey: "id", foreignKey: "platform", many: true }}
|
| 9 |
-
},
|
| 10 |
-
"OrderStatus": {
|
| 11 |
-
table: "order_status_data",
|
| 12 |
-
auditMaskFields: [],
|
| 13 |
-
columns: {"platform": { columnName: "platform", modelName: "platform", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "id": { columnName: "id", modelName: "id", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "name": { columnName: "name", modelName: "name", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "code": { columnName: "code", modelName: "code", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "color": { columnName: "color", modelName: "color", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "displayOrder": { columnName: "display_order", modelName: "display_order", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }, "version": { columnName: "version", modelName: "version", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }},
|
| 14 |
-
relations: {"platform": { targetEntity: "Platform", localKey: "platform", foreignKey: "id", many: false }, "customerOrderList": { targetEntity: "CustomerOrder", localKey: "id", foreignKey: "status", many: true }}
|
| 15 |
-
},
|
| 16 |
-
"Customer": {
|
| 17 |
-
table: "customer_data",
|
| 18 |
-
auditMaskFields: [],
|
| 19 |
-
columns: {"id": { columnName: "id", modelName: "id", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "platform": { columnName: "platform", modelName: "platform", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "name": { columnName: "name", modelName: "name", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "version": { columnName: "version", modelName: "version", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }},
|
| 20 |
-
relations: {"platform": { targetEntity: "Platform", localKey: "platform", foreignKey: "id", many: false }, "customerOrderList": { targetEntity: "CustomerOrder", localKey: "id", foreignKey: "customer", many: true }}
|
| 21 |
-
},
|
| 22 |
-
"CustomerOrder": {
|
| 23 |
-
table: "customer_order_data",
|
| 24 |
-
auditMaskFields: [],
|
| 25 |
-
columns: {"id": { columnName: "id", modelName: "id", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "customer": { columnName: "customer", modelName: "customer", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "status": { columnName: "status", modelName: "status", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "orderNumber": { columnName: "order_number", modelName: "order_number", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "orderDate": { columnName: "order_date", modelName: "order_date", logPolicy: "plain", logicalType: "date", decode: "date", nullable: false }, "totalAmount": { columnName: "total_amount", modelName: "total_amount", logPolicy: "plain", logicalType: "decimal", decode: "number", nullable: false }, "version": { columnName: "version", modelName: "version", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }},
|
| 26 |
-
relations: {"customer": { targetEntity: "Customer", localKey: "customer", foreignKey: "id", many: false }, "status": { targetEntity: "OrderStatus", localKey: "status", foreignKey: "id", many: false }, "orderItemList": { targetEntity: "OrderItem", localKey: "id", foreignKey: "customerOrder", many: true }}
|
| 27 |
-
},
|
| 28 |
-
"OrderItem": {
|
| 29 |
-
table: "order_item_data",
|
| 30 |
-
auditMaskFields: [],
|
| 31 |
-
columns: {"id": { columnName: "id", modelName: "id", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "customerOrder": { columnName: "customer_order", modelName: "customer_order", logPolicy: "plain", logicalType: "integer", decode: "string", nullable: false }, "productName": { columnName: "product_name", modelName: "product_name", logPolicy: "plain", logicalType: "text", decode: "native", nullable: false }, "quantity": { columnName: "quantity", modelName: "quantity", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }, "unitPrice": { columnName: "unit_price", modelName: "unit_price", logPolicy: "plain", logicalType: "decimal", decode: "number", nullable: false }, "version": { columnName: "version", modelName: "version", logPolicy: "plain", logicalType: "integer", decode: "number", nullable: false }},
|
| 32 |
-
relations: {"customerOrder": { targetEntity: "CustomerOrder", localKey: "customerOrder", foreignKey: "id", many: false }}
|
| 33 |
-
}
|
| 34 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/src/teaql-ts.ts
DELETED
|
@@ -1,308 +0,0 @@
|
|
| 1 |
-
import {
|
| 2 |
-
CheckException, EntityChecker, RuntimeModule,
|
| 3 |
-
SelectQuery as RuntimeSelectQuery, UserContext,
|
| 4 |
-
executeRelationFacets, QueryRequest, MutationIntent, MutationRequest, GraphMutationSession,
|
| 5 |
-
} from "teaql-ts";
|
| 6 |
-
|
| 7 |
-
export { CheckException, EntityRoot, ObjectLocation, SmartList, UserContext, executeRelationFacets, MutationIntent } from "teaql-ts";
|
| 8 |
-
export { GraphMutationSession, LoadedScalarSnapshot, MutationTraceScope } from "teaql-ts";
|
| 9 |
-
export type { EntityKey } from "teaql-ts";
|
| 10 |
-
export type { TeaQLPage } from "teaql-ts";
|
| 11 |
-
import type { QueryOperation } from "teaql-ts";
|
| 12 |
-
|
| 13 |
-
function soundex(input: unknown): string {
|
| 14 |
-
const text = String(input ?? "").toUpperCase().replace(/[^A-Z]/g, "");
|
| 15 |
-
if (!text) return "";
|
| 16 |
-
const code = (char: string): string => "BFPV".includes(char) ? "1"
|
| 17 |
-
: "CGJKQSXZ".includes(char) ? "2" : "DT".includes(char) ? "3"
|
| 18 |
-
: char === "L" ? "4" : "MN".includes(char) ? "5" : char === "R" ? "6" : "";
|
| 19 |
-
let result = text[0], previous = code(text[0]);
|
| 20 |
-
for (const char of text.slice(1)) {
|
| 21 |
-
const current = code(char);
|
| 22 |
-
if (current && current !== previous) result += current;
|
| 23 |
-
previous = current;
|
| 24 |
-
if (result.length === 4) break;
|
| 25 |
-
}
|
| 26 |
-
return (result + "000").slice(0, 4);
|
| 27 |
-
}
|
| 28 |
-
|
| 29 |
-
/** Generated naming adapter; query policy and execution remain in the formal runtime. */
|
| 30 |
-
export class SelectQuery extends RuntimeSelectQuery {
|
| 31 |
-
orderBy(field: string, direction: string): this {
|
| 32 |
-
return this.order({ field, expr: null, direction: direction === "desc" ? "Desc" : "Asc" } as any);
|
| 33 |
-
}
|
| 34 |
-
|
| 35 |
-
relationQuery(
|
| 36 |
-
name: string, query: RuntimeSelectQuery, localKey = "id", foreignKey = "id", many = true,
|
| 37 |
-
operation?: QueryOperation,
|
| 38 |
-
): this {
|
| 39 |
-
return super.relationQuery(name, query, localKey, foreignKey, many, operation);
|
| 40 |
-
}
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
export interface TeaQLDataService {
|
| 44 |
-
executeGraphSave<T>(intent: MutationIntent, work: (graph: GraphMutationSession) => Promise<T>): Promise<T>;
|
| 45 |
-
preflightMutation(mutation: any): any;
|
| 46 |
-
afterGraphCommit(work: () => void): void;
|
| 47 |
-
afterGraphRollback(work: () => void): void;
|
| 48 |
-
executeMutation(mutation: any): Promise<any>;
|
| 49 |
-
executeQuery(query: any): Promise<any[]>;
|
| 50 |
-
executeCount(query: any, alias?: string, operation?: QueryOperation): Promise<number>;
|
| 51 |
-
executeForStream(query: any, chunkSize?: number): AsyncIterable<any[]>;
|
| 52 |
-
close?(): Promise<void>;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
export class TeaQLClient implements TeaQLDataService {
|
| 56 |
-
private data: Record<string, Record<string, any>> = {};
|
| 57 |
-
private nextIds: Record<string, number> = {};
|
| 58 |
-
private readonly checkers: Record<string, EntityChecker> = {};
|
| 59 |
-
private userContext = new UserContext();
|
| 60 |
-
private graphSaveActive = false;
|
| 61 |
-
private graphCommitActions: Array<() => void> = [];
|
| 62 |
-
private graphRollbackActions: Array<() => void> = [];
|
| 63 |
-
private graphSaveTail: Promise<void> = Promise.resolve();
|
| 64 |
-
private readonly mutationGovernanceEvents: any[] = [];
|
| 65 |
-
|
| 66 |
-
constructor(private storagePath?: string) {
|
| 67 |
-
if (storagePath) {
|
| 68 |
-
const fs = require("fs");
|
| 69 |
-
if (fs.existsSync(storagePath)) {
|
| 70 |
-
const state = JSON.parse(fs.readFileSync(storagePath, "utf8"));
|
| 71 |
-
this.data = state.data || {};
|
| 72 |
-
this.nextIds = state.nextIds || {};
|
| 73 |
-
}
|
| 74 |
-
}
|
| 75 |
-
}
|
| 76 |
-
|
| 77 |
-
/** Installs passive generated metadata. It never mutates storage. */
|
| 78 |
-
install(module: RuntimeModule): this {
|
| 79 |
-
Object.assign(this.checkers, module.checkers);
|
| 80 |
-
return this;
|
| 81 |
-
}
|
| 82 |
-
|
| 83 |
-
setUserContext(context: UserContext): this {
|
| 84 |
-
this.userContext = context;
|
| 85 |
-
return this;
|
| 86 |
-
}
|
| 87 |
-
|
| 88 |
-
get mutationGovernanceTrace(): readonly any[] {
|
| 89 |
-
return [...this.mutationGovernanceEvents];
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
private persist() {
|
| 93 |
-
if (!this.storagePath) return;
|
| 94 |
-
const fs = require("fs");
|
| 95 |
-
const path = require("path");
|
| 96 |
-
fs.mkdirSync(path.dirname(path.resolve(this.storagePath)), { recursive: true });
|
| 97 |
-
const temporaryPath = `${this.storagePath}.tmp`;
|
| 98 |
-
fs.writeFileSync(temporaryPath, JSON.stringify({ data: this.data, nextIds: this.nextIds }));
|
| 99 |
-
fs.renameSync(temporaryPath, this.storagePath);
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
async executeGraphSave<T>(intent: MutationIntent, work: (graph: GraphMutationSession) => Promise<T>): Promise<T> {
|
| 103 |
-
const graph = new GraphMutationSession(intent);
|
| 104 |
-
const predecessor = this.graphSaveTail;
|
| 105 |
-
let release!: () => void;
|
| 106 |
-
this.graphSaveTail = new Promise<void>(resolve => { release = resolve; });
|
| 107 |
-
await predecessor;
|
| 108 |
-
const dataSnapshot = JSON.parse(JSON.stringify(this.data));
|
| 109 |
-
const nextIdsSnapshot = { ...this.nextIds };
|
| 110 |
-
let fixEvidenceStarted = false;
|
| 111 |
-
let mutationPolicyGraphStarted = false;
|
| 112 |
-
try {
|
| 113 |
-
this.graphSaveActive = true;
|
| 114 |
-
this.graphCommitActions = [];
|
| 115 |
-
this.graphRollbackActions = [];
|
| 116 |
-
this.userContext.insertResource("fixTime", new Date());
|
| 117 |
-
this.userContext.beginFixEvidence();
|
| 118 |
-
fixEvidenceStarted = true;
|
| 119 |
-
this.userContext.beginMutationPolicyGraph();
|
| 120 |
-
mutationPolicyGraphStarted = true;
|
| 121 |
-
const result = await work(graph);
|
| 122 |
-
this.userContext.ensureMutationPolicyGraphComplete();
|
| 123 |
-
this.persist();
|
| 124 |
-
for (const action of this.graphCommitActions) action();
|
| 125 |
-
return result;
|
| 126 |
-
} catch (error) {
|
| 127 |
-
this.data = dataSnapshot;
|
| 128 |
-
this.nextIds = nextIdsSnapshot;
|
| 129 |
-
for (const action of [...this.graphRollbackActions].reverse()) action();
|
| 130 |
-
throw error;
|
| 131 |
-
} finally {
|
| 132 |
-
this.graphSaveActive = false;
|
| 133 |
-
this.graphCommitActions = [];
|
| 134 |
-
this.graphRollbackActions = [];
|
| 135 |
-
if (mutationPolicyGraphStarted) this.userContext.endMutationPolicyGraph();
|
| 136 |
-
this.userContext.removeResource("fixTime");
|
| 137 |
-
if (fixEvidenceStarted) this.userContext.finishFixEvidence();
|
| 138 |
-
release();
|
| 139 |
-
}
|
| 140 |
-
}
|
| 141 |
-
|
| 142 |
-
afterGraphCommit(work: () => void): void {
|
| 143 |
-
if (!this.graphSaveActive) throw new Error("No graph save is active");
|
| 144 |
-
this.graphCommitActions.push(work);
|
| 145 |
-
}
|
| 146 |
-
|
| 147 |
-
afterGraphRollback(work: () => void): void {
|
| 148 |
-
if (!this.graphSaveActive) throw new Error("No graph save is active");
|
| 149 |
-
this.graphRollbackActions.push(work);
|
| 150 |
-
}
|
| 151 |
-
|
| 152 |
-
preflightMutation(mutation: any): any {
|
| 153 |
-
mutation = this.checkAndFixMutation(mutation);
|
| 154 |
-
this.userContext.recordMutationPolicyPreflight(mutation);
|
| 155 |
-
return mutation;
|
| 156 |
-
}
|
| 157 |
-
|
| 158 |
-
private checkAndFixMutation(mutation: any): any {
|
| 159 |
-
if (mutation instanceof MutationRequest) mutation = mutation.mutation;
|
| 160 |
-
if (!String(mutation?.comment || "").trim()) throw new Error("Security audit failure: audit reason is required before mutation");
|
| 161 |
-
mutation = { ...mutation, payload: { ...(mutation?.payload || {}) } };
|
| 162 |
-
const checker = this.checkers[String(mutation.entity)];
|
| 163 |
-
if (!checker) return mutation;
|
| 164 |
-
const results: any[] = [];
|
| 165 |
-
const ownsFixTime = this.userContext.getResource("fixTime") === undefined;
|
| 166 |
-
if (ownsFixTime) this.userContext.insertResource("fixTime", new Date()).beginFixEvidence();
|
| 167 |
-
try {
|
| 168 |
-
checker.checkAndFix(this.userContext, mutation, results);
|
| 169 |
-
if (mutation.ledgerKey && mutation.ledgerRoot) for (const [field, value] of Object.entries(mutation.payload)) mutation.ledgerRoot.set(mutation.ledgerKey, field, value);
|
| 170 |
-
this.userContext.translateCheckResults(results);
|
| 171 |
-
if (results.length) throw new CheckException(results);
|
| 172 |
-
return mutation;
|
| 173 |
-
} finally { if (ownsFixTime) this.userContext.removeResource("fixTime").finishFixEvidence(); }
|
| 174 |
-
}
|
| 175 |
-
|
| 176 |
-
async executeMutation(mutation: any): Promise<any> {
|
| 177 |
-
mutation = this.checkAndFixMutation(mutation);
|
| 178 |
-
const mutationGovernance = this.userContext.enterMutationPolicy(mutation);
|
| 179 |
-
this.mutationGovernanceEvents.push(mutationGovernance);
|
| 180 |
-
const table = this.data[mutation.entity] ||= {};
|
| 181 |
-
if (mutation.action === "Create") {
|
| 182 |
-
const id = mutation.id ?? String(this.nextIds[mutation.entity] || 1);
|
| 183 |
-
this.nextIds[mutation.entity] = Number(id) + 1;
|
| 184 |
-
const record = { ...mutation.payload, id: String(id), version: Number(mutation.version || 0) + 1 };
|
| 185 |
-
table[String(id)] = record;
|
| 186 |
-
if (!this.graphSaveActive) this.persist();
|
| 187 |
-
return { success: true, id: String(id), version: record.version, persistedRecord: { ...record } };
|
| 188 |
-
}
|
| 189 |
-
if (mutation.action === "Update") {
|
| 190 |
-
const id = String(mutation.id);
|
| 191 |
-
if (!table[id]) throw new Error(`${mutation.entity}(${id}) does not exist`);
|
| 192 |
-
const expectedVersion = Number(mutation.version);
|
| 193 |
-
const currentVersion = Number(table[id].version || 0);
|
| 194 |
-
if (!Number.isFinite(expectedVersion) || expectedVersion !== currentVersion) {
|
| 195 |
-
throw new Error(
|
| 196 |
-
`Optimistic lock conflict for ${mutation.entity}(${id}): expected ${expectedVersion}, current ${currentVersion}`);
|
| 197 |
-
}
|
| 198 |
-
table[id] = { ...table[id], ...mutation.payload, id, version: Number(table[id].version || 0) + 1 };
|
| 199 |
-
if (!this.graphSaveActive) this.persist();
|
| 200 |
-
return { success: true, id, version: table[id].version, persistedRecord: { ...table[id] } };
|
| 201 |
-
}
|
| 202 |
-
if (mutation.action === "Delete") {
|
| 203 |
-
const id = String(mutation.id);
|
| 204 |
-
if (!table[id]) throw new Error(`${mutation.entity}(${id}) does not exist`);
|
| 205 |
-
const expectedVersion = Number(mutation.version);
|
| 206 |
-
const currentVersion = Number(table[id].version || 0);
|
| 207 |
-
if (!Number.isFinite(expectedVersion) || expectedVersion !== currentVersion) {
|
| 208 |
-
throw new Error(
|
| 209 |
-
`Optimistic lock conflict for ${mutation.entity}(${id}): expected ${expectedVersion}, current ${currentVersion}`);
|
| 210 |
-
}
|
| 211 |
-
table[id] = { ...table[id], id, version: -(currentVersion + 1) };
|
| 212 |
-
if (!this.graphSaveActive) this.persist();
|
| 213 |
-
return { success: true, id, version: table[id].version, deleted: true, persistedRecord: { ...table[id] } };
|
| 214 |
-
}
|
| 215 |
-
throw new Error(`Unsupported mutation action: ${mutation.action}`);
|
| 216 |
-
}
|
| 217 |
-
async query(context: any, req: any): Promise<any> {
|
| 218 |
-
return { rows: [] };
|
| 219 |
-
}
|
| 220 |
-
async executeQuery(query: any): Promise<any> {
|
| 221 |
-
if (!(query instanceof RuntimeSelectQuery)) {
|
| 222 |
-
throw new Error("TeaQL list execution requires the formal runtime SelectQuery");
|
| 223 |
-
}
|
| 224 |
-
query.prepareForList();
|
| 225 |
-
let rows = Object.values(this.data[query.entity] || {}).map((row: any) => ({ ...row }));
|
| 226 |
-
const matches = (row: any, expression: any): boolean => {
|
| 227 |
-
if (expression?.$and) return expression.$and.every((item: any) => matches(row, item));
|
| 228 |
-
return Object.entries(expression || {}).every(([field, predicate]: [string, any]) => {
|
| 229 |
-
if (predicate?.$eq !== undefined) return row[field] === (predicate.$eq?.id ?? predicate.$eq);
|
| 230 |
-
if (predicate?.$ne !== undefined) return row[field] !== (predicate.$ne?.id ?? predicate.$ne);
|
| 231 |
-
if (predicate?.$contains !== undefined) return String(row[field] ?? "").includes(String(predicate.$contains));
|
| 232 |
-
if (predicate?.$notContains !== undefined) return !String(row[field] ?? "").includes(String(predicate.$notContains));
|
| 233 |
-
if (predicate?.$startsWith !== undefined) return String(row[field] ?? "").startsWith(String(predicate.$startsWith));
|
| 234 |
-
if (predicate?.$notStartsWith !== undefined) return !String(row[field] ?? "").startsWith(String(predicate.$notStartsWith));
|
| 235 |
-
if (predicate?.$endsWith !== undefined) return String(row[field] ?? "").endsWith(String(predicate.$endsWith));
|
| 236 |
-
if (predicate?.$notEndsWith !== undefined) return !String(row[field] ?? "").endsWith(String(predicate.$notEndsWith));
|
| 237 |
-
if (predicate?.$soundLike !== undefined) return soundex(row[field]) === soundex(predicate.$soundLike);
|
| 238 |
-
if (predicate?.$in !== undefined) return predicate.$in.some((value: any) => row[field] === (value?.id ?? value));
|
| 239 |
-
if (predicate?.$notIn !== undefined) return !predicate.$notIn.some((value: any) => row[field] === (value?.id ?? value));
|
| 240 |
-
if (predicate?.$between !== undefined) return row[field] >= predicate.$between[0] && row[field] <= predicate.$between[1];
|
| 241 |
-
if (predicate?.$isNull === true) return row[field] === null || row[field] === undefined;
|
| 242 |
-
if (predicate?.$isNull === false) return row[field] !== null && row[field] !== undefined;
|
| 243 |
-
if (predicate?.$gt !== undefined) return row[field] > predicate.$gt;
|
| 244 |
-
if (predicate?.$gte !== undefined) return row[field] >= predicate.$gte;
|
| 245 |
-
if (predicate?.$lt !== undefined) return row[field] < predicate.$lt;
|
| 246 |
-
if (predicate?.$lte !== undefined) return row[field] <= predicate.$lte;
|
| 247 |
-
return true;
|
| 248 |
-
});
|
| 249 |
-
};
|
| 250 |
-
if (query.filterCondition) rows = rows.filter(row => matches(row, query.filterCondition));
|
| 251 |
-
if (query.aggregateItems?.length) {
|
| 252 |
-
return [Object.fromEntries(query.aggregateItems.map((aggregate: any) => {
|
| 253 |
-
if (String(aggregate.function).toLowerCase() !== "count") {
|
| 254 |
-
throw new Error(`Unsupported local aggregate: ${aggregate.function}`);
|
| 255 |
-
}
|
| 256 |
-
return [aggregate.alias, rows.length];
|
| 257 |
-
}))];
|
| 258 |
-
}
|
| 259 |
-
for (const order of [...query.orderItems].reverse()) {
|
| 260 |
-
rows.sort((a, b) => (a[order.field] === b[order.field] ? 0 : a[order.field] > b[order.field] ? 1 : -1) * (String(order.direction).toLowerCase() === "desc" ? -1 : 1));
|
| 261 |
-
}
|
| 262 |
-
const start = query.offsetValue || 0;
|
| 263 |
-
rows = rows.slice(start, start + query.limitValue);
|
| 264 |
-
for (const relation of (query.relations || []) as any[]) {
|
| 265 |
-
const localValues = new Set(rows.map((row: any) => row[relation.localKey || "id"]));
|
| 266 |
-
const relatedRows = (await this.executeQuery(relation.query)).filter(
|
| 267 |
-
(row: any) => localValues.has(row[relation.foreignKey || "id"]));
|
| 268 |
-
for (const row of rows) {
|
| 269 |
-
const matches = relatedRows.filter(
|
| 270 |
-
(related: any) => related[relation.foreignKey || "id"] === row[relation.localKey || "id"]);
|
| 271 |
-
row[relation.name] = relation.many === false ? matches[0] : matches;
|
| 272 |
-
}
|
| 273 |
-
}
|
| 274 |
-
if (query.selectItems.length > 0) {
|
| 275 |
-
const selections = new Set(query.selectItems);
|
| 276 |
-
for (const relation of (query.relations || []) as any[]) selections.add(relation.name);
|
| 277 |
-
rows = rows.map((row: any) => Object.fromEntries(
|
| 278 |
-
Object.entries(row).filter(([field]) => selections.has(field))));
|
| 279 |
-
}
|
| 280 |
-
return rows;
|
| 281 |
-
}
|
| 282 |
-
async executeCount(query: any, countAlias?: string, operation?: QueryOperation): Promise<number> {
|
| 283 |
-
if (typeof query?.forExactCount !== "function") {
|
| 284 |
-
throw new Error("TeaQL exact count requires the formal runtime SelectQuery");
|
| 285 |
-
}
|
| 286 |
-
const alias = countAlias ?? "__teaql_total";
|
| 287 |
-
const request = new QueryRequest(query).deriveOperation(query.forExactCount(alias), operation ?? {
|
| 288 |
-
kind: "named-count", ...(countAlias === undefined ? {} : { alias: countAlias }) });
|
| 289 |
-
const rows = await this.executeQuery(request.query);
|
| 290 |
-
const value = rows[0]?.[alias];
|
| 291 |
-
if (typeof value !== "number" || !Number.isFinite(value)) {
|
| 292 |
-
throw new Error(`TeaQL provider did not return exact count alias ${alias}`);
|
| 293 |
-
}
|
| 294 |
-
return value;
|
| 295 |
-
}
|
| 296 |
-
async *executeForStream(query: any, chunkSize = 1000): AsyncIterable<any[]> {
|
| 297 |
-
if (!Number.isInteger(chunkSize) || chunkSize <= 0) throw new Error("stream chunk size must be a positive integer");
|
| 298 |
-
const rows = await this.executeQuery(query);
|
| 299 |
-
for (let offset = 0; offset < rows.length; offset += chunkSize) {
|
| 300 |
-
yield rows.slice(offset, offset + chunkSize);
|
| 301 |
-
}
|
| 302 |
-
}
|
| 303 |
-
}
|
| 304 |
-
|
| 305 |
-
declare const require: any;
|
| 306 |
-
|
| 307 |
-
export function eq(a: any, b: any) { return {type: 'eq', field: a, value: b}; }
|
| 308 |
-
export function contain(a: any, b: any) { return {type: 'contain', field: a, value: b}; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/teaql-i18n.json
DELETED
|
@@ -1,128 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"schema": "teaql.i18n/v1",
|
| 3 |
-
"defaultLocale": "en",
|
| 4 |
-
"locales": {
|
| 5 |
-
"de": {
|
| 6 |
-
"vocabulary": {
|
| 7 |
-
},
|
| 8 |
-
"messages": {
|
| 9 |
-
}
|
| 10 |
-
},
|
| 11 |
-
"ko": {
|
| 12 |
-
"vocabulary": {
|
| 13 |
-
},
|
| 14 |
-
"messages": {
|
| 15 |
-
}
|
| 16 |
-
},
|
| 17 |
-
"pt": {
|
| 18 |
-
"vocabulary": {
|
| 19 |
-
},
|
| 20 |
-
"messages": {
|
| 21 |
-
}
|
| 22 |
-
},
|
| 23 |
-
"zh-TW": {
|
| 24 |
-
"vocabulary": {
|
| 25 |
-
},
|
| 26 |
-
"messages": {
|
| 27 |
-
}
|
| 28 |
-
},
|
| 29 |
-
"fil": {
|
| 30 |
-
"vocabulary": {
|
| 31 |
-
},
|
| 32 |
-
"messages": {
|
| 33 |
-
}
|
| 34 |
-
},
|
| 35 |
-
"en": {
|
| 36 |
-
"vocabulary": {
|
| 37 |
-
"property.platform.name": "Name",
|
| 38 |
-
"property.customerOrder.orderNumber": "Order Number",
|
| 39 |
-
"property.orderItem.id": "Id",
|
| 40 |
-
"entity.orderItem": "Order Item",
|
| 41 |
-
"property.orderItem.customerOrder": "Customer Order",
|
| 42 |
-
"property.orderStatus.version": "Version",
|
| 43 |
-
"property.orderItem.unitPrice": "Unit Price",
|
| 44 |
-
"property.orderItem.productName": "Product Name",
|
| 45 |
-
"property.orderStatus.code": "Code",
|
| 46 |
-
"property.customerOrder.orderDate": "Order Date",
|
| 47 |
-
"entity.customerOrder": "Customer Order",
|
| 48 |
-
"property.orderStatus.displayOrder": "Display Order",
|
| 49 |
-
"entity.customer": "Customer",
|
| 50 |
-
"property.customerOrder.id": "Id",
|
| 51 |
-
"property.orderStatus.color": "Color",
|
| 52 |
-
"property.customerOrder.totalAmount": "Total Amount",
|
| 53 |
-
"property.customerOrder.version": "Version",
|
| 54 |
-
"entity.platform": "Platform",
|
| 55 |
-
"property.platform.id": "Id",
|
| 56 |
-
"property.customer.version": "Version",
|
| 57 |
-
"property.orderStatus.id": "Id",
|
| 58 |
-
"property.customer.id": "Id",
|
| 59 |
-
"property.customer.platform": "Platform",
|
| 60 |
-
"entity.orderStatus": "Order Status",
|
| 61 |
-
"property.customerOrder.customer": "Customer",
|
| 62 |
-
"property.customer.name": "Name",
|
| 63 |
-
"property.orderItem.version": "Version",
|
| 64 |
-
"property.orderStatus.platform": "Platform",
|
| 65 |
-
"property.orderStatus.name": "Name",
|
| 66 |
-
"property.platform.version": "Version",
|
| 67 |
-
"property.customerOrder.status": "Status",
|
| 68 |
-
"property.orderItem.quantity": "Quantity"
|
| 69 |
-
},
|
| 70 |
-
"messages": {
|
| 71 |
-
}
|
| 72 |
-
},
|
| 73 |
-
"fr": {
|
| 74 |
-
"vocabulary": {
|
| 75 |
-
},
|
| 76 |
-
"messages": {
|
| 77 |
-
}
|
| 78 |
-
},
|
| 79 |
-
"zh-CN": {
|
| 80 |
-
"vocabulary": {
|
| 81 |
-
},
|
| 82 |
-
"messages": {
|
| 83 |
-
}
|
| 84 |
-
},
|
| 85 |
-
"es": {
|
| 86 |
-
"vocabulary": {
|
| 87 |
-
},
|
| 88 |
-
"messages": {
|
| 89 |
-
}
|
| 90 |
-
},
|
| 91 |
-
"ar": {
|
| 92 |
-
"vocabulary": {
|
| 93 |
-
},
|
| 94 |
-
"messages": {
|
| 95 |
-
}
|
| 96 |
-
},
|
| 97 |
-
"vi": {
|
| 98 |
-
"vocabulary": {
|
| 99 |
-
},
|
| 100 |
-
"messages": {
|
| 101 |
-
}
|
| 102 |
-
},
|
| 103 |
-
"th": {
|
| 104 |
-
"vocabulary": {
|
| 105 |
-
},
|
| 106 |
-
"messages": {
|
| 107 |
-
}
|
| 108 |
-
},
|
| 109 |
-
"uk": {
|
| 110 |
-
"vocabulary": {
|
| 111 |
-
},
|
| 112 |
-
"messages": {
|
| 113 |
-
}
|
| 114 |
-
},
|
| 115 |
-
"ja": {
|
| 116 |
-
"vocabulary": {
|
| 117 |
-
},
|
| 118 |
-
"messages": {
|
| 119 |
-
}
|
| 120 |
-
},
|
| 121 |
-
"id": {
|
| 122 |
-
"vocabulary": {
|
| 123 |
-
},
|
| 124 |
-
"messages": {
|
| 125 |
-
}
|
| 126 |
-
}
|
| 127 |
-
}
|
| 128 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/orders-lib/tsconfig.json
DELETED
|
@@ -1,12 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"compilerOptions": {
|
| 3 |
-
"target": "es2022",
|
| 4 |
-
"module": "commonjs",
|
| 5 |
-
"strict": true,
|
| 6 |
-
"esModuleInterop": true,
|
| 7 |
-
"skipLibCheck": true,
|
| 8 |
-
"forceConsistentCasingInFileNames": true,
|
| 9 |
-
"declaration": true
|
| 10 |
-
},
|
| 11 |
-
"include": ["src/**/*", "*.d.ts"]
|
| 12 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/package-lock.json
DELETED
|
@@ -1,1624 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"name": "teaql-browser-sqlite-example",
|
| 3 |
-
"version": "1.0.0",
|
| 4 |
-
"lockfileVersion": 3,
|
| 5 |
-
"requires": true,
|
| 6 |
-
"packages": {
|
| 7 |
-
"": {
|
| 8 |
-
"name": "teaql-browser-sqlite-example",
|
| 9 |
-
"version": "1.0.0",
|
| 10 |
-
"dependencies": {
|
| 11 |
-
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
| 12 |
-
"teaql-ts": "file:vendor/teaql-teaql-0.3.0.tgz"
|
| 13 |
-
},
|
| 14 |
-
"devDependencies": {
|
| 15 |
-
"puppeteer-core": "25.10.0",
|
| 16 |
-
"typescript": "5.9.2",
|
| 17 |
-
"vite": "^7.3.6"
|
| 18 |
-
}
|
| 19 |
-
},
|
| 20 |
-
"node_modules/@esbuild/aix-ppc64": {
|
| 21 |
-
"version": "0.28.2",
|
| 22 |
-
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
|
| 23 |
-
"integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
|
| 24 |
-
"cpu": [
|
| 25 |
-
"ppc64"
|
| 26 |
-
],
|
| 27 |
-
"dev": true,
|
| 28 |
-
"license": "MIT",
|
| 29 |
-
"optional": true,
|
| 30 |
-
"os": [
|
| 31 |
-
"aix"
|
| 32 |
-
],
|
| 33 |
-
"engines": {
|
| 34 |
-
"node": ">=18"
|
| 35 |
-
}
|
| 36 |
-
},
|
| 37 |
-
"node_modules/@esbuild/android-arm": {
|
| 38 |
-
"version": "0.28.2",
|
| 39 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
|
| 40 |
-
"integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
|
| 41 |
-
"cpu": [
|
| 42 |
-
"arm"
|
| 43 |
-
],
|
| 44 |
-
"dev": true,
|
| 45 |
-
"license": "MIT",
|
| 46 |
-
"optional": true,
|
| 47 |
-
"os": [
|
| 48 |
-
"android"
|
| 49 |
-
],
|
| 50 |
-
"engines": {
|
| 51 |
-
"node": ">=18"
|
| 52 |
-
}
|
| 53 |
-
},
|
| 54 |
-
"node_modules/@esbuild/android-arm64": {
|
| 55 |
-
"version": "0.28.2",
|
| 56 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
|
| 57 |
-
"integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
|
| 58 |
-
"cpu": [
|
| 59 |
-
"arm64"
|
| 60 |
-
],
|
| 61 |
-
"dev": true,
|
| 62 |
-
"license": "MIT",
|
| 63 |
-
"optional": true,
|
| 64 |
-
"os": [
|
| 65 |
-
"android"
|
| 66 |
-
],
|
| 67 |
-
"engines": {
|
| 68 |
-
"node": ">=18"
|
| 69 |
-
}
|
| 70 |
-
},
|
| 71 |
-
"node_modules/@esbuild/android-x64": {
|
| 72 |
-
"version": "0.28.2",
|
| 73 |
-
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
|
| 74 |
-
"integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
|
| 75 |
-
"cpu": [
|
| 76 |
-
"x64"
|
| 77 |
-
],
|
| 78 |
-
"dev": true,
|
| 79 |
-
"license": "MIT",
|
| 80 |
-
"optional": true,
|
| 81 |
-
"os": [
|
| 82 |
-
"android"
|
| 83 |
-
],
|
| 84 |
-
"engines": {
|
| 85 |
-
"node": ">=18"
|
| 86 |
-
}
|
| 87 |
-
},
|
| 88 |
-
"node_modules/@esbuild/darwin-arm64": {
|
| 89 |
-
"version": "0.28.2",
|
| 90 |
-
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
|
| 91 |
-
"integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
|
| 92 |
-
"cpu": [
|
| 93 |
-
"arm64"
|
| 94 |
-
],
|
| 95 |
-
"dev": true,
|
| 96 |
-
"license": "MIT",
|
| 97 |
-
"optional": true,
|
| 98 |
-
"os": [
|
| 99 |
-
"darwin"
|
| 100 |
-
],
|
| 101 |
-
"engines": {
|
| 102 |
-
"node": ">=18"
|
| 103 |
-
}
|
| 104 |
-
},
|
| 105 |
-
"node_modules/@esbuild/darwin-x64": {
|
| 106 |
-
"version": "0.28.2",
|
| 107 |
-
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
|
| 108 |
-
"integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
|
| 109 |
-
"cpu": [
|
| 110 |
-
"x64"
|
| 111 |
-
],
|
| 112 |
-
"dev": true,
|
| 113 |
-
"license": "MIT",
|
| 114 |
-
"optional": true,
|
| 115 |
-
"os": [
|
| 116 |
-
"darwin"
|
| 117 |
-
],
|
| 118 |
-
"engines": {
|
| 119 |
-
"node": ">=18"
|
| 120 |
-
}
|
| 121 |
-
},
|
| 122 |
-
"node_modules/@esbuild/freebsd-arm64": {
|
| 123 |
-
"version": "0.28.2",
|
| 124 |
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
|
| 125 |
-
"integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
|
| 126 |
-
"cpu": [
|
| 127 |
-
"arm64"
|
| 128 |
-
],
|
| 129 |
-
"dev": true,
|
| 130 |
-
"license": "MIT",
|
| 131 |
-
"optional": true,
|
| 132 |
-
"os": [
|
| 133 |
-
"freebsd"
|
| 134 |
-
],
|
| 135 |
-
"engines": {
|
| 136 |
-
"node": ">=18"
|
| 137 |
-
}
|
| 138 |
-
},
|
| 139 |
-
"node_modules/@esbuild/freebsd-x64": {
|
| 140 |
-
"version": "0.28.2",
|
| 141 |
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
|
| 142 |
-
"integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
|
| 143 |
-
"cpu": [
|
| 144 |
-
"x64"
|
| 145 |
-
],
|
| 146 |
-
"dev": true,
|
| 147 |
-
"license": "MIT",
|
| 148 |
-
"optional": true,
|
| 149 |
-
"os": [
|
| 150 |
-
"freebsd"
|
| 151 |
-
],
|
| 152 |
-
"engines": {
|
| 153 |
-
"node": ">=18"
|
| 154 |
-
}
|
| 155 |
-
},
|
| 156 |
-
"node_modules/@esbuild/linux-arm": {
|
| 157 |
-
"version": "0.28.2",
|
| 158 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
|
| 159 |
-
"integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
|
| 160 |
-
"cpu": [
|
| 161 |
-
"arm"
|
| 162 |
-
],
|
| 163 |
-
"dev": true,
|
| 164 |
-
"license": "MIT",
|
| 165 |
-
"optional": true,
|
| 166 |
-
"os": [
|
| 167 |
-
"linux"
|
| 168 |
-
],
|
| 169 |
-
"engines": {
|
| 170 |
-
"node": ">=18"
|
| 171 |
-
}
|
| 172 |
-
},
|
| 173 |
-
"node_modules/@esbuild/linux-arm64": {
|
| 174 |
-
"version": "0.28.2",
|
| 175 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
|
| 176 |
-
"integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
|
| 177 |
-
"cpu": [
|
| 178 |
-
"arm64"
|
| 179 |
-
],
|
| 180 |
-
"dev": true,
|
| 181 |
-
"license": "MIT",
|
| 182 |
-
"optional": true,
|
| 183 |
-
"os": [
|
| 184 |
-
"linux"
|
| 185 |
-
],
|
| 186 |
-
"engines": {
|
| 187 |
-
"node": ">=18"
|
| 188 |
-
}
|
| 189 |
-
},
|
| 190 |
-
"node_modules/@esbuild/linux-ia32": {
|
| 191 |
-
"version": "0.28.2",
|
| 192 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
|
| 193 |
-
"integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
|
| 194 |
-
"cpu": [
|
| 195 |
-
"ia32"
|
| 196 |
-
],
|
| 197 |
-
"dev": true,
|
| 198 |
-
"license": "MIT",
|
| 199 |
-
"optional": true,
|
| 200 |
-
"os": [
|
| 201 |
-
"linux"
|
| 202 |
-
],
|
| 203 |
-
"engines": {
|
| 204 |
-
"node": ">=18"
|
| 205 |
-
}
|
| 206 |
-
},
|
| 207 |
-
"node_modules/@esbuild/linux-loong64": {
|
| 208 |
-
"version": "0.28.2",
|
| 209 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
|
| 210 |
-
"integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
|
| 211 |
-
"cpu": [
|
| 212 |
-
"loong64"
|
| 213 |
-
],
|
| 214 |
-
"dev": true,
|
| 215 |
-
"license": "MIT",
|
| 216 |
-
"optional": true,
|
| 217 |
-
"os": [
|
| 218 |
-
"linux"
|
| 219 |
-
],
|
| 220 |
-
"engines": {
|
| 221 |
-
"node": ">=18"
|
| 222 |
-
}
|
| 223 |
-
},
|
| 224 |
-
"node_modules/@esbuild/linux-mips64el": {
|
| 225 |
-
"version": "0.28.2",
|
| 226 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
|
| 227 |
-
"integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
|
| 228 |
-
"cpu": [
|
| 229 |
-
"mips64el"
|
| 230 |
-
],
|
| 231 |
-
"dev": true,
|
| 232 |
-
"license": "MIT",
|
| 233 |
-
"optional": true,
|
| 234 |
-
"os": [
|
| 235 |
-
"linux"
|
| 236 |
-
],
|
| 237 |
-
"engines": {
|
| 238 |
-
"node": ">=18"
|
| 239 |
-
}
|
| 240 |
-
},
|
| 241 |
-
"node_modules/@esbuild/linux-ppc64": {
|
| 242 |
-
"version": "0.28.2",
|
| 243 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
|
| 244 |
-
"integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
|
| 245 |
-
"cpu": [
|
| 246 |
-
"ppc64"
|
| 247 |
-
],
|
| 248 |
-
"dev": true,
|
| 249 |
-
"license": "MIT",
|
| 250 |
-
"optional": true,
|
| 251 |
-
"os": [
|
| 252 |
-
"linux"
|
| 253 |
-
],
|
| 254 |
-
"engines": {
|
| 255 |
-
"node": ">=18"
|
| 256 |
-
}
|
| 257 |
-
},
|
| 258 |
-
"node_modules/@esbuild/linux-riscv64": {
|
| 259 |
-
"version": "0.28.2",
|
| 260 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
|
| 261 |
-
"integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
|
| 262 |
-
"cpu": [
|
| 263 |
-
"riscv64"
|
| 264 |
-
],
|
| 265 |
-
"dev": true,
|
| 266 |
-
"license": "MIT",
|
| 267 |
-
"optional": true,
|
| 268 |
-
"os": [
|
| 269 |
-
"linux"
|
| 270 |
-
],
|
| 271 |
-
"engines": {
|
| 272 |
-
"node": ">=18"
|
| 273 |
-
}
|
| 274 |
-
},
|
| 275 |
-
"node_modules/@esbuild/linux-s390x": {
|
| 276 |
-
"version": "0.28.2",
|
| 277 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
|
| 278 |
-
"integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
|
| 279 |
-
"cpu": [
|
| 280 |
-
"s390x"
|
| 281 |
-
],
|
| 282 |
-
"dev": true,
|
| 283 |
-
"license": "MIT",
|
| 284 |
-
"optional": true,
|
| 285 |
-
"os": [
|
| 286 |
-
"linux"
|
| 287 |
-
],
|
| 288 |
-
"engines": {
|
| 289 |
-
"node": ">=18"
|
| 290 |
-
}
|
| 291 |
-
},
|
| 292 |
-
"node_modules/@esbuild/linux-x64": {
|
| 293 |
-
"version": "0.28.2",
|
| 294 |
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
|
| 295 |
-
"integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
|
| 296 |
-
"cpu": [
|
| 297 |
-
"x64"
|
| 298 |
-
],
|
| 299 |
-
"dev": true,
|
| 300 |
-
"license": "MIT",
|
| 301 |
-
"optional": true,
|
| 302 |
-
"os": [
|
| 303 |
-
"linux"
|
| 304 |
-
],
|
| 305 |
-
"engines": {
|
| 306 |
-
"node": ">=18"
|
| 307 |
-
}
|
| 308 |
-
},
|
| 309 |
-
"node_modules/@esbuild/netbsd-arm64": {
|
| 310 |
-
"version": "0.28.2",
|
| 311 |
-
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
|
| 312 |
-
"integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
|
| 313 |
-
"cpu": [
|
| 314 |
-
"arm64"
|
| 315 |
-
],
|
| 316 |
-
"dev": true,
|
| 317 |
-
"license": "MIT",
|
| 318 |
-
"optional": true,
|
| 319 |
-
"os": [
|
| 320 |
-
"netbsd"
|
| 321 |
-
],
|
| 322 |
-
"engines": {
|
| 323 |
-
"node": ">=18"
|
| 324 |
-
}
|
| 325 |
-
},
|
| 326 |
-
"node_modules/@esbuild/netbsd-x64": {
|
| 327 |
-
"version": "0.28.2",
|
| 328 |
-
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
|
| 329 |
-
"integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
|
| 330 |
-
"cpu": [
|
| 331 |
-
"x64"
|
| 332 |
-
],
|
| 333 |
-
"dev": true,
|
| 334 |
-
"license": "MIT",
|
| 335 |
-
"optional": true,
|
| 336 |
-
"os": [
|
| 337 |
-
"netbsd"
|
| 338 |
-
],
|
| 339 |
-
"engines": {
|
| 340 |
-
"node": ">=18"
|
| 341 |
-
}
|
| 342 |
-
},
|
| 343 |
-
"node_modules/@esbuild/openbsd-arm64": {
|
| 344 |
-
"version": "0.28.2",
|
| 345 |
-
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
|
| 346 |
-
"integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
|
| 347 |
-
"cpu": [
|
| 348 |
-
"arm64"
|
| 349 |
-
],
|
| 350 |
-
"dev": true,
|
| 351 |
-
"license": "MIT",
|
| 352 |
-
"optional": true,
|
| 353 |
-
"os": [
|
| 354 |
-
"openbsd"
|
| 355 |
-
],
|
| 356 |
-
"engines": {
|
| 357 |
-
"node": ">=18"
|
| 358 |
-
}
|
| 359 |
-
},
|
| 360 |
-
"node_modules/@esbuild/openbsd-x64": {
|
| 361 |
-
"version": "0.28.2",
|
| 362 |
-
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
|
| 363 |
-
"integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
|
| 364 |
-
"cpu": [
|
| 365 |
-
"x64"
|
| 366 |
-
],
|
| 367 |
-
"dev": true,
|
| 368 |
-
"license": "MIT",
|
| 369 |
-
"optional": true,
|
| 370 |
-
"os": [
|
| 371 |
-
"openbsd"
|
| 372 |
-
],
|
| 373 |
-
"engines": {
|
| 374 |
-
"node": ">=18"
|
| 375 |
-
}
|
| 376 |
-
},
|
| 377 |
-
"node_modules/@esbuild/openharmony-arm64": {
|
| 378 |
-
"version": "0.28.2",
|
| 379 |
-
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
|
| 380 |
-
"integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
|
| 381 |
-
"cpu": [
|
| 382 |
-
"arm64"
|
| 383 |
-
],
|
| 384 |
-
"dev": true,
|
| 385 |
-
"license": "MIT",
|
| 386 |
-
"optional": true,
|
| 387 |
-
"os": [
|
| 388 |
-
"openharmony"
|
| 389 |
-
],
|
| 390 |
-
"engines": {
|
| 391 |
-
"node": ">=18"
|
| 392 |
-
}
|
| 393 |
-
},
|
| 394 |
-
"node_modules/@esbuild/sunos-x64": {
|
| 395 |
-
"version": "0.28.2",
|
| 396 |
-
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
|
| 397 |
-
"integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
|
| 398 |
-
"cpu": [
|
| 399 |
-
"x64"
|
| 400 |
-
],
|
| 401 |
-
"dev": true,
|
| 402 |
-
"license": "MIT",
|
| 403 |
-
"optional": true,
|
| 404 |
-
"os": [
|
| 405 |
-
"sunos"
|
| 406 |
-
],
|
| 407 |
-
"engines": {
|
| 408 |
-
"node": ">=18"
|
| 409 |
-
}
|
| 410 |
-
},
|
| 411 |
-
"node_modules/@esbuild/win32-arm64": {
|
| 412 |
-
"version": "0.28.2",
|
| 413 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
|
| 414 |
-
"integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
|
| 415 |
-
"cpu": [
|
| 416 |
-
"arm64"
|
| 417 |
-
],
|
| 418 |
-
"dev": true,
|
| 419 |
-
"license": "MIT",
|
| 420 |
-
"optional": true,
|
| 421 |
-
"os": [
|
| 422 |
-
"win32"
|
| 423 |
-
],
|
| 424 |
-
"engines": {
|
| 425 |
-
"node": ">=18"
|
| 426 |
-
}
|
| 427 |
-
},
|
| 428 |
-
"node_modules/@esbuild/win32-ia32": {
|
| 429 |
-
"version": "0.28.2",
|
| 430 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
|
| 431 |
-
"integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
|
| 432 |
-
"cpu": [
|
| 433 |
-
"ia32"
|
| 434 |
-
],
|
| 435 |
-
"dev": true,
|
| 436 |
-
"license": "MIT",
|
| 437 |
-
"optional": true,
|
| 438 |
-
"os": [
|
| 439 |
-
"win32"
|
| 440 |
-
],
|
| 441 |
-
"engines": {
|
| 442 |
-
"node": ">=18"
|
| 443 |
-
}
|
| 444 |
-
},
|
| 445 |
-
"node_modules/@esbuild/win32-x64": {
|
| 446 |
-
"version": "0.28.2",
|
| 447 |
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
|
| 448 |
-
"integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
|
| 449 |
-
"cpu": [
|
| 450 |
-
"x64"
|
| 451 |
-
],
|
| 452 |
-
"dev": true,
|
| 453 |
-
"license": "MIT",
|
| 454 |
-
"optional": true,
|
| 455 |
-
"os": [
|
| 456 |
-
"win32"
|
| 457 |
-
],
|
| 458 |
-
"engines": {
|
| 459 |
-
"node": ">=18"
|
| 460 |
-
}
|
| 461 |
-
},
|
| 462 |
-
"node_modules/@napi-rs/lzma-linux-x64-gnu": {
|
| 463 |
-
"version": "1.5.1",
|
| 464 |
-
"resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
|
| 465 |
-
"integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
|
| 466 |
-
"cpu": [
|
| 467 |
-
"x64"
|
| 468 |
-
],
|
| 469 |
-
"dev": true,
|
| 470 |
-
"libc": [
|
| 471 |
-
"glibc"
|
| 472 |
-
],
|
| 473 |
-
"license": "MIT",
|
| 474 |
-
"optional": true,
|
| 475 |
-
"os": [
|
| 476 |
-
"linux"
|
| 477 |
-
],
|
| 478 |
-
"engines": {
|
| 479 |
-
"node": "^22.20 || ^24.12 || >=25"
|
| 480 |
-
}
|
| 481 |
-
},
|
| 482 |
-
"node_modules/@puppeteer/browsers": {
|
| 483 |
-
"version": "3.2.2",
|
| 484 |
-
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.2.tgz",
|
| 485 |
-
"integrity": "sha512-q2BU4YfO9h/Wt7IcWPcggpOOqLk2Tbs1hDwolvKZrweRjy751OJBKMN9zO5bfD0pzU7X/tvKw/exQds4pM/LOg==",
|
| 486 |
-
"dev": true,
|
| 487 |
-
"license": "Apache-2.0",
|
| 488 |
-
"dependencies": {
|
| 489 |
-
"modern-tar": "^0.8.4",
|
| 490 |
-
"yargs": "^18.0.0"
|
| 491 |
-
},
|
| 492 |
-
"bin": {
|
| 493 |
-
"browsers": "lib/main-cli.js"
|
| 494 |
-
},
|
| 495 |
-
"engines": {
|
| 496 |
-
"node": ">=22.12.0"
|
| 497 |
-
},
|
| 498 |
-
"peerDependencies": {
|
| 499 |
-
"proxy-agent": ">=8.0.1",
|
| 500 |
-
"yauzl": "^2.10.0 || ^3.4.0"
|
| 501 |
-
},
|
| 502 |
-
"peerDependenciesMeta": {
|
| 503 |
-
"proxy-agent": {
|
| 504 |
-
"optional": true
|
| 505 |
-
},
|
| 506 |
-
"yauzl": {
|
| 507 |
-
"optional": true
|
| 508 |
-
}
|
| 509 |
-
}
|
| 510 |
-
},
|
| 511 |
-
"node_modules/@rollup/rollup-android-arm-eabi": {
|
| 512 |
-
"version": "4.63.1",
|
| 513 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.63.1.tgz",
|
| 514 |
-
"integrity": "sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ==",
|
| 515 |
-
"cpu": [
|
| 516 |
-
"arm"
|
| 517 |
-
],
|
| 518 |
-
"dev": true,
|
| 519 |
-
"license": "MIT",
|
| 520 |
-
"optional": true,
|
| 521 |
-
"os": [
|
| 522 |
-
"android"
|
| 523 |
-
]
|
| 524 |
-
},
|
| 525 |
-
"node_modules/@rollup/rollup-android-arm64": {
|
| 526 |
-
"version": "4.63.1",
|
| 527 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.63.1.tgz",
|
| 528 |
-
"integrity": "sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ==",
|
| 529 |
-
"cpu": [
|
| 530 |
-
"arm64"
|
| 531 |
-
],
|
| 532 |
-
"dev": true,
|
| 533 |
-
"license": "MIT",
|
| 534 |
-
"optional": true,
|
| 535 |
-
"os": [
|
| 536 |
-
"android"
|
| 537 |
-
]
|
| 538 |
-
},
|
| 539 |
-
"node_modules/@rollup/rollup-darwin-arm64": {
|
| 540 |
-
"version": "4.63.1",
|
| 541 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.63.1.tgz",
|
| 542 |
-
"integrity": "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q==",
|
| 543 |
-
"cpu": [
|
| 544 |
-
"arm64"
|
| 545 |
-
],
|
| 546 |
-
"dev": true,
|
| 547 |
-
"license": "MIT",
|
| 548 |
-
"optional": true,
|
| 549 |
-
"os": [
|
| 550 |
-
"darwin"
|
| 551 |
-
]
|
| 552 |
-
},
|
| 553 |
-
"node_modules/@rollup/rollup-darwin-x64": {
|
| 554 |
-
"version": "4.63.1",
|
| 555 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.63.1.tgz",
|
| 556 |
-
"integrity": "sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg==",
|
| 557 |
-
"cpu": [
|
| 558 |
-
"x64"
|
| 559 |
-
],
|
| 560 |
-
"dev": true,
|
| 561 |
-
"license": "MIT",
|
| 562 |
-
"optional": true,
|
| 563 |
-
"os": [
|
| 564 |
-
"darwin"
|
| 565 |
-
]
|
| 566 |
-
},
|
| 567 |
-
"node_modules/@rollup/rollup-freebsd-arm64": {
|
| 568 |
-
"version": "4.63.1",
|
| 569 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.63.1.tgz",
|
| 570 |
-
"integrity": "sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw==",
|
| 571 |
-
"cpu": [
|
| 572 |
-
"arm64"
|
| 573 |
-
],
|
| 574 |
-
"dev": true,
|
| 575 |
-
"license": "MIT",
|
| 576 |
-
"optional": true,
|
| 577 |
-
"os": [
|
| 578 |
-
"freebsd"
|
| 579 |
-
]
|
| 580 |
-
},
|
| 581 |
-
"node_modules/@rollup/rollup-freebsd-x64": {
|
| 582 |
-
"version": "4.63.1",
|
| 583 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.63.1.tgz",
|
| 584 |
-
"integrity": "sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q==",
|
| 585 |
-
"cpu": [
|
| 586 |
-
"x64"
|
| 587 |
-
],
|
| 588 |
-
"dev": true,
|
| 589 |
-
"license": "MIT",
|
| 590 |
-
"optional": true,
|
| 591 |
-
"os": [
|
| 592 |
-
"freebsd"
|
| 593 |
-
]
|
| 594 |
-
},
|
| 595 |
-
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
| 596 |
-
"version": "4.63.1",
|
| 597 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.63.1.tgz",
|
| 598 |
-
"integrity": "sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw==",
|
| 599 |
-
"cpu": [
|
| 600 |
-
"arm"
|
| 601 |
-
],
|
| 602 |
-
"dev": true,
|
| 603 |
-
"libc": [
|
| 604 |
-
"glibc"
|
| 605 |
-
],
|
| 606 |
-
"license": "MIT",
|
| 607 |
-
"optional": true,
|
| 608 |
-
"os": [
|
| 609 |
-
"linux"
|
| 610 |
-
]
|
| 611 |
-
},
|
| 612 |
-
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
| 613 |
-
"version": "4.63.1",
|
| 614 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.63.1.tgz",
|
| 615 |
-
"integrity": "sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw==",
|
| 616 |
-
"cpu": [
|
| 617 |
-
"arm"
|
| 618 |
-
],
|
| 619 |
-
"dev": true,
|
| 620 |
-
"libc": [
|
| 621 |
-
"musl"
|
| 622 |
-
],
|
| 623 |
-
"license": "MIT",
|
| 624 |
-
"optional": true,
|
| 625 |
-
"os": [
|
| 626 |
-
"linux"
|
| 627 |
-
]
|
| 628 |
-
},
|
| 629 |
-
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
| 630 |
-
"version": "4.63.1",
|
| 631 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.63.1.tgz",
|
| 632 |
-
"integrity": "sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg==",
|
| 633 |
-
"cpu": [
|
| 634 |
-
"arm64"
|
| 635 |
-
],
|
| 636 |
-
"dev": true,
|
| 637 |
-
"libc": [
|
| 638 |
-
"glibc"
|
| 639 |
-
],
|
| 640 |
-
"license": "MIT",
|
| 641 |
-
"optional": true,
|
| 642 |
-
"os": [
|
| 643 |
-
"linux"
|
| 644 |
-
]
|
| 645 |
-
},
|
| 646 |
-
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
| 647 |
-
"version": "4.63.1",
|
| 648 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.63.1.tgz",
|
| 649 |
-
"integrity": "sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw==",
|
| 650 |
-
"cpu": [
|
| 651 |
-
"arm64"
|
| 652 |
-
],
|
| 653 |
-
"dev": true,
|
| 654 |
-
"libc": [
|
| 655 |
-
"musl"
|
| 656 |
-
],
|
| 657 |
-
"license": "MIT",
|
| 658 |
-
"optional": true,
|
| 659 |
-
"os": [
|
| 660 |
-
"linux"
|
| 661 |
-
]
|
| 662 |
-
},
|
| 663 |
-
"node_modules/@rollup/rollup-linux-loong64-gnu": {
|
| 664 |
-
"version": "4.63.1",
|
| 665 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.63.1.tgz",
|
| 666 |
-
"integrity": "sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ==",
|
| 667 |
-
"cpu": [
|
| 668 |
-
"loong64"
|
| 669 |
-
],
|
| 670 |
-
"dev": true,
|
| 671 |
-
"libc": [
|
| 672 |
-
"glibc"
|
| 673 |
-
],
|
| 674 |
-
"license": "MIT",
|
| 675 |
-
"optional": true,
|
| 676 |
-
"os": [
|
| 677 |
-
"linux"
|
| 678 |
-
]
|
| 679 |
-
},
|
| 680 |
-
"node_modules/@rollup/rollup-linux-loong64-musl": {
|
| 681 |
-
"version": "4.63.1",
|
| 682 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.63.1.tgz",
|
| 683 |
-
"integrity": "sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA==",
|
| 684 |
-
"cpu": [
|
| 685 |
-
"loong64"
|
| 686 |
-
],
|
| 687 |
-
"dev": true,
|
| 688 |
-
"libc": [
|
| 689 |
-
"musl"
|
| 690 |
-
],
|
| 691 |
-
"license": "MIT",
|
| 692 |
-
"optional": true,
|
| 693 |
-
"os": [
|
| 694 |
-
"linux"
|
| 695 |
-
]
|
| 696 |
-
},
|
| 697 |
-
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
|
| 698 |
-
"version": "4.63.1",
|
| 699 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.63.1.tgz",
|
| 700 |
-
"integrity": "sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA==",
|
| 701 |
-
"cpu": [
|
| 702 |
-
"ppc64"
|
| 703 |
-
],
|
| 704 |
-
"dev": true,
|
| 705 |
-
"libc": [
|
| 706 |
-
"glibc"
|
| 707 |
-
],
|
| 708 |
-
"license": "MIT",
|
| 709 |
-
"optional": true,
|
| 710 |
-
"os": [
|
| 711 |
-
"linux"
|
| 712 |
-
]
|
| 713 |
-
},
|
| 714 |
-
"node_modules/@rollup/rollup-linux-ppc64-musl": {
|
| 715 |
-
"version": "4.63.1",
|
| 716 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.63.1.tgz",
|
| 717 |
-
"integrity": "sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA==",
|
| 718 |
-
"cpu": [
|
| 719 |
-
"ppc64"
|
| 720 |
-
],
|
| 721 |
-
"dev": true,
|
| 722 |
-
"libc": [
|
| 723 |
-
"musl"
|
| 724 |
-
],
|
| 725 |
-
"license": "MIT",
|
| 726 |
-
"optional": true,
|
| 727 |
-
"os": [
|
| 728 |
-
"linux"
|
| 729 |
-
]
|
| 730 |
-
},
|
| 731 |
-
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
| 732 |
-
"version": "4.63.1",
|
| 733 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.63.1.tgz",
|
| 734 |
-
"integrity": "sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w==",
|
| 735 |
-
"cpu": [
|
| 736 |
-
"riscv64"
|
| 737 |
-
],
|
| 738 |
-
"dev": true,
|
| 739 |
-
"libc": [
|
| 740 |
-
"glibc"
|
| 741 |
-
],
|
| 742 |
-
"license": "MIT",
|
| 743 |
-
"optional": true,
|
| 744 |
-
"os": [
|
| 745 |
-
"linux"
|
| 746 |
-
]
|
| 747 |
-
},
|
| 748 |
-
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
| 749 |
-
"version": "4.63.1",
|
| 750 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.63.1.tgz",
|
| 751 |
-
"integrity": "sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ==",
|
| 752 |
-
"cpu": [
|
| 753 |
-
"riscv64"
|
| 754 |
-
],
|
| 755 |
-
"dev": true,
|
| 756 |
-
"libc": [
|
| 757 |
-
"musl"
|
| 758 |
-
],
|
| 759 |
-
"license": "MIT",
|
| 760 |
-
"optional": true,
|
| 761 |
-
"os": [
|
| 762 |
-
"linux"
|
| 763 |
-
]
|
| 764 |
-
},
|
| 765 |
-
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
| 766 |
-
"version": "4.63.1",
|
| 767 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.63.1.tgz",
|
| 768 |
-
"integrity": "sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A==",
|
| 769 |
-
"cpu": [
|
| 770 |
-
"s390x"
|
| 771 |
-
],
|
| 772 |
-
"dev": true,
|
| 773 |
-
"libc": [
|
| 774 |
-
"glibc"
|
| 775 |
-
],
|
| 776 |
-
"license": "MIT",
|
| 777 |
-
"optional": true,
|
| 778 |
-
"os": [
|
| 779 |
-
"linux"
|
| 780 |
-
]
|
| 781 |
-
},
|
| 782 |
-
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
| 783 |
-
"version": "4.63.1",
|
| 784 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.63.1.tgz",
|
| 785 |
-
"integrity": "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w==",
|
| 786 |
-
"cpu": [
|
| 787 |
-
"x64"
|
| 788 |
-
],
|
| 789 |
-
"dev": true,
|
| 790 |
-
"libc": [
|
| 791 |
-
"glibc"
|
| 792 |
-
],
|
| 793 |
-
"license": "MIT",
|
| 794 |
-
"optional": true,
|
| 795 |
-
"os": [
|
| 796 |
-
"linux"
|
| 797 |
-
]
|
| 798 |
-
},
|
| 799 |
-
"node_modules/@rollup/rollup-linux-x64-musl": {
|
| 800 |
-
"version": "4.63.1",
|
| 801 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.63.1.tgz",
|
| 802 |
-
"integrity": "sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow==",
|
| 803 |
-
"cpu": [
|
| 804 |
-
"x64"
|
| 805 |
-
],
|
| 806 |
-
"dev": true,
|
| 807 |
-
"libc": [
|
| 808 |
-
"musl"
|
| 809 |
-
],
|
| 810 |
-
"license": "MIT",
|
| 811 |
-
"optional": true,
|
| 812 |
-
"os": [
|
| 813 |
-
"linux"
|
| 814 |
-
]
|
| 815 |
-
},
|
| 816 |
-
"node_modules/@rollup/rollup-openbsd-x64": {
|
| 817 |
-
"version": "4.63.1",
|
| 818 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.63.1.tgz",
|
| 819 |
-
"integrity": "sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA==",
|
| 820 |
-
"cpu": [
|
| 821 |
-
"x64"
|
| 822 |
-
],
|
| 823 |
-
"dev": true,
|
| 824 |
-
"license": "MIT",
|
| 825 |
-
"optional": true,
|
| 826 |
-
"os": [
|
| 827 |
-
"openbsd"
|
| 828 |
-
]
|
| 829 |
-
},
|
| 830 |
-
"node_modules/@rollup/rollup-openharmony-arm64": {
|
| 831 |
-
"version": "4.63.1",
|
| 832 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.63.1.tgz",
|
| 833 |
-
"integrity": "sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw==",
|
| 834 |
-
"cpu": [
|
| 835 |
-
"arm64"
|
| 836 |
-
],
|
| 837 |
-
"dev": true,
|
| 838 |
-
"license": "MIT",
|
| 839 |
-
"optional": true,
|
| 840 |
-
"os": [
|
| 841 |
-
"openharmony"
|
| 842 |
-
]
|
| 843 |
-
},
|
| 844 |
-
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
| 845 |
-
"version": "4.63.1",
|
| 846 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.63.1.tgz",
|
| 847 |
-
"integrity": "sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg==",
|
| 848 |
-
"cpu": [
|
| 849 |
-
"arm64"
|
| 850 |
-
],
|
| 851 |
-
"dev": true,
|
| 852 |
-
"license": "MIT",
|
| 853 |
-
"optional": true,
|
| 854 |
-
"os": [
|
| 855 |
-
"win32"
|
| 856 |
-
]
|
| 857 |
-
},
|
| 858 |
-
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
| 859 |
-
"version": "4.63.1",
|
| 860 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.63.1.tgz",
|
| 861 |
-
"integrity": "sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg==",
|
| 862 |
-
"cpu": [
|
| 863 |
-
"ia32"
|
| 864 |
-
],
|
| 865 |
-
"dev": true,
|
| 866 |
-
"license": "MIT",
|
| 867 |
-
"optional": true,
|
| 868 |
-
"os": [
|
| 869 |
-
"win32"
|
| 870 |
-
]
|
| 871 |
-
},
|
| 872 |
-
"node_modules/@rollup/rollup-win32-x64-gnu": {
|
| 873 |
-
"version": "4.63.1",
|
| 874 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.63.1.tgz",
|
| 875 |
-
"integrity": "sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg==",
|
| 876 |
-
"cpu": [
|
| 877 |
-
"x64"
|
| 878 |
-
],
|
| 879 |
-
"dev": true,
|
| 880 |
-
"license": "MIT",
|
| 881 |
-
"optional": true,
|
| 882 |
-
"os": [
|
| 883 |
-
"win32"
|
| 884 |
-
]
|
| 885 |
-
},
|
| 886 |
-
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
| 887 |
-
"version": "4.63.1",
|
| 888 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.63.1.tgz",
|
| 889 |
-
"integrity": "sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w==",
|
| 890 |
-
"cpu": [
|
| 891 |
-
"x64"
|
| 892 |
-
],
|
| 893 |
-
"dev": true,
|
| 894 |
-
"license": "MIT",
|
| 895 |
-
"optional": true,
|
| 896 |
-
"os": [
|
| 897 |
-
"win32"
|
| 898 |
-
]
|
| 899 |
-
},
|
| 900 |
-
"node_modules/@sqlite.org/sqlite-wasm": {
|
| 901 |
-
"version": "3.53.0-build1",
|
| 902 |
-
"resolved": "https://registry.npmjs.org/@sqlite.org/sqlite-wasm/-/sqlite-wasm-3.53.0-build1.tgz",
|
| 903 |
-
"integrity": "sha512-PfWPWN2n+/37doa8oh2/oUXk4OOsRYZsxc1W1sDXIGb/Pu5Yrb+f2eyYpgQMGITVX7HVgxhs9P18Rc6I97ym/g==",
|
| 904 |
-
"license": "Apache-2.0",
|
| 905 |
-
"workspaces": [
|
| 906 |
-
"demos/*"
|
| 907 |
-
],
|
| 908 |
-
"engines": {
|
| 909 |
-
"node": ">=22"
|
| 910 |
-
}
|
| 911 |
-
},
|
| 912 |
-
"node_modules/@types/estree": {
|
| 913 |
-
"version": "1.0.9",
|
| 914 |
-
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
|
| 915 |
-
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
|
| 916 |
-
"dev": true,
|
| 917 |
-
"license": "MIT"
|
| 918 |
-
},
|
| 919 |
-
"node_modules/ansi-regex": {
|
| 920 |
-
"version": "6.3.0",
|
| 921 |
-
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz",
|
| 922 |
-
"integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==",
|
| 923 |
-
"dev": true,
|
| 924 |
-
"license": "MIT",
|
| 925 |
-
"engines": {
|
| 926 |
-
"node": ">=12"
|
| 927 |
-
},
|
| 928 |
-
"funding": {
|
| 929 |
-
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
| 930 |
-
}
|
| 931 |
-
},
|
| 932 |
-
"node_modules/ansi-styles": {
|
| 933 |
-
"version": "6.2.3",
|
| 934 |
-
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
|
| 935 |
-
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
|
| 936 |
-
"dev": true,
|
| 937 |
-
"license": "MIT",
|
| 938 |
-
"engines": {
|
| 939 |
-
"node": ">=12"
|
| 940 |
-
},
|
| 941 |
-
"funding": {
|
| 942 |
-
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
| 943 |
-
}
|
| 944 |
-
},
|
| 945 |
-
"node_modules/chromium-bidi": {
|
| 946 |
-
"version": "17.0.2",
|
| 947 |
-
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-17.0.2.tgz",
|
| 948 |
-
"integrity": "sha512-5v9GQFhTktFvotn/OFNJBmKLKRAb6n9r0bVCwf7sHgWc3/JryK0bj1nn93L3pHFrfgcsu6Be6EWsDi+1XHTGDg==",
|
| 949 |
-
"dev": true,
|
| 950 |
-
"license": "Apache-2.0",
|
| 951 |
-
"dependencies": {
|
| 952 |
-
"mitt": "^3.0.1",
|
| 953 |
-
"zod": "^3.24.1"
|
| 954 |
-
},
|
| 955 |
-
"engines": {
|
| 956 |
-
"node": ">=20.19.0 <22.0.0 || >=22.12.0"
|
| 957 |
-
},
|
| 958 |
-
"peerDependencies": {
|
| 959 |
-
"devtools-protocol": "*"
|
| 960 |
-
}
|
| 961 |
-
},
|
| 962 |
-
"node_modules/cliui": {
|
| 963 |
-
"version": "9.0.1",
|
| 964 |
-
"resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
|
| 965 |
-
"integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
|
| 966 |
-
"dev": true,
|
| 967 |
-
"license": "ISC",
|
| 968 |
-
"dependencies": {
|
| 969 |
-
"string-width": "^7.2.0",
|
| 970 |
-
"strip-ansi": "^7.1.0",
|
| 971 |
-
"wrap-ansi": "^9.0.0"
|
| 972 |
-
},
|
| 973 |
-
"engines": {
|
| 974 |
-
"node": ">=20"
|
| 975 |
-
}
|
| 976 |
-
},
|
| 977 |
-
"node_modules/cliui/node_modules/string-width": {
|
| 978 |
-
"version": "7.2.0",
|
| 979 |
-
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
| 980 |
-
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
| 981 |
-
"dev": true,
|
| 982 |
-
"license": "MIT",
|
| 983 |
-
"dependencies": {
|
| 984 |
-
"emoji-regex": "^10.3.0",
|
| 985 |
-
"get-east-asian-width": "^1.0.0",
|
| 986 |
-
"strip-ansi": "^7.1.0"
|
| 987 |
-
},
|
| 988 |
-
"engines": {
|
| 989 |
-
"node": ">=18"
|
| 990 |
-
},
|
| 991 |
-
"funding": {
|
| 992 |
-
"url": "https://github.com/sponsors/sindresorhus"
|
| 993 |
-
}
|
| 994 |
-
},
|
| 995 |
-
"node_modules/devtools-protocol": {
|
| 996 |
-
"version": "0.0.1666840",
|
| 997 |
-
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1666840.tgz",
|
| 998 |
-
"integrity": "sha512-gCcO42XCHKEs7Ag0S7aGYsnJ7hlgrO3qderYqeiY0Eqk+0GFfuvT13IA0hHreJTa2KCdDVyGMeOhdMNmrrTjVg==",
|
| 999 |
-
"dev": true,
|
| 1000 |
-
"license": "BSD-3-Clause"
|
| 1001 |
-
},
|
| 1002 |
-
"node_modules/emoji-regex": {
|
| 1003 |
-
"version": "10.6.0",
|
| 1004 |
-
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
|
| 1005 |
-
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
|
| 1006 |
-
"dev": true,
|
| 1007 |
-
"license": "MIT"
|
| 1008 |
-
},
|
| 1009 |
-
"node_modules/esbuild": {
|
| 1010 |
-
"version": "0.28.2",
|
| 1011 |
-
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
|
| 1012 |
-
"integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
|
| 1013 |
-
"dev": true,
|
| 1014 |
-
"hasInstallScript": true,
|
| 1015 |
-
"license": "MIT",
|
| 1016 |
-
"bin": {
|
| 1017 |
-
"esbuild": "bin/esbuild"
|
| 1018 |
-
},
|
| 1019 |
-
"engines": {
|
| 1020 |
-
"node": ">=18"
|
| 1021 |
-
},
|
| 1022 |
-
"optionalDependencies": {
|
| 1023 |
-
"@esbuild/aix-ppc64": "0.28.2",
|
| 1024 |
-
"@esbuild/android-arm": "0.28.2",
|
| 1025 |
-
"@esbuild/android-arm64": "0.28.2",
|
| 1026 |
-
"@esbuild/android-x64": "0.28.2",
|
| 1027 |
-
"@esbuild/darwin-arm64": "0.28.2",
|
| 1028 |
-
"@esbuild/darwin-x64": "0.28.2",
|
| 1029 |
-
"@esbuild/freebsd-arm64": "0.28.2",
|
| 1030 |
-
"@esbuild/freebsd-x64": "0.28.2",
|
| 1031 |
-
"@esbuild/linux-arm": "0.28.2",
|
| 1032 |
-
"@esbuild/linux-arm64": "0.28.2",
|
| 1033 |
-
"@esbuild/linux-ia32": "0.28.2",
|
| 1034 |
-
"@esbuild/linux-loong64": "0.28.2",
|
| 1035 |
-
"@esbuild/linux-mips64el": "0.28.2",
|
| 1036 |
-
"@esbuild/linux-ppc64": "0.28.2",
|
| 1037 |
-
"@esbuild/linux-riscv64": "0.28.2",
|
| 1038 |
-
"@esbuild/linux-s390x": "0.28.2",
|
| 1039 |
-
"@esbuild/linux-x64": "0.28.2",
|
| 1040 |
-
"@esbuild/netbsd-arm64": "0.28.2",
|
| 1041 |
-
"@esbuild/netbsd-x64": "0.28.2",
|
| 1042 |
-
"@esbuild/openbsd-arm64": "0.28.2",
|
| 1043 |
-
"@esbuild/openbsd-x64": "0.28.2",
|
| 1044 |
-
"@esbuild/openharmony-arm64": "0.28.2",
|
| 1045 |
-
"@esbuild/sunos-x64": "0.28.2",
|
| 1046 |
-
"@esbuild/win32-arm64": "0.28.2",
|
| 1047 |
-
"@esbuild/win32-ia32": "0.28.2",
|
| 1048 |
-
"@esbuild/win32-x64": "0.28.2"
|
| 1049 |
-
}
|
| 1050 |
-
},
|
| 1051 |
-
"node_modules/escalade": {
|
| 1052 |
-
"version": "3.2.0",
|
| 1053 |
-
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
| 1054 |
-
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
| 1055 |
-
"dev": true,
|
| 1056 |
-
"license": "MIT",
|
| 1057 |
-
"engines": {
|
| 1058 |
-
"node": ">=6"
|
| 1059 |
-
}
|
| 1060 |
-
},
|
| 1061 |
-
"node_modules/fdir": {
|
| 1062 |
-
"version": "6.5.0",
|
| 1063 |
-
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
|
| 1064 |
-
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
|
| 1065 |
-
"dev": true,
|
| 1066 |
-
"license": "MIT",
|
| 1067 |
-
"engines": {
|
| 1068 |
-
"node": ">=12.0.0"
|
| 1069 |
-
},
|
| 1070 |
-
"peerDependencies": {
|
| 1071 |
-
"picomatch": "^3 || ^4"
|
| 1072 |
-
},
|
| 1073 |
-
"peerDependenciesMeta": {
|
| 1074 |
-
"picomatch": {
|
| 1075 |
-
"optional": true
|
| 1076 |
-
}
|
| 1077 |
-
}
|
| 1078 |
-
},
|
| 1079 |
-
"node_modules/fsevents": {
|
| 1080 |
-
"version": "2.3.3",
|
| 1081 |
-
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
| 1082 |
-
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
| 1083 |
-
"dev": true,
|
| 1084 |
-
"hasInstallScript": true,
|
| 1085 |
-
"license": "MIT",
|
| 1086 |
-
"optional": true,
|
| 1087 |
-
"os": [
|
| 1088 |
-
"darwin"
|
| 1089 |
-
],
|
| 1090 |
-
"engines": {
|
| 1091 |
-
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
| 1092 |
-
}
|
| 1093 |
-
},
|
| 1094 |
-
"node_modules/get-caller-file": {
|
| 1095 |
-
"version": "2.0.5",
|
| 1096 |
-
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
| 1097 |
-
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
| 1098 |
-
"dev": true,
|
| 1099 |
-
"license": "ISC",
|
| 1100 |
-
"engines": {
|
| 1101 |
-
"node": "6.* || 8.* || >= 10.*"
|
| 1102 |
-
}
|
| 1103 |
-
},
|
| 1104 |
-
"node_modules/get-east-asian-width": {
|
| 1105 |
-
"version": "1.6.0",
|
| 1106 |
-
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
|
| 1107 |
-
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
|
| 1108 |
-
"dev": true,
|
| 1109 |
-
"license": "MIT",
|
| 1110 |
-
"engines": {
|
| 1111 |
-
"node": ">=18"
|
| 1112 |
-
},
|
| 1113 |
-
"funding": {
|
| 1114 |
-
"url": "https://github.com/sponsors/sindresorhus"
|
| 1115 |
-
}
|
| 1116 |
-
},
|
| 1117 |
-
"node_modules/mitt": {
|
| 1118 |
-
"version": "3.0.1",
|
| 1119 |
-
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
|
| 1120 |
-
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
|
| 1121 |
-
"dev": true,
|
| 1122 |
-
"license": "MIT"
|
| 1123 |
-
},
|
| 1124 |
-
"node_modules/modern-tar": {
|
| 1125 |
-
"version": "0.8.4",
|
| 1126 |
-
"resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.8.4.tgz",
|
| 1127 |
-
"integrity": "sha512-gN54ddmyzEg10orwZ2u4OOv+bjpMWdIl5jIkodK97bMq8QBSL5c0D7YX0lT1Ooz+99S7+PvFbnxzdjgHo1r41g==",
|
| 1128 |
-
"dev": true,
|
| 1129 |
-
"license": "MIT",
|
| 1130 |
-
"engines": {
|
| 1131 |
-
"node": ">=18.0.0"
|
| 1132 |
-
}
|
| 1133 |
-
},
|
| 1134 |
-
"node_modules/nanoid": {
|
| 1135 |
-
"version": "3.3.18",
|
| 1136 |
-
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
|
| 1137 |
-
"integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
|
| 1138 |
-
"dev": true,
|
| 1139 |
-
"funding": [
|
| 1140 |
-
{
|
| 1141 |
-
"type": "github",
|
| 1142 |
-
"url": "https://github.com/sponsors/ai"
|
| 1143 |
-
}
|
| 1144 |
-
],
|
| 1145 |
-
"license": "MIT",
|
| 1146 |
-
"bin": {
|
| 1147 |
-
"nanoid": "bin/nanoid.cjs"
|
| 1148 |
-
},
|
| 1149 |
-
"engines": {
|
| 1150 |
-
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
| 1151 |
-
}
|
| 1152 |
-
},
|
| 1153 |
-
"node_modules/node-fetch": {
|
| 1154 |
-
"version": "2.7.0",
|
| 1155 |
-
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
| 1156 |
-
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
| 1157 |
-
"license": "MIT",
|
| 1158 |
-
"dependencies": {
|
| 1159 |
-
"whatwg-url": "^5.0.0"
|
| 1160 |
-
},
|
| 1161 |
-
"engines": {
|
| 1162 |
-
"node": "4.x || >=6.0.0"
|
| 1163 |
-
},
|
| 1164 |
-
"peerDependencies": {
|
| 1165 |
-
"encoding": "^0.1.0"
|
| 1166 |
-
},
|
| 1167 |
-
"peerDependenciesMeta": {
|
| 1168 |
-
"encoding": {
|
| 1169 |
-
"optional": true
|
| 1170 |
-
}
|
| 1171 |
-
}
|
| 1172 |
-
},
|
| 1173 |
-
"node_modules/picocolors": {
|
| 1174 |
-
"version": "1.1.1",
|
| 1175 |
-
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
| 1176 |
-
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
| 1177 |
-
"dev": true,
|
| 1178 |
-
"license": "ISC"
|
| 1179 |
-
},
|
| 1180 |
-
"node_modules/picomatch": {
|
| 1181 |
-
"version": "4.0.7",
|
| 1182 |
-
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
|
| 1183 |
-
"integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
|
| 1184 |
-
"dev": true,
|
| 1185 |
-
"license": "MIT",
|
| 1186 |
-
"engines": {
|
| 1187 |
-
"node": ">=12"
|
| 1188 |
-
},
|
| 1189 |
-
"funding": {
|
| 1190 |
-
"url": "https://github.com/sponsors/jonschlinkert"
|
| 1191 |
-
}
|
| 1192 |
-
},
|
| 1193 |
-
"node_modules/postcss": {
|
| 1194 |
-
"version": "8.5.28",
|
| 1195 |
-
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz",
|
| 1196 |
-
"integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==",
|
| 1197 |
-
"dev": true,
|
| 1198 |
-
"funding": [
|
| 1199 |
-
{
|
| 1200 |
-
"type": "opencollective",
|
| 1201 |
-
"url": "https://opencollective.com/postcss/"
|
| 1202 |
-
},
|
| 1203 |
-
{
|
| 1204 |
-
"type": "tidelift",
|
| 1205 |
-
"url": "https://tidelift.com/funding/github/npm/postcss"
|
| 1206 |
-
},
|
| 1207 |
-
{
|
| 1208 |
-
"type": "github",
|
| 1209 |
-
"url": "https://github.com/sponsors/ai"
|
| 1210 |
-
}
|
| 1211 |
-
],
|
| 1212 |
-
"license": "MIT",
|
| 1213 |
-
"dependencies": {
|
| 1214 |
-
"nanoid": "^3.3.18",
|
| 1215 |
-
"picocolors": "^1.1.1",
|
| 1216 |
-
"source-map-js": "^1.2.1"
|
| 1217 |
-
},
|
| 1218 |
-
"engines": {
|
| 1219 |
-
"node": "^10 || ^12 || >=14"
|
| 1220 |
-
}
|
| 1221 |
-
},
|
| 1222 |
-
"node_modules/puppeteer-core": {
|
| 1223 |
-
"version": "25.10.0",
|
| 1224 |
-
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.10.0.tgz",
|
| 1225 |
-
"integrity": "sha512-Hy5eMQshOEMil4JUUx03h5pw1HYkYCso1RG/gcpPlFSd4cYPOcopxcXEAxpLPOkOPJb9LIJtwxuj66bSdvknFg==",
|
| 1226 |
-
"dev": true,
|
| 1227 |
-
"license": "Apache-2.0",
|
| 1228 |
-
"dependencies": {
|
| 1229 |
-
"@puppeteer/browsers": "3.2.2",
|
| 1230 |
-
"chromium-bidi": "17.0.2",
|
| 1231 |
-
"devtools-protocol": "0.0.1666840",
|
| 1232 |
-
"typed-query-selector": "^2.12.2",
|
| 1233 |
-
"webdriver-bidi-protocol": "0.4.3",
|
| 1234 |
-
"ws": "^8.21.3"
|
| 1235 |
-
},
|
| 1236 |
-
"engines": {
|
| 1237 |
-
"node": ">=22.12.0"
|
| 1238 |
-
}
|
| 1239 |
-
},
|
| 1240 |
-
"node_modules/rollup": {
|
| 1241 |
-
"version": "4.63.1",
|
| 1242 |
-
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.1.tgz",
|
| 1243 |
-
"integrity": "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==",
|
| 1244 |
-
"dev": true,
|
| 1245 |
-
"license": "MIT",
|
| 1246 |
-
"dependencies": {
|
| 1247 |
-
"@types/estree": "1.0.9"
|
| 1248 |
-
},
|
| 1249 |
-
"bin": {
|
| 1250 |
-
"rollup": "dist/bin/rollup"
|
| 1251 |
-
},
|
| 1252 |
-
"engines": {
|
| 1253 |
-
"node": ">=18.0.0",
|
| 1254 |
-
"npm": ">=8.0.0"
|
| 1255 |
-
},
|
| 1256 |
-
"optionalDependencies": {
|
| 1257 |
-
"@napi-rs/lzma-linux-x64-gnu": "1.5.1",
|
| 1258 |
-
"@rollup/rollup-android-arm-eabi": "4.63.1",
|
| 1259 |
-
"@rollup/rollup-android-arm64": "4.63.1",
|
| 1260 |
-
"@rollup/rollup-darwin-arm64": "4.63.1",
|
| 1261 |
-
"@rollup/rollup-darwin-x64": "4.63.1",
|
| 1262 |
-
"@rollup/rollup-freebsd-arm64": "4.63.1",
|
| 1263 |
-
"@rollup/rollup-freebsd-x64": "4.63.1",
|
| 1264 |
-
"@rollup/rollup-linux-arm-gnueabihf": "4.63.1",
|
| 1265 |
-
"@rollup/rollup-linux-arm-musleabihf": "4.63.1",
|
| 1266 |
-
"@rollup/rollup-linux-arm64-gnu": "4.63.1",
|
| 1267 |
-
"@rollup/rollup-linux-arm64-musl": "4.63.1",
|
| 1268 |
-
"@rollup/rollup-linux-loong64-gnu": "4.63.1",
|
| 1269 |
-
"@rollup/rollup-linux-loong64-musl": "4.63.1",
|
| 1270 |
-
"@rollup/rollup-linux-ppc64-gnu": "4.63.1",
|
| 1271 |
-
"@rollup/rollup-linux-ppc64-musl": "4.63.1",
|
| 1272 |
-
"@rollup/rollup-linux-riscv64-gnu": "4.63.1",
|
| 1273 |
-
"@rollup/rollup-linux-riscv64-musl": "4.63.1",
|
| 1274 |
-
"@rollup/rollup-linux-s390x-gnu": "4.63.1",
|
| 1275 |
-
"@rollup/rollup-linux-x64-gnu": "4.63.1",
|
| 1276 |
-
"@rollup/rollup-linux-x64-musl": "4.63.1",
|
| 1277 |
-
"@rollup/rollup-openbsd-x64": "4.63.1",
|
| 1278 |
-
"@rollup/rollup-openharmony-arm64": "4.63.1",
|
| 1279 |
-
"@rollup/rollup-win32-arm64-msvc": "4.63.1",
|
| 1280 |
-
"@rollup/rollup-win32-ia32-msvc": "4.63.1",
|
| 1281 |
-
"@rollup/rollup-win32-x64-gnu": "4.63.1",
|
| 1282 |
-
"@rollup/rollup-win32-x64-msvc": "4.63.1",
|
| 1283 |
-
"fsevents": "~2.3.2"
|
| 1284 |
-
}
|
| 1285 |
-
},
|
| 1286 |
-
"node_modules/source-map-js": {
|
| 1287 |
-
"version": "1.2.1",
|
| 1288 |
-
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
| 1289 |
-
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
| 1290 |
-
"dev": true,
|
| 1291 |
-
"license": "BSD-3-Clause",
|
| 1292 |
-
"engines": {
|
| 1293 |
-
"node": ">=0.10.0"
|
| 1294 |
-
}
|
| 1295 |
-
},
|
| 1296 |
-
"node_modules/string-width": {
|
| 1297 |
-
"version": "8.2.2",
|
| 1298 |
-
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz",
|
| 1299 |
-
"integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==",
|
| 1300 |
-
"dev": true,
|
| 1301 |
-
"license": "MIT",
|
| 1302 |
-
"dependencies": {
|
| 1303 |
-
"get-east-asian-width": "^1.5.0",
|
| 1304 |
-
"strip-ansi": "^7.1.2"
|
| 1305 |
-
},
|
| 1306 |
-
"engines": {
|
| 1307 |
-
"node": ">=20"
|
| 1308 |
-
},
|
| 1309 |
-
"funding": {
|
| 1310 |
-
"url": "https://github.com/sponsors/sindresorhus"
|
| 1311 |
-
}
|
| 1312 |
-
},
|
| 1313 |
-
"node_modules/strip-ansi": {
|
| 1314 |
-
"version": "7.2.0",
|
| 1315 |
-
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
|
| 1316 |
-
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
|
| 1317 |
-
"dev": true,
|
| 1318 |
-
"license": "MIT",
|
| 1319 |
-
"dependencies": {
|
| 1320 |
-
"ansi-regex": "^6.2.2"
|
| 1321 |
-
},
|
| 1322 |
-
"engines": {
|
| 1323 |
-
"node": ">=12"
|
| 1324 |
-
},
|
| 1325 |
-
"funding": {
|
| 1326 |
-
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
| 1327 |
-
}
|
| 1328 |
-
},
|
| 1329 |
-
"node_modules/teaql-ts": {
|
| 1330 |
-
"name": "@teaql/teaql",
|
| 1331 |
-
"version": "0.3.0",
|
| 1332 |
-
"resolved": "file:vendor/teaql-teaql-0.3.0.tgz",
|
| 1333 |
-
"integrity": "sha512-au422aLCU34kwRxBu4rjqbiMCxpStQzTBek73/dUKw+SbJVMDNoo/VqkcgI8C4leKEF5p4ozH+QosGuSp+PIWw==",
|
| 1334 |
-
"license": "Apache-2.0",
|
| 1335 |
-
"dependencies": {
|
| 1336 |
-
"node-fetch": "^2.7.0"
|
| 1337 |
-
},
|
| 1338 |
-
"peerDependencies": {
|
| 1339 |
-
"@opentelemetry/api": "^1.9.1",
|
| 1340 |
-
"@opentelemetry/api-logs": "^0.221.0",
|
| 1341 |
-
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
| 1342 |
-
"better-sqlite3": "^12.10.0",
|
| 1343 |
-
"expo-sqlite": "*",
|
| 1344 |
-
"mysql2": "^3.11.0",
|
| 1345 |
-
"pg": "^8.12.0",
|
| 1346 |
-
"pg-query-stream": "^4.7.0"
|
| 1347 |
-
},
|
| 1348 |
-
"peerDependenciesMeta": {
|
| 1349 |
-
"@opentelemetry/api": {
|
| 1350 |
-
"optional": true
|
| 1351 |
-
},
|
| 1352 |
-
"@opentelemetry/api-logs": {
|
| 1353 |
-
"optional": true
|
| 1354 |
-
},
|
| 1355 |
-
"@sqlite.org/sqlite-wasm": {
|
| 1356 |
-
"optional": true
|
| 1357 |
-
},
|
| 1358 |
-
"better-sqlite3": {
|
| 1359 |
-
"optional": true
|
| 1360 |
-
},
|
| 1361 |
-
"expo-sqlite": {
|
| 1362 |
-
"optional": true
|
| 1363 |
-
},
|
| 1364 |
-
"mysql2": {
|
| 1365 |
-
"optional": true
|
| 1366 |
-
},
|
| 1367 |
-
"pg": {
|
| 1368 |
-
"optional": true
|
| 1369 |
-
},
|
| 1370 |
-
"pg-query-stream": {
|
| 1371 |
-
"optional": true
|
| 1372 |
-
}
|
| 1373 |
-
}
|
| 1374 |
-
},
|
| 1375 |
-
"node_modules/tinyglobby": {
|
| 1376 |
-
"version": "0.2.17",
|
| 1377 |
-
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
|
| 1378 |
-
"integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
|
| 1379 |
-
"dev": true,
|
| 1380 |
-
"license": "MIT",
|
| 1381 |
-
"dependencies": {
|
| 1382 |
-
"fdir": "^6.5.0",
|
| 1383 |
-
"picomatch": "^4.0.4"
|
| 1384 |
-
},
|
| 1385 |
-
"engines": {
|
| 1386 |
-
"node": ">=12.0.0"
|
| 1387 |
-
},
|
| 1388 |
-
"funding": {
|
| 1389 |
-
"url": "https://github.com/sponsors/SuperchupuDev"
|
| 1390 |
-
}
|
| 1391 |
-
},
|
| 1392 |
-
"node_modules/tr46": {
|
| 1393 |
-
"version": "0.0.3",
|
| 1394 |
-
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
| 1395 |
-
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
| 1396 |
-
"license": "MIT"
|
| 1397 |
-
},
|
| 1398 |
-
"node_modules/typed-query-selector": {
|
| 1399 |
-
"version": "2.12.2",
|
| 1400 |
-
"resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz",
|
| 1401 |
-
"integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==",
|
| 1402 |
-
"dev": true,
|
| 1403 |
-
"license": "MIT"
|
| 1404 |
-
},
|
| 1405 |
-
"node_modules/typescript": {
|
| 1406 |
-
"version": "5.9.2",
|
| 1407 |
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
|
| 1408 |
-
"integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
|
| 1409 |
-
"dev": true,
|
| 1410 |
-
"license": "Apache-2.0",
|
| 1411 |
-
"bin": {
|
| 1412 |
-
"tsc": "bin/tsc",
|
| 1413 |
-
"tsserver": "bin/tsserver"
|
| 1414 |
-
},
|
| 1415 |
-
"engines": {
|
| 1416 |
-
"node": ">=14.17"
|
| 1417 |
-
}
|
| 1418 |
-
},
|
| 1419 |
-
"node_modules/vite": {
|
| 1420 |
-
"version": "7.3.6",
|
| 1421 |
-
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
|
| 1422 |
-
"integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==",
|
| 1423 |
-
"dev": true,
|
| 1424 |
-
"license": "MIT",
|
| 1425 |
-
"dependencies": {
|
| 1426 |
-
"esbuild": "^0.27.0 || ^0.28.0",
|
| 1427 |
-
"fdir": "^6.5.0",
|
| 1428 |
-
"picomatch": "^4.0.3",
|
| 1429 |
-
"postcss": "^8.5.6",
|
| 1430 |
-
"rollup": "^4.43.0",
|
| 1431 |
-
"tinyglobby": "^0.2.15"
|
| 1432 |
-
},
|
| 1433 |
-
"bin": {
|
| 1434 |
-
"vite": "bin/vite.js"
|
| 1435 |
-
},
|
| 1436 |
-
"engines": {
|
| 1437 |
-
"node": "^20.19.0 || >=22.12.0"
|
| 1438 |
-
},
|
| 1439 |
-
"funding": {
|
| 1440 |
-
"url": "https://github.com/vitejs/vite?sponsor=1"
|
| 1441 |
-
},
|
| 1442 |
-
"optionalDependencies": {
|
| 1443 |
-
"fsevents": "~2.3.3"
|
| 1444 |
-
},
|
| 1445 |
-
"peerDependencies": {
|
| 1446 |
-
"@types/node": "^20.19.0 || >=22.12.0",
|
| 1447 |
-
"jiti": ">=1.21.0",
|
| 1448 |
-
"less": "^4.0.0",
|
| 1449 |
-
"lightningcss": "^1.21.0",
|
| 1450 |
-
"sass": "^1.70.0",
|
| 1451 |
-
"sass-embedded": "^1.70.0",
|
| 1452 |
-
"stylus": ">=0.54.8",
|
| 1453 |
-
"sugarss": "^5.0.0",
|
| 1454 |
-
"terser": "^5.16.0",
|
| 1455 |
-
"tsx": "^4.8.1",
|
| 1456 |
-
"yaml": "^2.4.2"
|
| 1457 |
-
},
|
| 1458 |
-
"peerDependenciesMeta": {
|
| 1459 |
-
"@types/node": {
|
| 1460 |
-
"optional": true
|
| 1461 |
-
},
|
| 1462 |
-
"jiti": {
|
| 1463 |
-
"optional": true
|
| 1464 |
-
},
|
| 1465 |
-
"less": {
|
| 1466 |
-
"optional": true
|
| 1467 |
-
},
|
| 1468 |
-
"lightningcss": {
|
| 1469 |
-
"optional": true
|
| 1470 |
-
},
|
| 1471 |
-
"sass": {
|
| 1472 |
-
"optional": true
|
| 1473 |
-
},
|
| 1474 |
-
"sass-embedded": {
|
| 1475 |
-
"optional": true
|
| 1476 |
-
},
|
| 1477 |
-
"stylus": {
|
| 1478 |
-
"optional": true
|
| 1479 |
-
},
|
| 1480 |
-
"sugarss": {
|
| 1481 |
-
"optional": true
|
| 1482 |
-
},
|
| 1483 |
-
"terser": {
|
| 1484 |
-
"optional": true
|
| 1485 |
-
},
|
| 1486 |
-
"tsx": {
|
| 1487 |
-
"optional": true
|
| 1488 |
-
},
|
| 1489 |
-
"yaml": {
|
| 1490 |
-
"optional": true
|
| 1491 |
-
}
|
| 1492 |
-
}
|
| 1493 |
-
},
|
| 1494 |
-
"node_modules/webdriver-bidi-protocol": {
|
| 1495 |
-
"version": "0.4.3",
|
| 1496 |
-
"resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.3.tgz",
|
| 1497 |
-
"integrity": "sha512-uuN0goWfxP22B7J/uAgBpOYNPttC+XVseYE+rSY5+rQ+YBeVz/VORw8WbmLVcqW78zNg5A4qnjNXYUWR3il2ig==",
|
| 1498 |
-
"dev": true,
|
| 1499 |
-
"license": "Apache-2.0"
|
| 1500 |
-
},
|
| 1501 |
-
"node_modules/webidl-conversions": {
|
| 1502 |
-
"version": "3.0.1",
|
| 1503 |
-
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
| 1504 |
-
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
|
| 1505 |
-
"license": "BSD-2-Clause"
|
| 1506 |
-
},
|
| 1507 |
-
"node_modules/whatwg-url": {
|
| 1508 |
-
"version": "5.0.0",
|
| 1509 |
-
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
| 1510 |
-
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
| 1511 |
-
"license": "MIT",
|
| 1512 |
-
"dependencies": {
|
| 1513 |
-
"tr46": "~0.0.3",
|
| 1514 |
-
"webidl-conversions": "^3.0.0"
|
| 1515 |
-
}
|
| 1516 |
-
},
|
| 1517 |
-
"node_modules/wrap-ansi": {
|
| 1518 |
-
"version": "9.0.2",
|
| 1519 |
-
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
|
| 1520 |
-
"integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
|
| 1521 |
-
"dev": true,
|
| 1522 |
-
"license": "MIT",
|
| 1523 |
-
"dependencies": {
|
| 1524 |
-
"ansi-styles": "^6.2.1",
|
| 1525 |
-
"string-width": "^7.0.0",
|
| 1526 |
-
"strip-ansi": "^7.1.0"
|
| 1527 |
-
},
|
| 1528 |
-
"engines": {
|
| 1529 |
-
"node": ">=18"
|
| 1530 |
-
},
|
| 1531 |
-
"funding": {
|
| 1532 |
-
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
| 1533 |
-
}
|
| 1534 |
-
},
|
| 1535 |
-
"node_modules/wrap-ansi/node_modules/string-width": {
|
| 1536 |
-
"version": "7.2.0",
|
| 1537 |
-
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
|
| 1538 |
-
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
|
| 1539 |
-
"dev": true,
|
| 1540 |
-
"license": "MIT",
|
| 1541 |
-
"dependencies": {
|
| 1542 |
-
"emoji-regex": "^10.3.0",
|
| 1543 |
-
"get-east-asian-width": "^1.0.0",
|
| 1544 |
-
"strip-ansi": "^7.1.0"
|
| 1545 |
-
},
|
| 1546 |
-
"engines": {
|
| 1547 |
-
"node": ">=18"
|
| 1548 |
-
},
|
| 1549 |
-
"funding": {
|
| 1550 |
-
"url": "https://github.com/sponsors/sindresorhus"
|
| 1551 |
-
}
|
| 1552 |
-
},
|
| 1553 |
-
"node_modules/ws": {
|
| 1554 |
-
"version": "8.21.3",
|
| 1555 |
-
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz",
|
| 1556 |
-
"integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==",
|
| 1557 |
-
"dev": true,
|
| 1558 |
-
"license": "MIT",
|
| 1559 |
-
"engines": {
|
| 1560 |
-
"node": ">=10.0.0"
|
| 1561 |
-
},
|
| 1562 |
-
"peerDependencies": {
|
| 1563 |
-
"bufferutil": "^4.0.1",
|
| 1564 |
-
"utf-8-validate": ">=5.0.2"
|
| 1565 |
-
},
|
| 1566 |
-
"peerDependenciesMeta": {
|
| 1567 |
-
"bufferutil": {
|
| 1568 |
-
"optional": true
|
| 1569 |
-
},
|
| 1570 |
-
"utf-8-validate": {
|
| 1571 |
-
"optional": true
|
| 1572 |
-
}
|
| 1573 |
-
}
|
| 1574 |
-
},
|
| 1575 |
-
"node_modules/y18n": {
|
| 1576 |
-
"version": "5.0.8",
|
| 1577 |
-
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
| 1578 |
-
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
| 1579 |
-
"dev": true,
|
| 1580 |
-
"license": "ISC",
|
| 1581 |
-
"engines": {
|
| 1582 |
-
"node": ">=10"
|
| 1583 |
-
}
|
| 1584 |
-
},
|
| 1585 |
-
"node_modules/yargs": {
|
| 1586 |
-
"version": "18.1.0",
|
| 1587 |
-
"resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz",
|
| 1588 |
-
"integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==",
|
| 1589 |
-
"dev": true,
|
| 1590 |
-
"license": "MIT",
|
| 1591 |
-
"dependencies": {
|
| 1592 |
-
"cliui": "^9.0.1",
|
| 1593 |
-
"escalade": "^3.1.1",
|
| 1594 |
-
"get-caller-file": "^2.0.5",
|
| 1595 |
-
"string-width": "^8.2.1",
|
| 1596 |
-
"y18n": "^5.0.5",
|
| 1597 |
-
"yargs-parser": "^22.0.0"
|
| 1598 |
-
},
|
| 1599 |
-
"engines": {
|
| 1600 |
-
"node": "^20.19.0 || ^22.12.0 || >=23"
|
| 1601 |
-
}
|
| 1602 |
-
},
|
| 1603 |
-
"node_modules/yargs-parser": {
|
| 1604 |
-
"version": "22.0.0",
|
| 1605 |
-
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
|
| 1606 |
-
"integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
|
| 1607 |
-
"dev": true,
|
| 1608 |
-
"license": "ISC",
|
| 1609 |
-
"engines": {
|
| 1610 |
-
"node": "^20.19.0 || ^22.12.0 || >=23"
|
| 1611 |
-
}
|
| 1612 |
-
},
|
| 1613 |
-
"node_modules/zod": {
|
| 1614 |
-
"version": "3.25.76",
|
| 1615 |
-
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
| 1616 |
-
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
| 1617 |
-
"dev": true,
|
| 1618 |
-
"license": "MIT",
|
| 1619 |
-
"funding": {
|
| 1620 |
-
"url": "https://github.com/sponsors/colinhacks"
|
| 1621 |
-
}
|
| 1622 |
-
}
|
| 1623 |
-
}
|
| 1624 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/package.json
DELETED
|
@@ -1,20 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"name": "teaql-browser-sqlite-example",
|
| 3 |
-
"version": "1.0.0",
|
| 4 |
-
"private": true,
|
| 5 |
-
"type": "module",
|
| 6 |
-
"scripts": {
|
| 7 |
-
"dev": "vite",
|
| 8 |
-
"build": "tsc --noEmit && vite build",
|
| 9 |
-
"smoke": "node scripts/smoke.mjs"
|
| 10 |
-
},
|
| 11 |
-
"dependencies": {
|
| 12 |
-
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
| 13 |
-
"teaql-ts": "file:vendor/teaql-teaql-0.3.0.tgz"
|
| 14 |
-
},
|
| 15 |
-
"devDependencies": {
|
| 16 |
-
"puppeteer-core": "25.10.0",
|
| 17 |
-
"typescript": "5.9.2",
|
| 18 |
-
"vite": "^7.3.6"
|
| 19 |
-
}
|
| 20 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/scripts/smoke.mjs
DELETED
|
@@ -1,130 +0,0 @@
|
|
| 1 |
-
import {spawn} from 'node:child_process';
|
| 2 |
-
import {readFileSync, writeFileSync} from 'node:fs';
|
| 3 |
-
import {createHash} from 'node:crypto';
|
| 4 |
-
import {join} from 'node:path';
|
| 5 |
-
import assert from 'node:assert/strict';
|
| 6 |
-
import puppeteer from 'puppeteer-core';
|
| 7 |
-
|
| 8 |
-
const generated = JSON.parse(readFileSync('generated-order-hashes.json', 'utf8'));
|
| 9 |
-
function checkLibrary() {
|
| 10 |
-
for (const [file, expected] of Object.entries(generated))
|
| 11 |
-
assert.equal(createHash('sha256').update(readFileSync(join('orders-lib', file))).digest('hex'), expected, `generated file changed: ${file}`);
|
| 12 |
-
}
|
| 13 |
-
checkLibrary();
|
| 14 |
-
const server = spawn(process.execPath, ['node_modules/vite/bin/vite.js', 'preview', '--host', '127.0.0.1', '--port', '4175', '--strictPort'],
|
| 15 |
-
{stdio: ['ignore', 'pipe', 'pipe']});
|
| 16 |
-
let serverOutput = '';
|
| 17 |
-
server.stdout.on('data', value => { serverOutput += value; }); server.stderr.on('data', value => { serverOutput += value; });
|
| 18 |
-
let browser;
|
| 19 |
-
const receipts = [];
|
| 20 |
-
try {
|
| 21 |
-
let ready = false;
|
| 22 |
-
for (let attempt = 0; attempt < 100; attempt++) {
|
| 23 |
-
try { ready = (await fetch('http://127.0.0.1:4175/')).ok; } catch { /* starting */ }
|
| 24 |
-
if (ready) break;
|
| 25 |
-
await new Promise(resolve => setTimeout(resolve, 100));
|
| 26 |
-
}
|
| 27 |
-
assert.ok(ready, serverOutput);
|
| 28 |
-
browser = await puppeteer.launch({executablePath: process.env.CHROME_BIN || '/usr/bin/google-chrome',
|
| 29 |
-
args: ['--no-sandbox', '--disable-dev-shm-usage'], headless: true});
|
| 30 |
-
const page = await browser.newPage(), errors = [];
|
| 31 |
-
page.on('pageerror', error => errors.push(error.message));
|
| 32 |
-
page.on('console', event => { if (event.type() === 'error') errors.push(event.text()); });
|
| 33 |
-
page.on('response', response => { if (response.status() >= 400) errors.push(`${response.status()} ${response.url()}`); });
|
| 34 |
-
page.on('requestfailed', request => errors.push(`${request.failure()?.errorText} ${request.url()}`));
|
| 35 |
-
async function waitReady(storage) {
|
| 36 |
-
try {
|
| 37 |
-
await page.waitForFunction(value => {
|
| 38 |
-
const text = document.querySelector('#status')?.textContent || '';
|
| 39 |
-
return text.startsWith(value) && text.includes('ready');
|
| 40 |
-
}, {timeout: 20_000}, storage);
|
| 41 |
-
} catch (error) {
|
| 42 |
-
throw new Error(`${error.message}; status=${await page.$eval('#status', element => element.textContent)}; browserErrors=${errors.join('\n')}`);
|
| 43 |
-
}
|
| 44 |
-
}
|
| 45 |
-
async function inspect(label, diagnostics) {
|
| 46 |
-
const response = JSON.parse(await page.$eval('#result', element => element.textContent));
|
| 47 |
-
assert.equal(response.metadata.totalCount, 3); assert.equal(response.metadata.aggregations.totalOrders, 3);
|
| 48 |
-
assert.equal(response.metadata.pageOffset, 1); assert.equal(response.metadata.pageSize, 1);
|
| 49 |
-
assert.equal(response.resultCode, 0); assert.equal(response.status, 'YES');
|
| 50 |
-
assert.equal(response.version, '1.001'); assert.equal(response.recordCount, 3);
|
| 51 |
-
assert.deepEqual(response.metadata.searchWarnings, []);
|
| 52 |
-
assert.equal(response.data.length, 1); const order = response.data[0];
|
| 53 |
-
assert.equal(order.orderNumber, 'KEEP-002'); assert.equal(order.orderDate.slice(0, 10), '2026-10-02');
|
| 54 |
-
assert.equal(order.version, 1); assert.equal(order.status.name, 'Paid'); assert.equal(order.status.color, '#22C55E');
|
| 55 |
-
assert.deepEqual(order.items.map(item => [item.productName, item.quantity]), [['Box 1', 1], ['Box 2', 2], ['Box 3', 3]]);
|
| 56 |
-
assert.equal(order.itemCount, 5);
|
| 57 |
-
assert.deepEqual(response.facets.statusCounts.map(row => [String(row.id), row.orderCount, row.orderTotalAmount]),
|
| 58 |
-
[['1001', 1, 100], ['1002', 2, 500], ['1003', 0, null]]);
|
| 59 |
-
const evidence = JSON.parse(await page.$eval('#sql', element => element.textContent));
|
| 60 |
-
assert.equal(evidence.length, 8);
|
| 61 |
-
const comments = evidence.map(entry => entry.traceChain.filter(node => node.kind === 'comment').map(node => node.detail));
|
| 62 |
-
const expected = [
|
| 63 |
-
['load order list', "countAs('totalOrders')"], ['load order list'],
|
| 64 |
-
['load order list', 'selectStatusWith(...)', 'load status'],
|
| 65 |
-
['load order list', 'selectOrderItemListWith(...)', 'load item previews'],
|
| 66 |
-
['load order list', "countOrderItemsAs('itemCount')"],
|
| 67 |
-
['load order list', "facetByStatusAs('statusCounts')", 'aggregate status'],
|
| 68 |
-
['load order list', "facetByStatusAs('statusCounts')", 'load status facets'],
|
| 69 |
-
['load order list', "facetByStatusAs('statusCounts')", 'aggregate status'],
|
| 70 |
-
];
|
| 71 |
-
assert.deepEqual(comments.map(JSON.stringify).sort(), expected.map(JSON.stringify).sort());
|
| 72 |
-
for (const entry of evidence) {
|
| 73 |
-
assert.equal(entry.purpose, 'render order list page');
|
| 74 |
-
assert.ok(entry.tracePath.some(node => node.kind === 'provider'));
|
| 75 |
-
assert.equal(entry.traceChain.filter(node => node.kind === 'purpose').length, 1);
|
| 76 |
-
}
|
| 77 |
-
const text = await page.$eval('#status', element => element.textContent);
|
| 78 |
-
assert.ok(text.includes(`${diagnostics} diagnostics`), text);
|
| 79 |
-
assert.equal(await page.$eval('#trace', element => element.textContent), evidence.map(entry => `${entry.purpose}: ${entry.traceChain
|
| 80 |
-
.filter(node => node.kind === 'comment').map(node => node.detail).join(' → ')}`).join('\n'));
|
| 81 |
-
assert.deepEqual(await page.$$eval('.evidence-table th', cells => cells.map(cell => cell.textContent)),
|
| 82 |
-
['Time', 'Identity', 'Trace chain', 'SQL']);
|
| 83 |
-
const renderedEvidence = await page.$$eval('#evidence-rows tr', rows => rows.map(row =>
|
| 84 |
-
[...row.querySelectorAll('td')].map(cell => cell.textContent)));
|
| 85 |
-
assert.deepEqual(renderedEvidence, evidence.map(entry => [
|
| 86 |
-
`${entry.elapsedMicros} µs`, entry.tracePath.find(node => node.kind === 'request')?.name ?? '—',
|
| 87 |
-
`${entry.traceChain.find(node => node.kind === 'purpose').detail}: ${entry.traceChain
|
| 88 |
-
.filter(node => node.kind === 'comment').map(node => node.detail).join(' → ')}`, entry.debugSQL,
|
| 89 |
-
]));
|
| 90 |
-
receipts.push({label, response, evidence, diagnostics, renderedEvidence});
|
| 91 |
-
return response;
|
| 92 |
-
}
|
| 93 |
-
await page.goto('http://127.0.0.1:4175/', {waitUntil: 'networkidle0'});
|
| 94 |
-
await waitReady('MEMORY'); const baseline = await inspect('memory-first', 8);
|
| 95 |
-
await page.select('#example', 'all');
|
| 96 |
-
await page.waitForFunction(() => {
|
| 97 |
-
const text = document.querySelector('#result')?.textContent;
|
| 98 |
-
return text && JSON.parse(text).metadata.totalCount === 4;
|
| 99 |
-
});
|
| 100 |
-
const all = JSON.parse(await page.$eval('#result', element => element.textContent));
|
| 101 |
-
assert.equal(all.data[0].orderNumber, 'KEEP-003');
|
| 102 |
-
assert.deepEqual(all.facets.statusCounts.map(row => [row.orderCount, row.orderTotalAmount]), [[1, 100], [3, 1400], [0, null]]);
|
| 103 |
-
await page.$eval('#search', element => { element.value = 'Q.constructor("return globalThis")'; });
|
| 104 |
-
await page.click('#query');
|
| 105 |
-
await page.waitForFunction(() => document.querySelector('#status')?.textContent?.includes('not allowed'));
|
| 106 |
-
assert.equal(await page.$$eval('#evidence-rows tr', rows => rows.length), 0);
|
| 107 |
-
assert.equal(await page.$eval('#sql', element => element.textContent), '[]');
|
| 108 |
-
await page.click('#preset'); await waitReady('MEMORY');
|
| 109 |
-
assert.deepEqual(await inspect('restored-preset', 8), baseline);
|
| 110 |
-
await page.reload({waitUntil: 'networkidle0'}); await waitReady('MEMORY');
|
| 111 |
-
assert.deepEqual(await inspect('memory-refresh', 8), baseline);
|
| 112 |
-
await page.click('#logging');
|
| 113 |
-
await page.waitForFunction(() => document.querySelector('#status')?.textContent?.includes('0 diagnostics'));
|
| 114 |
-
assert.deepEqual(await inspect('memory-logging-off', 0), baseline);
|
| 115 |
-
await page.click('#reset');
|
| 116 |
-
await page.waitForFunction(() => !document.querySelector('#reset')?.hasAttribute('disabled'));
|
| 117 |
-
assert.deepEqual(await inspect('memory-reset', 0), baseline);
|
| 118 |
-
await page.click('#persist'); await waitReady('OPFS');
|
| 119 |
-
assert.deepEqual(await inspect('opfs-first', 0), baseline);
|
| 120 |
-
await page.reload({waitUntil: 'networkidle0'}); await waitReady('OPFS');
|
| 121 |
-
assert.deepEqual(await inspect('opfs-refresh', 8), baseline);
|
| 122 |
-
await page.click('#reset');
|
| 123 |
-
await page.waitForFunction(() => !document.querySelector('#reset')?.hasAttribute('disabled'));
|
| 124 |
-
assert.deepEqual(await inspect('opfs-reset', 8), baseline);
|
| 125 |
-
assert.deepEqual(errors, []); checkLibrary();
|
| 126 |
-
if (process.env.TEAQL_BROWSER_ORDER_EVIDENCE) writeFileSync(process.env.TEAQL_BROWSER_ORDER_EVIDENCE,
|
| 127 |
-
JSON.stringify({receipts, queryPresetSwitch: true, forbiddenConstructorRejected: true,
|
| 128 |
-
generatedLibraryUnchanged: true, browserErrors: errors}, null, 2) + '\n', {flag: 'wx'});
|
| 129 |
-
console.log('PASS browser generated order TraceChain: memory/OPFS, refresh/reset, logging on/off, exact facets/counts/previews, actual SQL=8, unchanged generated library');
|
| 130 |
-
} finally { await browser?.close(); server.kill('SIGTERM'); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/src/main.ts
DELETED
|
@@ -1,185 +0,0 @@
|
|
| 1 |
-
import { BrowserSQLiteTeaQLClient, type BrowserSQLiteStorage } from 'teaql-ts/sql/browser-sqlite';
|
| 2 |
-
import { DelegatingMutationPolicyApprovalProvider, DelegatingMutationPolicyRegistry, QueryParser, UserContext } from 'teaql-ts';
|
| 3 |
-
import type { TeaQLPage } from 'teaql-ts';
|
| 4 |
-
import { SQLExecutionEvidenceStore, type SQLExecutionMetadata } from 'teaql-ts/sql/core';
|
| 5 |
-
import { Q } from '../orders-lib/src/generated/Q';
|
| 6 |
-
import { E } from '../orders-lib/src/generated/E';
|
| 7 |
-
import { OrderStatus } from '../orders-lib/src/generated/models/OrderStatus';
|
| 8 |
-
import { GENERATED_RUNTIME_MODULE } from '../orders-lib/src/runtime-module';
|
| 9 |
-
import { ENTITY_SCHEMAS } from '../orders-lib/src/teaql-schemas';
|
| 10 |
-
import { webResponse } from './web-response';
|
| 11 |
-
import './style.css';
|
| 12 |
-
|
| 13 |
-
const status = document.querySelector<HTMLParagraphElement>('#status')!;
|
| 14 |
-
const output = document.querySelector<HTMLPreElement>('#result')!;
|
| 15 |
-
const trace = document.querySelector<HTMLPreElement>('#trace')!;
|
| 16 |
-
const sql = document.querySelector<HTMLPreElement>('#sql')!;
|
| 17 |
-
const evidenceRows = document.querySelector<HTMLTableSectionElement>('#evidence-rows')!;
|
| 18 |
-
const persist = document.querySelector<HTMLInputElement>('#persist')!;
|
| 19 |
-
const logging = document.querySelector<HTMLInputElement>('#logging')!;
|
| 20 |
-
const reset = document.querySelector<HTMLButtonElement>('#reset')!;
|
| 21 |
-
const run = document.querySelector<HTMLButtonElement>('#query')!;
|
| 22 |
-
const search = document.querySelector<HTMLTextAreaElement>('#search')!;
|
| 23 |
-
const example = document.querySelector<HTMLSelectElement>('#example')!;
|
| 24 |
-
const filteredSearch = JSON.stringify(JSON.stringify({filter: {orderNumber: {$contains: 'KEEP'}}}));
|
| 25 |
-
const preset = `Q.customerOrdersWithMinimalFields()
|
| 26 |
-
.filterByJson(${filteredSearch})
|
| 27 |
-
.countAs("totalOrders")
|
| 28 |
-
.facetByStatusAs("statusCounts", Q.orderStatusesWithMinimalFields()
|
| 29 |
-
.selectName().selectColor().countAs("orderCount")
|
| 30 |
-
.sumTotalAmountOfCustomerOrdersAs("orderTotalAmount", Q.customerOrdersWithMinimalFields())
|
| 31 |
-
.orderByDisplayOrderAscending().comment("load status facets"))
|
| 32 |
-
.selectOrderNumber().selectOrderDate()
|
| 33 |
-
.selectStatusWith(Q.orderStatusesWithMinimalFields()
|
| 34 |
-
.selectName().selectColor().comment("load status"))
|
| 35 |
-
.selectOrderItemListWith(Q.orderItemsWithMinimalFields()
|
| 36 |
-
.selectProductName().selectQuantity().orderByIdAscending().limit(3).comment("load item previews"))
|
| 37 |
-
.countOrderItemsAs("itemCount")
|
| 38 |
-
.orderByOrderDateDescending().orderByIdDescending()
|
| 39 |
-
.comment("load order list").purpose("render order list page")`;
|
| 40 |
-
search.value = preset;
|
| 41 |
-
type Runtime = {client: BrowserSQLiteTeaQLClient; context: UserContext; evidence: SQLExecutionEvidenceStore; diagnostics: SQLExecutionMetadata[]};
|
| 42 |
-
let active: Runtime | undefined;
|
| 43 |
-
const opfsAvailable = globalThis.crossOriginIsolated && typeof navigator.storage?.getDirectory === 'function';
|
| 44 |
-
persist.checked = opfsAvailable && localStorage.getItem('teaql-browser-order-storage') === 'opfs';
|
| 45 |
-
persist.disabled = !opfsAvailable;
|
| 46 |
-
if (!opfsAvailable) document.querySelector('#opfs-note')!.textContent = '(not available on this host; memory remains fully browser-local)';
|
| 47 |
-
|
| 48 |
-
async function open(storage: BrowserSQLiteStorage): Promise<Runtime> {
|
| 49 |
-
const worker = new Worker(new URL('./sqlite.worker.ts', import.meta.url), {type: 'module'});
|
| 50 |
-
const client = await BrowserSQLiteTeaQLClient.open(worker, {...ENTITY_SCHEMAS}, {
|
| 51 |
-
storage, databaseName: 'teaql-browser-orders.sqlite3',
|
| 52 |
-
});
|
| 53 |
-
client.install(GENERATED_RUNTIME_MODULE);
|
| 54 |
-
client.setDiagnosticSQLLogSink(undefined).setMutationLoggingEnabled(false);
|
| 55 |
-
const identity = Object.freeze({policyId: 'browser-order-seed', version: '1', fingerprint: 'sha256:browser-order-seed-v1'});
|
| 56 |
-
const context = new UserContext().insertResource('dataService', client)
|
| 57 |
-
.withMutationPolicyRegistry(new DelegatingMutationPolicyRegistry(() => ({identity,
|
| 58 |
-
review: (_context, plan) => plan.operations.length > 0 ? {verdict: 'allow'}
|
| 59 |
-
: {verdict: 'deny', code: 'EMPTY_GRAPH', message: 'empty mutation graph'},
|
| 60 |
-
})))
|
| 61 |
-
.withMutationPolicyApprovalProvider(new DelegatingMutationPolicyApprovalProvider(
|
| 62 |
-
policy => ({policy, approvedBy: 'browser-demo-owner', approvedAt: new Date()}),
|
| 63 |
-
));
|
| 64 |
-
client.setUserContext(context);
|
| 65 |
-
await context.ensureSchema();
|
| 66 |
-
await context.ensureSchema();
|
| 67 |
-
return {client, context, evidence: new SQLExecutionEvidenceStore(), diagnostics: []};
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
async function seed({context}: Runtime): Promise<void> {
|
| 71 |
-
const existing = await Q.customerOrdersWithMinimalFields().limit(1)
|
| 72 |
-
.comment('detect existing order demo').purpose('keep mutation seeding idempotent').executeForList(context);
|
| 73 |
-
if (existing.length) return;
|
| 74 |
-
const platform = (await Q.platforms().limit(2).comment('load bootstrap platform').purpose('prepare order demo').executeForList(context))[0];
|
| 75 |
-
const customer = Q.customers().comment('initialize demo customer').purpose('prepare order demo').newEntity(context);
|
| 76 |
-
customer.updateName('North Star Retail').updatePlatform(platform.id);
|
| 77 |
-
await customer.auditAs('seed browser order customer').save(context);
|
| 78 |
-
for (let index = 1; index <= 4; index++) {
|
| 79 |
-
const order = Q.customerOrders().comment('initialize demo order').purpose('prepare order demo').newEntity(context);
|
| 80 |
-
order.updateCustomer(customer.id).updateOrderNumber(index < 4 ? `KEEP-00${index}` : 'DROP-004')
|
| 81 |
-
.updateOrderDate(`2026-10-0${index}`).updateTotalAmount(index < 4 ? index * 100 : 900);
|
| 82 |
-
if (index === 1) order.updateStatusToNew(); else order.updateStatusToPaid();
|
| 83 |
-
await order.auditAs('seed browser order').save(context);
|
| 84 |
-
for (let item = 1; item <= 5; item++) {
|
| 85 |
-
const line = Q.orderItems().comment('initialize demo item').purpose('prepare item previews').newEntity(context);
|
| 86 |
-
line.updateCustomerOrder(order.id).updateProductName(`Box ${item}`).updateQuantity(item).updateUnitPrice(20);
|
| 87 |
-
await line.auditAs('seed browser order item').save(context);
|
| 88 |
-
}
|
| 89 |
-
}
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
async function show(runtime: Runtime): Promise<void> {
|
| 93 |
-
output.textContent = '';
|
| 94 |
-
trace.textContent = '';
|
| 95 |
-
sql.textContent = '[]';
|
| 96 |
-
evidenceRows.replaceChildren();
|
| 97 |
-
runtime.evidence.enableAll(); runtime.diagnostics.length = 0;
|
| 98 |
-
type Order = NonNullable<Parameters<typeof E.customerOrder>[0]>;
|
| 99 |
-
type Executable = {executeForPage(context: UserContext, offset: number, size: number): Promise<TeaQLPage<Order>>};
|
| 100 |
-
const request = QueryParser.parse(search.value, Q) as Executable & {dynamicSearchWarnings?: readonly unknown[]};
|
| 101 |
-
if (typeof request?.executeForPage !== 'function') throw new Error('The query must contain a generated executable Q request');
|
| 102 |
-
runtime.client.setRuntimeTelemetrySink(runtime.evidence).setQueryLoggingEnabled(logging.checked)
|
| 103 |
-
.setDiagnosticSQLLogSink({write: entry => runtime.diagnostics.push(entry)});
|
| 104 |
-
const page = await request.executeForPage(runtime.context, 1, 1);
|
| 105 |
-
const responseBase = webResponse(page.data);
|
| 106 |
-
const response = {
|
| 107 |
-
resultCode: responseBase.resultCode, status: responseBase.status, version: responseBase.version,
|
| 108 |
-
recordCount: page.totalCount,
|
| 109 |
-
data: page.data.map(row => {
|
| 110 |
-
const expression = E.customerOrder(row);
|
| 111 |
-
const previewSize = expression.orderItemList().size().eval();
|
| 112 |
-
if (previewSize == null) throw new Error('Selected item list unexpectedly has a null size');
|
| 113 |
-
return {id: row.id, version: row.version, orderNumber: expression.orderNumber().eval(), orderDate: expression.orderDate().eval(),
|
| 114 |
-
status: {name: expression.status().name().eval(), color: expression.status().color().eval()},
|
| 115 |
-
items: Array.from({length: previewSize}, (_, index) => ({
|
| 116 |
-
productName: expression.orderItemList().get(index).productName().eval(), quantity: expression.orderItemList().get(index).quantity().eval(),
|
| 117 |
-
})), itemCount: (row as unknown as Record<string, unknown>).itemCount};
|
| 118 |
-
}),
|
| 119 |
-
metadata: {totalCount: page.totalCount, pageOffset: 1, pageSize: 1, aggregations: page.data.aggregations, searchWarnings: request.dynamicSearchWarnings ?? []},
|
| 120 |
-
facets: {statusCounts: page.data.facets.statusCounts.map(value => ({
|
| 121 |
-
id: value.id, name: E.orderStatus(OrderStatus.fromRecord(value)).name().eval(),
|
| 122 |
-
color: E.orderStatus(OrderStatus.fromRecord(value)).color().eval(), orderCount: value.orderCount, orderTotalAmount: value.orderTotalAmount,
|
| 123 |
-
}))},
|
| 124 |
-
};
|
| 125 |
-
output.textContent = JSON.stringify(response, null, 2);
|
| 126 |
-
const statements = runtime.evidence.snapshot();
|
| 127 |
-
// Rendering only: ownership and comments come from the actual runtime metadata.
|
| 128 |
-
const rows = statements.map(entry => {
|
| 129 |
-
const chain = entry.traceChain ?? [];
|
| 130 |
-
const purposes = chain.filter(node => node.kind === 'purpose');
|
| 131 |
-
const businessTrace = purposes.length === 1
|
| 132 |
-
? `${purposes[0].detail}: ${chain.filter(node => node.kind === 'comment').map(node => node.detail).join(' → ')}`
|
| 133 |
-
: 'TraceChain unavailable';
|
| 134 |
-
const row = document.createElement('tr');
|
| 135 |
-
for (const value of [`${entry.elapsedMicros} µs`,
|
| 136 |
-
entry.tracePath.find(node => node.kind === 'request')?.name ?? '—', businessTrace, entry.debugSQL]) {
|
| 137 |
-
const cell = document.createElement('td');
|
| 138 |
-
cell.textContent = value;
|
| 139 |
-
row.append(cell);
|
| 140 |
-
}
|
| 141 |
-
return {row, businessTrace};
|
| 142 |
-
});
|
| 143 |
-
evidenceRows.replaceChildren(...rows.map(value => value.row));
|
| 144 |
-
trace.textContent = rows.map(value => value.businessTrace).join('\n');
|
| 145 |
-
sql.textContent = JSON.stringify(statements, null, 2);
|
| 146 |
-
status.textContent = `${runtime.client.storage!.toUpperCase()} · ${page.totalCount} matches · ${statements.length} SQL statements · ${runtime.diagnostics.length} diagnostics · policy installed · ready`;
|
| 147 |
-
}
|
| 148 |
-
|
| 149 |
-
async function replace(storage: BrowserSQLiteStorage): Promise<void> {
|
| 150 |
-
status.textContent = `Opening ${storage.toUpperCase()} SQLite/WASM…`;
|
| 151 |
-
const previous = active; active = undefined;
|
| 152 |
-
await previous?.client.close();
|
| 153 |
-
const next = await open(storage); active = next;
|
| 154 |
-
await seed(next); await show(next);
|
| 155 |
-
}
|
| 156 |
-
function fail(value: unknown): void {
|
| 157 |
-
status.textContent = value instanceof Error ? `${value.name}: ${value.message}` : String(value);
|
| 158 |
-
}
|
| 159 |
-
run.addEventListener('click', async () => {
|
| 160 |
-
if (!active) return;
|
| 161 |
-
run.disabled = true;
|
| 162 |
-
try { await show(active); } catch (error) { fail(error); } finally { run.disabled = false; }
|
| 163 |
-
});
|
| 164 |
-
document.querySelector('#preset')!.addEventListener('click', () => {
|
| 165 |
-
search.value = preset; example.value = 'filtered'; run.click();
|
| 166 |
-
});
|
| 167 |
-
example.addEventListener('change', () => {
|
| 168 |
-
search.value = example.value === 'all' ? preset.replace(filteredSearch, JSON.stringify('{}')) : preset;
|
| 169 |
-
run.click();
|
| 170 |
-
});
|
| 171 |
-
search.addEventListener('keydown', event => {
|
| 172 |
-
if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') run.click();
|
| 173 |
-
});
|
| 174 |
-
logging.addEventListener('change', () => { if (active) show(active).catch(fail); });
|
| 175 |
-
persist.addEventListener('change', () => {
|
| 176 |
-
const storage = persist.checked ? 'opfs' : 'memory';
|
| 177 |
-
localStorage.setItem('teaql-browser-order-storage', storage); replace(storage).catch(fail);
|
| 178 |
-
});
|
| 179 |
-
reset.addEventListener('click', async () => {
|
| 180 |
-
if (!active) return;
|
| 181 |
-
reset.disabled = true;
|
| 182 |
-
try { await active.client.reset(active.context); await seed(active); await show(active); }
|
| 183 |
-
catch (error) { fail(error); } finally { reset.disabled = false; }
|
| 184 |
-
});
|
| 185 |
-
replace(persist.checked ? 'opfs' : 'memory').catch(fail);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/src/sqlite.worker.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
| 1 |
-
import { startBrowserSQLiteWorker } from 'teaql-ts/sql/browser-sqlite-worker';
|
| 2 |
-
import sqliteWasmUrl from '@sqlite.org/sqlite-wasm/sqlite3.wasm?url';
|
| 3 |
-
|
| 4 |
-
startBrowserSQLiteWorker({ wasmUrl: sqliteWasmUrl });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/browser-sqlite/src/style.css
DELETED
|
@@ -1,14 +0,0 @@
|
|
| 1 |
-
:root { font: 16px/1.5 Inter, system-ui, sans-serif; color: #e8edf5; background: #090b10; }
|
| 2 |
-
body { margin: 0; }
|
| 3 |
-
main { width: min(760px, calc(100% - 40px)); margin: 10vh auto; }
|
| 4 |
-
.eyebrow { color: #d9ff52; font-size: 12px; font-weight: 800; letter-spacing: .16em; }
|
| 5 |
-
h1 { margin: 8px 0; font-size: clamp(36px, 7vw, 68px); letter-spacing: -.05em; }
|
| 6 |
-
.controls { display: flex; gap: 18px; align-items: center; margin: 32px 0; }
|
| 7 |
-
button { border: 0; border-radius: 5px; padding: 10px 14px; background: #d9ff52; font-weight: 800; }
|
| 8 |
-
#status { color: #aab4c4; }
|
| 9 |
-
pre { min-height: 260px; padding: 22px; overflow: auto; border: 1px solid #2b323e; border-radius: 8px; background: #11151c; color: #c6d1df; }
|
| 10 |
-
.evidence-scroll { overflow-x: auto; margin: 24px 0; }
|
| 11 |
-
.evidence-table { border-collapse: collapse; width: 100%; text-align: left; }
|
| 12 |
-
.evidence-table th, .evidence-table td { padding: 12px; border: 1px solid #2b323e; vertical-align: top; }
|
| 13 |
-
.evidence-table td { white-space: pre-wrap; overflow-wrap: anywhere; min-width: 110px; }
|
| 14 |
-
.evidence-table td:last-child { min-width: 320px; font-family: monospace; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/LICENSE
DELETED
|
@@ -1,202 +0,0 @@
|
|
| 1 |
-
Apache License
|
| 2 |
-
Version 2.0, January 2004
|
| 3 |
-
http://www.apache.org/licenses/
|
| 4 |
-
|
| 5 |
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
-
|
| 7 |
-
1. Definitions.
|
| 8 |
-
|
| 9 |
-
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
-
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
-
|
| 12 |
-
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
-
the copyright owner that is granting the License.
|
| 14 |
-
|
| 15 |
-
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
-
other entities that control, are controlled by, or are under common
|
| 17 |
-
control with that entity. For the purposes of this definition,
|
| 18 |
-
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
-
direction or management of such entity, whether by contract or
|
| 20 |
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
-
|
| 23 |
-
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
-
exercising permissions granted by this License.
|
| 25 |
-
|
| 26 |
-
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
-
including but not limited to software source code, documentation
|
| 28 |
-
source, and configuration files.
|
| 29 |
-
|
| 30 |
-
"Object" form shall mean any form resulting from mechanical
|
| 31 |
-
transformation or translation of a Source form, including but
|
| 32 |
-
not limited to compiled object code, generated documentation,
|
| 33 |
-
and conversions to other media types.
|
| 34 |
-
|
| 35 |
-
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
-
Object form, made available under the License, as indicated by a
|
| 37 |
-
copyright notice that is included in or attached to the work
|
| 38 |
-
(an example is provided in the Appendix below).
|
| 39 |
-
|
| 40 |
-
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
-
form, that is based on (or derived from) the Work and for which the
|
| 42 |
-
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
-
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
-
of this License, Derivative Works shall not include works that remain
|
| 45 |
-
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
-
the Work and Derivative Works thereof.
|
| 47 |
-
|
| 48 |
-
"Contribution" shall mean any work of authorship, including
|
| 49 |
-
the original version of the Work and any modifications or additions
|
| 50 |
-
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
-
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
-
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
-
means any form of electronic, verbal, or written communication sent
|
| 55 |
-
to the Licensor or its representatives, including but not limited to
|
| 56 |
-
communication on electronic mailing lists, source code control systems,
|
| 57 |
-
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
-
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
-
excluding communication that is conspicuously marked or otherwise
|
| 60 |
-
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
-
|
| 62 |
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
-
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
-
subsequently incorporated within the Work.
|
| 65 |
-
|
| 66 |
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
-
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
-
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
-
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
-
Work and such Derivative Works in Source or Object form.
|
| 72 |
-
|
| 73 |
-
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
-
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
-
(except as stated in this section) patent license to make, have made,
|
| 77 |
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
-
where such license applies only to those patent claims licensable
|
| 79 |
-
by such Contributor that are necessarily infringed by their
|
| 80 |
-
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
-
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
-
institute patent litigation against any entity (including a
|
| 83 |
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
-
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
-
or contributory patent infringement, then any patent licenses
|
| 86 |
-
granted to You under this License for that Work shall terminate
|
| 87 |
-
as of the date such litigation is filed.
|
| 88 |
-
|
| 89 |
-
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
-
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
-
modifications, and in Source or Object form, provided that You
|
| 92 |
-
meet the following conditions:
|
| 93 |
-
|
| 94 |
-
(a) You must give any other recipients of the Work or
|
| 95 |
-
Derivative Works a copy of this License; and
|
| 96 |
-
|
| 97 |
-
(b) You must cause any modified files to carry prominent notices
|
| 98 |
-
stating that You changed the files; and
|
| 99 |
-
|
| 100 |
-
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
-
that You distribute, all copyright, patent, trademark, and
|
| 102 |
-
attribution notices from the Source form of the Work,
|
| 103 |
-
excluding those notices that do not pertain to any part of
|
| 104 |
-
the Derivative Works; and
|
| 105 |
-
|
| 106 |
-
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
-
distribution, then any Derivative Works that You distribute must
|
| 108 |
-
include a readable copy of the attribution notices contained
|
| 109 |
-
within such NOTICE file, excluding those notices that do not
|
| 110 |
-
pertain to any part of the Derivative Works, in at least one
|
| 111 |
-
of the following places: within a NOTICE text file distributed
|
| 112 |
-
as part of the Derivative Works; within the Source form or
|
| 113 |
-
documentation, if provided along with the Derivative Works; or,
|
| 114 |
-
within a display generated by the Derivative Works, if and
|
| 115 |
-
wherever such third-party notices normally appear. The contents
|
| 116 |
-
of the NOTICE file are for informational purposes only and
|
| 117 |
-
do not modify the License. You may add Your own attribution
|
| 118 |
-
notices within Derivative Works that You distribute, alongside
|
| 119 |
-
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
-
that such additional attribution notices cannot be construed
|
| 121 |
-
as modifying the License.
|
| 122 |
-
|
| 123 |
-
You may add Your own copyright statement to Your modifications and
|
| 124 |
-
may provide additional or different license terms and conditions
|
| 125 |
-
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
-
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
-
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
-
the conditions stated in this License.
|
| 129 |
-
|
| 130 |
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
-
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
-
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
-
this License, without any additional terms or conditions.
|
| 134 |
-
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
-
the terms of any separate license agreement you may have executed
|
| 136 |
-
with Licensor regarding such Contributions.
|
| 137 |
-
|
| 138 |
-
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
-
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
-
except as required for reasonable and customary use in describing the
|
| 141 |
-
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
-
|
| 143 |
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
-
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
-
implied, including, without limitation, any warranties or conditions
|
| 148 |
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
-
appropriateness of using or redistributing the Work and assume any
|
| 151 |
-
risks associated with Your exercise of permissions under this License.
|
| 152 |
-
|
| 153 |
-
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
-
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
-
unless required by applicable law (such as deliberate and grossly
|
| 156 |
-
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
-
liable to You for damages, including any direct, indirect, special,
|
| 158 |
-
incidental, or consequential damages of any character arising as a
|
| 159 |
-
result of this License or out of the use or inability to use the
|
| 160 |
-
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
-
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
-
other commercial damages or losses), even if such Contributor
|
| 163 |
-
has been advised of the possibility of such damages.
|
| 164 |
-
|
| 165 |
-
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
-
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
-
or other liability obligations and/or rights consistent with this
|
| 169 |
-
License. However, in accepting such obligations, You may act only
|
| 170 |
-
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
-
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
-
defend, and hold each Contributor harmless for any liability
|
| 173 |
-
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
-
of your accepting any such warranty or additional liability.
|
| 175 |
-
|
| 176 |
-
END OF TERMS AND CONDITIONS
|
| 177 |
-
|
| 178 |
-
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
-
|
| 180 |
-
To apply the Apache License to your work, attach the following
|
| 181 |
-
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 182 |
-
replaced with your own identifying information. (Don't include
|
| 183 |
-
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
-
comment syntax for the file format. We also recommend that a
|
| 185 |
-
file or class name and description of purpose be included on the
|
| 186 |
-
same "printed page" as the copyright notice for easier
|
| 187 |
-
identification within third-party archives.
|
| 188 |
-
|
| 189 |
-
Copyright [yyyy] [name of copyright owner]
|
| 190 |
-
|
| 191 |
-
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
-
you may not use this file except in compliance with the License.
|
| 193 |
-
You may obtain a copy of the License at
|
| 194 |
-
|
| 195 |
-
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
-
|
| 197 |
-
Unless required by applicable law or agreed to in writing, software
|
| 198 |
-
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
-
See the License for the specific language governing permissions and
|
| 201 |
-
limitations under the License.
|
| 202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/package-lock.json
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
source/runtime/package.json
DELETED
|
@@ -1,188 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"name": "@teaql/teaql",
|
| 3 |
-
"version": "0.3.0",
|
| 4 |
-
"description": "TeaQL runtime and SQL data services for TypeScript",
|
| 5 |
-
"files": [
|
| 6 |
-
"dist",
|
| 7 |
-
"!dist/.sql-root-owned-backup-*"
|
| 8 |
-
],
|
| 9 |
-
"main": "dist/index.js",
|
| 10 |
-
"types": "dist/index.d.ts",
|
| 11 |
-
"exports": {
|
| 12 |
-
".": {
|
| 13 |
-
"types": "./dist/index.d.ts",
|
| 14 |
-
"import": "./dist/esm/index.js",
|
| 15 |
-
"require": "./dist/index.js",
|
| 16 |
-
"default": "./dist/index.js"
|
| 17 |
-
},
|
| 18 |
-
"./sql/core": {
|
| 19 |
-
"types": "./dist/sql/core.d.ts",
|
| 20 |
-
"import": "./dist/esm/sql/core.js",
|
| 21 |
-
"require": "./dist/sql/core.js",
|
| 22 |
-
"default": "./dist/sql/core.js"
|
| 23 |
-
},
|
| 24 |
-
"./sql/postgres": {
|
| 25 |
-
"types": "./dist/sql/postgres.d.ts",
|
| 26 |
-
"import": "./dist/esm/sql/postgres.js",
|
| 27 |
-
"require": "./dist/sql/postgres.js",
|
| 28 |
-
"default": "./dist/sql/postgres.js"
|
| 29 |
-
},
|
| 30 |
-
"./sql/mysql": {
|
| 31 |
-
"types": "./dist/sql/mysql.d.ts",
|
| 32 |
-
"import": "./dist/esm/sql/mysql.js",
|
| 33 |
-
"require": "./dist/sql/mysql.js",
|
| 34 |
-
"default": "./dist/sql/mysql.js"
|
| 35 |
-
},
|
| 36 |
-
"./sql/sqlite": {
|
| 37 |
-
"types": "./dist/sql/sqlite.d.ts",
|
| 38 |
-
"import": "./dist/esm/sql/sqlite.js",
|
| 39 |
-
"require": "./dist/sql/sqlite.js",
|
| 40 |
-
"default": "./dist/sql/sqlite.js"
|
| 41 |
-
},
|
| 42 |
-
"./sql/expo-sqlite": {
|
| 43 |
-
"types": "./dist/sql/expo-sqlite.d.ts",
|
| 44 |
-
"import": "./dist/esm/sql/expo-sqlite.js",
|
| 45 |
-
"require": "./dist/sql/expo-sqlite.js",
|
| 46 |
-
"default": "./dist/sql/expo-sqlite.js"
|
| 47 |
-
},
|
| 48 |
-
"./sql/browser-sqlite": {
|
| 49 |
-
"types": "./dist/sql/browser-sqlite.d.ts",
|
| 50 |
-
"import": "./dist/esm/sql/browser-sqlite.js",
|
| 51 |
-
"require": "./dist/sql/browser-sqlite.js",
|
| 52 |
-
"default": "./dist/sql/browser-sqlite.js"
|
| 53 |
-
},
|
| 54 |
-
"./sql/browser-sqlite-worker": {
|
| 55 |
-
"types": "./dist/sql/browser-sqlite-worker.d.ts",
|
| 56 |
-
"import": "./dist/esm/sql/browser-sqlite-worker.js",
|
| 57 |
-
"require": "./dist/sql/browser-sqlite-worker.js",
|
| 58 |
-
"default": "./dist/sql/browser-sqlite-worker.js"
|
| 59 |
-
},
|
| 60 |
-
"./telemetry/opentelemetry": {
|
| 61 |
-
"types": "./dist/telemetry/opentelemetry.d.ts",
|
| 62 |
-
"import": "./dist/esm/telemetry/opentelemetry.js",
|
| 63 |
-
"require": "./dist/telemetry/opentelemetry.js",
|
| 64 |
-
"default": "./dist/telemetry/opentelemetry.js"
|
| 65 |
-
}
|
| 66 |
-
},
|
| 67 |
-
"typesVersions": {
|
| 68 |
-
"*": {
|
| 69 |
-
"sql/core": [
|
| 70 |
-
"dist/sql/core.d.ts"
|
| 71 |
-
],
|
| 72 |
-
"sql/postgres": [
|
| 73 |
-
"dist/sql/postgres.d.ts"
|
| 74 |
-
],
|
| 75 |
-
"sql/mysql": [
|
| 76 |
-
"dist/sql/mysql.d.ts"
|
| 77 |
-
],
|
| 78 |
-
"sql/sqlite": [
|
| 79 |
-
"dist/sql/sqlite.d.ts"
|
| 80 |
-
],
|
| 81 |
-
"sql/expo-sqlite": [
|
| 82 |
-
"dist/sql/expo-sqlite.d.ts"
|
| 83 |
-
],
|
| 84 |
-
"sql/browser-sqlite": [
|
| 85 |
-
"dist/sql/browser-sqlite.d.ts"
|
| 86 |
-
],
|
| 87 |
-
"sql/browser-sqlite-worker": [
|
| 88 |
-
"dist/sql/browser-sqlite-worker.d.ts"
|
| 89 |
-
]
|
| 90 |
-
}
|
| 91 |
-
},
|
| 92 |
-
"scripts": {
|
| 93 |
-
"generate:query-parser": "node scripts/generate-query-parser.mjs",
|
| 94 |
-
"build": "npm run generate:query-parser && tsc && node scripts/build-esm.mjs",
|
| 95 |
-
"test": "jest",
|
| 96 |
-
"prepack": "npm run build"
|
| 97 |
-
},
|
| 98 |
-
"keywords": [
|
| 99 |
-
"teaql",
|
| 100 |
-
"query",
|
| 101 |
-
"database"
|
| 102 |
-
],
|
| 103 |
-
"author": "TeaQL",
|
| 104 |
-
"license": "Apache-2.0",
|
| 105 |
-
"repository": {
|
| 106 |
-
"type": "git",
|
| 107 |
-
"url": "git+https://github.com/teaql/teaql-ts.git"
|
| 108 |
-
},
|
| 109 |
-
"bugs": {
|
| 110 |
-
"url": "https://github.com/teaql/teaql-ts/issues"
|
| 111 |
-
},
|
| 112 |
-
"homepage": "https://teaql.io",
|
| 113 |
-
"sideEffects": false,
|
| 114 |
-
"publishConfig": {
|
| 115 |
-
"access": "public"
|
| 116 |
-
},
|
| 117 |
-
"devDependencies": {
|
| 118 |
-
"@opentelemetry/api-logs": "^0.221.0",
|
| 119 |
-
"@opentelemetry/context-async-hooks": "^2.10.0",
|
| 120 |
-
"@opentelemetry/core": "^2.10.0",
|
| 121 |
-
"@opentelemetry/exporter-logs-otlp-http": "^0.221.0",
|
| 122 |
-
"@opentelemetry/exporter-metrics-otlp-http": "^0.221.0",
|
| 123 |
-
"@opentelemetry/exporter-trace-otlp-http": "^0.221.0",
|
| 124 |
-
"@opentelemetry/resources": "^2.10.0",
|
| 125 |
-
"@opentelemetry/sdk-logs": "^0.221.0",
|
| 126 |
-
"@opentelemetry/sdk-metrics": "^2.10.0",
|
| 127 |
-
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
| 128 |
-
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
| 129 |
-
"@types/better-sqlite3": "^7.6.12",
|
| 130 |
-
"@types/jest": "^29.5.0",
|
| 131 |
-
"@types/node-fetch": "^2.6.13",
|
| 132 |
-
"@types/pg": "^8.11.0",
|
| 133 |
-
"better-sqlite3": "^12.10.0",
|
| 134 |
-
"esbuild": "^0.28.2",
|
| 135 |
-
"jest": "^29.5.0",
|
| 136 |
-
"jest-util": "^29.7.0",
|
| 137 |
-
"mysql2": "^3.11.0",
|
| 138 |
-
"peggy": "^5.1.0",
|
| 139 |
-
"pg": "^8.12.0",
|
| 140 |
-
"pg-query-stream": "^4.7.0",
|
| 141 |
-
"ts-jest": "^29.1.0",
|
| 142 |
-
"typescript": "5.4.5"
|
| 143 |
-
},
|
| 144 |
-
"dependencies": {
|
| 145 |
-
"node-fetch": "^2.7.0"
|
| 146 |
-
},
|
| 147 |
-
"peerDependencies": {
|
| 148 |
-
"@opentelemetry/api": "^1.9.1",
|
| 149 |
-
"@opentelemetry/api-logs": "^0.221.0",
|
| 150 |
-
"@sqlite.org/sqlite-wasm": "3.53.0-build1",
|
| 151 |
-
"better-sqlite3": "^12.10.0",
|
| 152 |
-
"expo-sqlite": "*",
|
| 153 |
-
"mysql2": "^3.11.0",
|
| 154 |
-
"pg": "^8.12.0",
|
| 155 |
-
"pg-query-stream": "^4.7.0"
|
| 156 |
-
},
|
| 157 |
-
"peerDependenciesMeta": {
|
| 158 |
-
"@opentelemetry/api": {
|
| 159 |
-
"optional": true
|
| 160 |
-
},
|
| 161 |
-
"@opentelemetry/api-logs": {
|
| 162 |
-
"optional": true
|
| 163 |
-
},
|
| 164 |
-
"@sqlite.org/sqlite-wasm": {
|
| 165 |
-
"optional": true
|
| 166 |
-
},
|
| 167 |
-
"better-sqlite3": {
|
| 168 |
-
"optional": true
|
| 169 |
-
},
|
| 170 |
-
"mysql2": {
|
| 171 |
-
"optional": true
|
| 172 |
-
},
|
| 173 |
-
"pg": {
|
| 174 |
-
"optional": true
|
| 175 |
-
},
|
| 176 |
-
"pg-query-stream": {
|
| 177 |
-
"optional": true
|
| 178 |
-
},
|
| 179 |
-
"expo-sqlite": {
|
| 180 |
-
"optional": true
|
| 181 |
-
}
|
| 182 |
-
},
|
| 183 |
-
"directories": {
|
| 184 |
-
"example": "examples",
|
| 185 |
-
"test": "tests"
|
| 186 |
-
},
|
| 187 |
-
"type": "commonjs"
|
| 188 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/build-esm.mjs
DELETED
|
@@ -1,28 +0,0 @@
|
|
| 1 |
-
import {rm, writeFile} from 'node:fs/promises';
|
| 2 |
-
import {build} from 'esbuild';
|
| 3 |
-
|
| 4 |
-
const output = new URL('../dist/esm/', import.meta.url);
|
| 5 |
-
await rm(output, {recursive: true, force: true});
|
| 6 |
-
await build({
|
| 7 |
-
entryPoints: {
|
| 8 |
-
index: 'src/index.ts',
|
| 9 |
-
'sql/core': 'src/sql/core.ts',
|
| 10 |
-
'sql/postgres': 'src/sql/postgres.ts',
|
| 11 |
-
'sql/mysql': 'src/sql/mysql.ts',
|
| 12 |
-
'sql/sqlite': 'src/sql/sqlite.ts',
|
| 13 |
-
'sql/expo-sqlite': 'src/sql/expo-sqlite.ts',
|
| 14 |
-
'sql/browser-sqlite': 'src/sql/browser-sqlite.ts',
|
| 15 |
-
'sql/browser-sqlite-worker': 'src/sql/browser-sqlite-worker.ts',
|
| 16 |
-
'telemetry/opentelemetry': 'src/telemetry/opentelemetry.ts',
|
| 17 |
-
},
|
| 18 |
-
outdir: 'dist/esm',
|
| 19 |
-
bundle: true,
|
| 20 |
-
splitting: true,
|
| 21 |
-
chunkNames: 'chunks/[name]-[hash]',
|
| 22 |
-
packages: 'external',
|
| 23 |
-
platform: 'neutral',
|
| 24 |
-
format: 'esm',
|
| 25 |
-
target: 'es2020',
|
| 26 |
-
sourcemap: true,
|
| 27 |
-
});
|
| 28 |
-
await writeFile(new URL('package.json', output), '{"type":"module"}\n');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/fixtures/checker-overlap-command.sh
DELETED
|
@@ -1,13 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
# Test-only npm stand-in; never invoked by a real consumer verification.
|
| 5 |
-
marker='PASS TypeScript generated Checker overlap: 4 scenarios; real Required rejection, no rejected commands/business SQL/audit; transactions serialized'
|
| 6 |
-
case "${TEAQL_CHECKER_GUARD_CONTROL:?test mode required}" in
|
| 7 |
-
timeout) printf '%s\n' "$marker"; exec sleep 30 ;;
|
| 8 |
-
nonzero) printf '%s\n' "$marker"; exit 7 ;;
|
| 9 |
-
missing) echo 'process exited successfully without completing Checker assertions' ;;
|
| 10 |
-
partial) printf 'prefix %s suffix\n' "$marker" ;;
|
| 11 |
-
success) printf '%s\n' "$marker" ;;
|
| 12 |
-
*) exit 2 ;;
|
| 13 |
-
esac
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/generate-query-parser.mjs
DELETED
|
@@ -1,9 +0,0 @@
|
|
| 1 |
-
import {readFile, writeFile} from 'node:fs/promises';
|
| 2 |
-
import peggy from 'peggy';
|
| 3 |
-
|
| 4 |
-
const grammar = await readFile(new URL('../src/parser/query.pegjs', import.meta.url), 'utf8');
|
| 5 |
-
const source = peggy.generate(grammar, {format: 'es', output: 'source'});
|
| 6 |
-
await writeFile(
|
| 7 |
-
new URL('../src/parser/query-parser.generated.ts', import.meta.url),
|
| 8 |
-
`// @ts-nocheck -- generated by scripts/generate-query-parser.mjs\n${source}\n`,
|
| 9 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/run-checker-overlap.sh
DELETED
|
@@ -1,32 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
# Requires GNU coreutils timeout (including --kill-after). Guard only this
|
| 5 |
-
# Checker consumer; compilation and unrelated examples retain their own flows.
|
| 6 |
-
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 7 |
-
log="${1:?usage: run-checker-overlap.sh LOG_FILE}"
|
| 8 |
-
seconds="${TEAQL_TRACE_CHAIN_CHECKER_TIMEOUT_SECONDS:-60}"
|
| 9 |
-
if [[ ! "$seconds" =~ ^[1-9][0-9]*$ ]]; then
|
| 10 |
-
echo 'FAIL: Checker timeout must be a positive integer number of seconds' >&2
|
| 11 |
-
exit 2
|
| 12 |
-
fi
|
| 13 |
-
marker='PASS TypeScript generated Checker overlap: 4 scenarios; real Required rejection, no rejected commands/business SQL/audit; transactions serialized'
|
| 14 |
-
|
| 15 |
-
if (
|
| 16 |
-
cd "$repo/examples/trace-chain"
|
| 17 |
-
timeout --kill-after=5s "${seconds}s" env -u TEAQL_ALLOW_SENSITIVE_PLAINTEXT_LOGS \
|
| 18 |
-
npm run test:checker-overlap
|
| 19 |
-
) > "$log" 2>&1; then
|
| 20 |
-
:
|
| 21 |
-
else
|
| 22 |
-
status=$?
|
| 23 |
-
tail -n 20 "$log" >&2
|
| 24 |
-
printf 'FAIL: Checker consumer exit %s; evidence %s\n' "$status" "$log" >&2
|
| 25 |
-
exit "$status"
|
| 26 |
-
fi
|
| 27 |
-
if ! grep -Fxq -- "$marker" "$log"; then
|
| 28 |
-
tail -n 20 "$log" >&2
|
| 29 |
-
printf 'FAIL: Checker consumer omitted its exact PASS marker; evidence %s\n' "$log" >&2
|
| 30 |
-
exit 1
|
| 31 |
-
fi
|
| 32 |
-
tail -n 2 "$log"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/test-checker-overlap-guard.sh
DELETED
|
@@ -1,32 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 5 |
-
evidence="${1:-$(mktemp -d /tmp/teaql-ts-checker-guard-controls.XXXXXX)}"
|
| 6 |
-
mkdir -p "$evidence/bin"
|
| 7 |
-
evidence="$(cd "$evidence" && pwd)"
|
| 8 |
-
ln -s "$repo/scripts/fixtures/checker-overlap-command.sh" "$evidence/bin/npm"
|
| 9 |
-
|
| 10 |
-
for control in timeout nonzero missing partial success; do
|
| 11 |
-
case "$control" in
|
| 12 |
-
timeout) expected=124 ;;
|
| 13 |
-
nonzero) expected=7 ;;
|
| 14 |
-
missing|partial) expected=1 ;;
|
| 15 |
-
success) expected=0 ;;
|
| 16 |
-
esac
|
| 17 |
-
if PATH="$evidence/bin:$PATH" TEAQL_CHECKER_GUARD_CONTROL="$control" \
|
| 18 |
-
TEAQL_TRACE_CHAIN_CHECKER_TIMEOUT_SECONDS=1 \
|
| 19 |
-
bash "$repo/scripts/run-checker-overlap.sh" "$evidence/$control-consumer.log" \
|
| 20 |
-
> "$evidence/$control-guard.log" 2>&1; then
|
| 21 |
-
actual=0
|
| 22 |
-
else
|
| 23 |
-
actual=$?
|
| 24 |
-
fi
|
| 25 |
-
if [[ "$actual" != "$expected" ]]; then
|
| 26 |
-
printf 'FAIL: guard control %s expected %s got %s; evidence %s\n' \
|
| 27 |
-
"$control" "$expected" "$actual" "$evidence" >&2
|
| 28 |
-
exit 1
|
| 29 |
-
fi
|
| 30 |
-
printf 'GUARD_CONTROL %s exit=%s expected=%s\n' "$control" "$actual" "$expected"
|
| 31 |
-
done
|
| 32 |
-
printf 'PASS: Checker verifier guard controls; evidence %s\n' "$evidence"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/verify-checker-overlap.sh
DELETED
|
@@ -1,20 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 5 |
-
evidence="${TEAQL_TRACE_CHAIN_CHECKER_EVIDENCE:-$(mktemp -d /tmp/teaql-ts-checker-overlap.XXXXXX)}"
|
| 6 |
-
mkdir -p "$evidence"
|
| 7 |
-
evidence="$(cd "$evidence" && pwd)"
|
| 8 |
-
database="${TEAQL_TRACE_CHAIN_CHECKER_DB:-$evidence/checker.sqlite}"
|
| 9 |
-
export TEAQL_TRACE_CHAIN_CHECKER_EVIDENCE="$evidence"
|
| 10 |
-
export TEAQL_TRACE_CHAIN_CHECKER_DB="$database"
|
| 11 |
-
|
| 12 |
-
# file: dependencies execute dist. Rebuild without installing packages or
|
| 13 |
-
# resetting data, then replay both modes/orderings against one retained DB.
|
| 14 |
-
(cd "$repo" && npm run build) > "$evidence/runtime-build.log" 2>&1
|
| 15 |
-
(cd "$repo/examples/trace-chain" && npm run build) > "$evidence/app-build.log" 2>&1
|
| 16 |
-
for attempt in 1 2; do
|
| 17 |
-
TEAQL_TRACE_CHAIN_CHECKER_RUN="attempt-$attempt" \
|
| 18 |
-
bash "$repo/scripts/run-checker-overlap.sh" "$evidence/attempt-$attempt.log"
|
| 19 |
-
done
|
| 20 |
-
printf 'PASS: retained Checker overlap evidence %s\n' "$evidence"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/verify-current-aggregate.sh
DELETED
|
@@ -1,21 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 4 |
-
evidence="${TEAQL_TS_AGGREGATE_EVIDENCE:-$(mktemp -d -t teaql-ts-aggregate-gate.XXXXXXXX)}"
|
| 5 |
-
mkdir -p "$evidence"
|
| 6 |
-
database="${TEAQL_TRACE_CHAIN_MEMBERSHIP_DB:-$evidence/membership.sqlite}"
|
| 7 |
-
unset TEAQL_ALLOW_SENSITIVE_PLAINTEXT_LOGS
|
| 8 |
-
(cd "$repo" && npm run build) > "$evidence/runtime-build.log" 2>&1
|
| 9 |
-
(cd "$repo/examples/trace-chain" && npm run build) > "$evidence/app-build.log" 2>&1
|
| 10 |
-
(cd "$repo/examples/trace-chain/lib" && rg --files --hidden --no-ignore -0 | sort -z | xargs -0 sha256sum) > "$evidence/library-before.sha256"
|
| 11 |
-
for round in 1 2; do
|
| 12 |
-
(cd "$repo" && timeout --kill-after=5s 120s npm test -- --runInBand \
|
| 13 |
-
tests/numeric-partition-trace.test.ts tests/sql-relation-membership.test.ts) > "$evidence/native-$round.log" 2>&1
|
| 14 |
-
(cd "$repo/examples/trace-chain" && TEAQL_TRACE_CHAIN_MEMBERSHIP_DB="$database" \
|
| 15 |
-
timeout --kill-after=5s 90s node node_modules/ts-node/dist/bin.js aggregate-membership.ts) > "$evidence/run-$round.log" 2>&1
|
| 16 |
-
rg -Fxq 'PASS TypeScript generated aggregate membership: 24 scenarios; actual SQL, complete safe ancestry, FK and independent filtered views' "$evidence/run-$round.log"
|
| 17 |
-
[[ "$(rg -c '^TS_AGGREGATE_MEMBERSHIP ' "$evidence/run-$round.log")" == 24 ]]
|
| 18 |
-
done
|
| 19 |
-
(cd "$repo/examples/trace-chain/lib" && rg --files --hidden --no-ignore -0 | sort -z | xargs -0 sha256sum) > "$evidence/library-after.sha256"
|
| 20 |
-
cmp "$evidence/library-before.sha256" "$evidence/library-after.sha256"
|
| 21 |
-
echo "PASS TypeScript current aggregate gate: native and generated twice; retained database=$database; evidence=$evidence"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source/runtime/scripts/verify-examples.sh
DELETED
|
@@ -1,80 +0,0 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
repo="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 5 |
-
# file: dependencies resolve the package's dist entry points, not TypeScript source.
|
| 6 |
-
# Rebuild here so examples can never silently validate stale checked-in output.
|
| 7 |
-
(cd "$repo" && npm run build)
|
| 8 |
-
(cd "$repo" && npm test -- --runInBand tests/sql-relation-membership.test.ts)
|
| 9 |
-
mkdir -p "$repo/.local"
|
| 10 |
-
expected=(browser-sqlite conformance ensure-schema-bootstrap facet-trace order-management school-management task-board trace-chain)
|
| 11 |
-
mapfile -t actual < <(find "$repo/examples" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort)
|
| 12 |
-
if [[ "${actual[*]}" != "${expected[*]}" ]]; then
|
| 13 |
-
echo "example inventory changed; update scripts/verify-examples.sh: ${actual[*]}" >&2
|
| 14 |
-
exit 1
|
| 15 |
-
fi
|
| 16 |
-
|
| 17 |
-
for example in conformance ensure-schema-bootstrap school-management; do
|
| 18 |
-
(
|
| 19 |
-
cd "$repo/examples/$example"
|
| 20 |
-
npm install
|
| 21 |
-
npm run build
|
| 22 |
-
if [[ "$example" == school-management ]]; then
|
| 23 |
-
npx ts-node app.ts
|
| 24 |
-
else
|
| 25 |
-
npm start
|
| 26 |
-
fi
|
| 27 |
-
)
|
| 28 |
-
done
|
| 29 |
-
(cd "$repo/examples/order-management" && npm install && npm run build && npm start)
|
| 30 |
-
(cd "$repo/examples/task-board" && npm install && npm run build)
|
| 31 |
-
(cd "$repo/examples/browser-sqlite" && npm install && npm run build && npm run smoke && npm run smoke:orders)
|
| 32 |
-
(
|
| 33 |
-
cd "$repo/examples/trace-chain"
|
| 34 |
-
npm install
|
| 35 |
-
npm run build
|
| 36 |
-
for attempt in 1 2; do
|
| 37 |
-
graph_log="$(mktemp -t teaql-ts-graph.XXXXXX.log)"
|
| 38 |
-
npm start | tee "$graph_log"
|
| 39 |
-
rg -Fxq 'PASS TypeScript graph identity controls: duplicate, missing and equal-ID type collapse rejected' "$graph_log"
|
| 40 |
-
rg -Fq 'GRAPH IDENTITY EVIDENCE ' "$graph_log"
|
| 41 |
-
rg -Fxq 'PASS TypeScript generated trace-chain example: 7 checks' "$graph_log"
|
| 42 |
-
[[ "$(rg -c '^PRIVATE_LINEAGE_OBSERVED ' "$graph_log")" == 8 ]]
|
| 43 |
-
[[ "$(rg -c '^PASS TypeScript complete private lineage:' "$graph_log")" == 8 ]]
|
| 44 |
-
done
|
| 45 |
-
env -u TEAQL_TRACE_CHAIN_SCENARIO npm run test:shared-reference
|
| 46 |
-
env -u TEAQL_TRACE_CHAIN_SCENARIO npm run test:shared-reference
|
| 47 |
-
npm run test:page
|
| 48 |
-
npm run test:page
|
| 49 |
-
npm run test:stream-capture
|
| 50 |
-
npm run test:stream-capture
|
| 51 |
-
)
|
| 52 |
-
for attempt in 1 2; do
|
| 53 |
-
aggregate_log="$(mktemp -t teaql-ts-aggregate.XXXXXX.log)"
|
| 54 |
-
(cd "$repo/examples/trace-chain" && npm run test:relation-aggregate) | tee "$aggregate_log"
|
| 55 |
-
rg -Fq 'FORWARD_NOTLOADED_OBSERVED {"logging":true' "$aggregate_log"
|
| 56 |
-
rg -Fq 'FORWARD_NOTLOADED_OBSERVED {"logging":false' "$aggregate_log"
|
| 57 |
-
done
|
| 58 |
-
bash "$repo/scripts/verify-current-aggregate.sh"
|
| 59 |
-
for attempt in 1 2; do
|
| 60 |
-
checker_log="$(mktemp -t teaql-ts-checker.XXXXXX.log)"
|
| 61 |
-
TEAQL_TRACE_CHAIN_CHECKER_RUN="verify-examples-$attempt" \
|
| 62 |
-
bash "$repo/scripts/run-checker-overlap.sh" "$checker_log"
|
| 63 |
-
done
|
| 64 |
-
for attempt in 1 2; do
|
| 65 |
-
plan_log="$(mktemp -t teaql-ts-plan-items.XXXXXX.log)"
|
| 66 |
-
(cd "$repo/examples/trace-chain" && timeout --kill-after=5s 90s npm run test:plan-item-lineage) | tee "$plan_log"
|
| 67 |
-
rg -Fxq 'PASS TypeScript generated plan item lineage: 4 scenarios; one plan, ordered same-type items, sibling privacy, independent next request' "$plan_log"
|
| 68 |
-
done
|
| 69 |
-
bash "$repo/examples/facet-trace/verify.sh"
|
| 70 |
-
bootstrap_directory="$(mktemp -d -t teaql-ts-bootstrap.XXXXXXXX)"
|
| 71 |
-
for attempt in 1 2; do
|
| 72 |
-
bootstrap_log="$bootstrap_directory/round-$attempt.log"
|
| 73 |
-
(cd "$repo/examples/trace-chain" && TEAQL_TRACE_CHAIN_BOOTSTRAP_DB="$bootstrap_directory/bootstrap.sqlite" \
|
| 74 |
-
timeout --kill-after=5s 90s npm run test:bootstrap-intent) | tee "$bootstrap_log"
|
| 75 |
-
rg -Fxq 'PASS TypeScript generated bootstrap intent: logging off/on, committed audit, repeat no writes, unchanged generated library' "$bootstrap_log"
|
| 76 |
-
for logging in false true; do
|
| 77 |
-
rg -Fq "\"path\":\"generated default bootstrap\",\"logging\":$logging,\"firstWrites\":$((2-attempt)),\"repeatWrites\":0" "$bootstrap_log"
|
| 78 |
-
done
|
| 79 |
-
done
|
| 80 |
-
echo "PASS: all TypeScript examples"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|