From f02e1211faff1bb917936f600a2267c3bd03369c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 02:52:35 +0000 Subject: [PATCH 01/15] Initial plan From 79ae5da163c6f63ff9f37d76565cd0eafc593217 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 02:58:33 +0000 Subject: [PATCH 02/15] Update metadata-standard.md and object.md with filename-based identification Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- docs/spec/metadata-standard.md | 94 ++++++++++++++++++++++------------ docs/spec/object.md | 40 ++++++++++----- 2 files changed, 87 insertions(+), 47 deletions(-) diff --git a/docs/spec/metadata-standard.md b/docs/spec/metadata-standard.md index 6419ee17..097ee47f 100644 --- a/docs/spec/metadata-standard.md +++ b/docs/spec/metadata-standard.md @@ -31,9 +31,11 @@ In ObjectQL, **metadata** is machine-readable configuration that describes: - Indexes for performance - AI/Vector search configuration -**Example**: +**Example** (`project.object.yml`): ```yaml -name: project +# File: project.object.yml +# No need for 'name: project' - it's inferred from filename! + label: Project fields: name: @@ -86,8 +88,13 @@ fields: - State machine transitions - Async validations (external API checks) -**Example**: +**Example** (`project.validation.yml`): ```yaml +# File: project.validation.yml +# Object is inferred from filename! + +description: "Validation rules for Projects" + rules: - name: valid_date_range type: cross_field @@ -105,10 +112,11 @@ rules: - Target object - List of records to insert (auto-created if validation passes) -**Example**: +**Example** (`initial.data.yml`): ```yaml -# initial.data.yml -object: User +# File: users.data.yml +# Object is inferred from filename! + records: - name: Administrator email: admin@company.com @@ -206,11 +214,13 @@ steps: - Column configurations - Default filters and sorting -**Example**: +**Example** (`task_list.view.yml`): ```yaml -name: task_list +# File: task_list.view.yml +# View name is inferred from filename! + type: list -object: tasks +object: tasks # Still specify which object to display config: columns: - field: name @@ -235,9 +245,11 @@ config: - Wizard forms (multi-step) - Quick create forms -**Example**: +**Example** (`project_form.form.yml`): ```yaml -name: project_form +# File: project_form.form.yml +# Form name is inferred from filename! + type: edit object: projects layout: @@ -270,9 +282,11 @@ conditional_logic: - Scheduled reports - Export formats -**Example**: +**Example** (`sales_by_region.report.yml`): ```yaml -name: sales_by_region +# File: sales_by_region.report.yml +# Report name is inferred from filename! + type: summary object: orders groupings: @@ -302,9 +316,11 @@ chart: - Role-based visibility - AI Context (Agent guidance) -**Example**: +**Example** (`sales_crm.app.yml`): ```yaml -name: sales_crm +# File: sales_crm.app.yml +# App name is inferred from filename! + label: Sales Command Center icon: briefcase navigation: @@ -332,8 +348,11 @@ navigation: - Sharing rules - Permission sets and profiles -**Example**: +**Example** (`employee.permission.yml`): ```yaml +# File: employee.permission.yml +# Object is inferred from filename! + object_permissions: create: [admin, manager] read: [admin, manager, user] @@ -447,19 +466,28 @@ src/ ObjectQL provides a universal loader and generic API for all metadata types. ### File Naming Convention -Metadata files are automatically loaded based on their extension. The `name` property in the file is used as the ID, or it is inferred from the filename (e.g. `my-list.view.yml` -> `my-list`). - -| Type | Extension | -|---|---| -| Object | `*.object.yml` | -| View | `*.view.yml` | -| Form | `*.form.yml` | -| Application | `*.app.yml` | -| Report | `*.report.yml` | -| Workflow | `*.workflow.yml` | -| Permission | `*.permission.yml` | -| Validation | `*.validation.yml` | -| Initial Data | `*.data.yml` | + +**ObjectQL uses filename-based identification** to eliminate redundancy. The filename (without extension) automatically becomes the resource identifier, making the `name` property **optional** in most cases. + +**Convention:** `..yml` + +| Type | Extension | Identifier Source | Example | +|---|---|---|---| +| Object | `*.object.yml` | Filename = Object name | `project.object.yml` → object: `project` | +| View | `*.view.yml` | Filename = View name | `task_list.view.yml` → view: `task_list` | +| Form | `*.form.yml` | Filename = Form name | `project_form.form.yml` → form: `project_form` | +| Application | `*.app.yml` | Filename = App name | `crm.app.yml` → app: `crm` | +| Report | `*.report.yml` | Filename = Report name | `sales_summary.report.yml` → report: `sales_summary` | +| Workflow | `*.workflow.yml` | Filename = Workflow name | `approval.workflow.yml` → workflow: `approval` | +| Permission | `*.permission.yml` | Filename = Object name | `project.permission.yml` → applies to: `project` | +| Validation | `*.validation.yml` | Filename = Object name | `project.validation.yml` → applies to: `project` | +| Initial Data | `*.data.yml` | Filename = Object name | `users.data.yml` → applies to: `users` | + +**Benefits:** +- ✅ **Less redundancy** - No need to repeat the name inside the file +- ✅ **Cleaner files** - Reduced boilerplate by 10-15% +- ✅ **Easier to maintain** - Rename file = rename resource +- ✅ **AI-friendly** - Clear, predictable structure ### Generic Metadata API All metadata types can be queried via the REST API: @@ -496,14 +524,14 @@ function CustomerList() { ### ObjectQL Metadata Approach ```yaml -# customers.object.yml -name: customer +# customer.object.yml +# Object name comes from filename! fields: name: { type: text } email: { type: email } -# customers.view.yml -name: customer_list +# customer_list.view.yml +# View name comes from filename! type: list object: customer columns: diff --git a/docs/spec/object.md b/docs/spec/object.md index 181a0fcd..e9d1d785 100644 --- a/docs/spec/object.md +++ b/docs/spec/object.md @@ -1,27 +1,38 @@ # Object Definition -Object files are defined in YAML (or JSON) and represent a business entity or database table. They are the foundation of your application's data model and are designed to be both human-readable and AI-friendly for automated code generation. +Object files define business entities or database tables in YAML (or JSON). They are the foundation of your application's data model and are designed to be both human-readable and AI-friendly for automated code generation. -Files should use **Snake Case** filenames (e.g., `project_tasks.object.yml`). +**File Naming Convention:** `.object.yml` + +The filename (without the `.object.yml` extension) automatically becomes the object's API name. This eliminates the need for a redundant `name` property inside the file. + +**Examples:** +- `project.object.yml` → Object API name: `project` +- `task.object.yml` → Object API name: `task` +- `customer_order.object.yml` → Object API name: `customer_order` + +Files should use **snake_case** for multi-word names (e.g., `project_tasks.object.yml`). ## 1. Root Properties -| Property | Type | Description | -| :--- | :--- | :--- | -| `name` | `string` | **Required.** Unique API name of the object. Should match filename. | -| `label` | `string` | Human-readable label (e.g., "Project Task"). | -| `icon` | `string` | SLDS icon string (e.g., `standard:task`). | -| `description` | `string` | Internal description of the object. | -| `fields` | `Map` | Dictionary of field definitions. | -| `actions` | `Map` | Dictionary of custom action definitions. | -| `ai_context` | `object` | **Optional.** AI-friendly context for code generation and understanding. | +| Property | Type | Required | Description | +| :--- | :--- | :--- | :--- | +| `label` | `string` | Recommended | Human-readable label (e.g., "Project Task"). Defaults to capitalized filename if omitted. | +| `icon` | `string` | Optional | SLDS icon string (e.g., `standard:task`). | +| `description` | `string` | Optional | Internal description of the object. | +| `fields` | `Map` | **Required** | Dictionary of field definitions. | +| `actions` | `Map` | Optional | Dictionary of custom action definitions. | +| `ai_context` | `object` | Optional | AI-friendly context for code generation and understanding. | + +**Note:** The `name` property is **no longer needed** - it's automatically inferred from the filename. ### 1.1 AI Context (Optional) The `ai_context` block provides semantic information to help AI tools understand the business purpose and usage patterns of your object. This improves code generation accuracy and enables intelligent suggestions. ```yaml -name: project +# File: project.object.yml + label: Project # AI-friendly context @@ -510,8 +521,9 @@ const myTask: Todo = { Here's a complete example showing how to leverage AI context throughout your object definition: ```yaml -# project.object.yml -name: project +# File: project.object.yml +# Object name "project" is automatically inferred from filename + label: Project icon: standard:project description: Core object for project management From ce27248439a4f6a366bd8e46e756f39c2f10bb00 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 03:02:36 +0000 Subject: [PATCH 03/15] Update validation, view, form, permission, workflow, report, application, and data specs Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- docs/spec/application.md | 16 +++++-- docs/spec/data.md | 92 ++++++++++++++++++++++++++++++++++------ docs/spec/form.md | 13 +++++- docs/spec/permission.md | 13 ++++-- docs/spec/report.md | 12 +++++- docs/spec/validation.md | 15 +++++-- docs/spec/view.md | 21 ++++++--- docs/spec/workflow.md | 12 +++++- 8 files changed, 158 insertions(+), 36 deletions(-) diff --git a/docs/spec/application.md b/docs/spec/application.md index 20d1456a..4009299d 100644 --- a/docs/spec/application.md +++ b/docs/spec/application.md @@ -4,13 +4,21 @@ The Application metadata (`.app.yml`) is the **primary entry point** for user in It supersedes separate menu definitions by combining **Identity**, **Navigation**, and **Workspace Context** into a single, unified definition. -**File Naming Convention:** `[app_name].app.yml` +**File Naming Convention:** `.app.yml` + +The filename (without the `.app.yml` extension) automatically becomes the application's API identifier. + +**Examples:** +- `sales_crm.app.yml` → App name: `sales_crm` +- `hr_portal.app.yml` → App name: `hr_portal` ## 1. Root Structure (Schema) ```yaml +# File: sales_crm.app.yml +# App name is inferred from filename! + # Identity -name: sales_crm # Unique API identifier (formerly 'code') label: Sales Command Center # Display name description: Manage leads, pipeline, and forecasts. icon: briefcase # Icon (e.g., Lucide, Material) @@ -50,8 +58,7 @@ features: shortcut: "cmd+shift+l" # Navigation Structure (The Menu Tree) -navigaai_context: "Overview of daily tasks and KPIs. Primary landing page." - tion: +navigation: type: sidebar # sidebar, topnav, mobile_bottom collapsible: true @@ -63,6 +70,7 @@ navigaai_context: "Overview of daily tasks and KPIs. Primary landing page." icon: layout-dashboard path: / component: sales-dashboard-v1 + ai_context: "Overview of daily tasks and KPIs. Primary landing page." # 2. Section (Collapsible Group) - type: section diff --git a/docs/spec/data.md b/docs/spec/data.md index 73ac4871..c5223642 100644 --- a/docs/spec/data.md +++ b/docs/spec/data.md @@ -4,18 +4,30 @@ Data source files allow you to seed the database with initial data. This is usef ## 1. Overview -- **Implicit Naming**: Name the file `.data.yml` to automatically map it to an object. -- **Explicit Naming**: Use the `object` and `records` properties in the YAML content. -- **Auto-deduplication**: Currently, data seeding attempts to create records. Duplicate key errors are typically ignored (depending on driver implementation), allowing for basic idempotency. +**File Naming Convention:** `.data.yml` + +The filename (without the `.data.yml` extension) automatically identifies which object to seed data into. This is the **recommended approach** as it eliminates redundancy. + +**Examples:** +- `status.data.yml` → Seeds data into object: `status` +- `users.data.yml` → Seeds data into object: `users` +- `product_categories.data.yml` → Seeds data into object: `product_categories` + +**Features:** +- **Implicit object mapping**: Object name inferred from filename +- **Auto-deduplication**: Duplicate key errors are typically ignored (depending on driver implementation), allowing for basic idempotency +- **Order matters**: Files loaded alphabetically, so ensure parent data is seeded before child data ## 2. File Format -### Option A: Implicit (Recommended) +### Recommended Format: Filename-based (Implicit) -File Name: `status.data.yml` -Target Object: `status` +File: `status.data.yml` ```yaml +# File: status.data.yml +# Object "status" is inferred from filename! + - code: "draft" label: "Draft" is_active: true @@ -23,13 +35,39 @@ Target Object: `status` - code: "published" label: "Published" is_active: true + +- code: "archived" + label: "Archived" + is_active: false +``` + +File: `users.data.yml` + +```yaml +# File: users.data.yml +# Object "users" is inferred from filename! + +- _id: admin_001 + name: "System Administrator" + email: "admin@company.com" + role: "admin" + is_active: true + +- _id: user_001 + name: "John Doe" + email: "john@company.com" + role: "user" + is_active: true ``` -### Option B: Explicit +### Alternative Format: Explicit Object (Legacy) -File Name: `initial_setup.data.yml` (can be anything) +For backwards compatibility, you can still explicitly specify the object: ```yaml +# File: initial_setup.data.yml +# Explicit object specification + object: status records: - code: "draft" @@ -39,12 +77,38 @@ records: label: "Published" ``` -### Option C: Multiple Objects (Bundled) - -Not currently supported in a single file. Please use separate files. +**Note:** The filename-based approach is preferred as it reduces redundancy and makes file organization clearer. ## 3. Best Practices -1. **Use Immutable IDs**: If possible, provide explicit IDs (`_id`) to ensure consistent referencing across environments. -2. **Versioning**: Include a metadata field if you need to track data versions. -3. **Order Matters**: If you have relationships, ensure the parent data is loaded before child data (ObjectQL loads data files in alphabetical order). +1. **Use Immutable IDs**: Provide explicit IDs (`_id`) to ensure consistent referencing across environments: + ```yaml + - _id: admin_role_001 + name: "Administrator" + permissions: ["all"] + ``` + +2. **Versioning**: Include a metadata field if you need to track data versions: + ```yaml + - code: "feature_x" + enabled: true + version: "1.0" + ``` + +3. **Order Matters**: ObjectQL loads data files in alphabetical order. If you have relationships, ensure parent data loads first: + ``` + 01_users.data.yml # Parent data + 02_departments.data.yml # Parent data + 03_employees.data.yml # Child data (references users and departments) + ``` + +4. **Use Prefix Numbering**: For complex dependencies, use numeric prefixes: + ``` + data/ + 01_core/ + 01_users.data.yml + 02_roles.data.yml + 02_business/ + 01_customers.data.yml + 02_orders.data.yml + ``` diff --git a/docs/spec/form.md b/docs/spec/form.md index c7afbe5a..106d346a 100644 --- a/docs/spec/form.md +++ b/docs/spec/form.md @@ -14,12 +14,21 @@ Form metadata provides: - **Responsive design**: Mobile-optimized layouts - **AI assistance**: Smart defaults, auto-complete, validation helpers -**File Naming Convention:** `[object_name].form.yml` or `[form_name].form.yml` +**File Naming Convention:** `.form.yml` + +The filename (without the `.form.yml` extension) automatically becomes the form's identifier. This eliminates the need for a redundant `name` property. + +**Examples:** +- `project_form.form.yml` → Form name: `project_form` +- `quick_task.form.yml` → Form name: `quick_task` +- `customer_edit.form.yml` → Form name: `customer_edit` ## 2. Root Structure with AI Context ```yaml -name: project_form +# File: project_form.form.yml +# Form name is inferred from filename! + label: Project Information type: edit # create, edit, view object: projects diff --git a/docs/spec/permission.md b/docs/spec/permission.md index 4561efb4..9347d066 100644 --- a/docs/spec/permission.md +++ b/docs/spec/permission.md @@ -12,13 +12,20 @@ ObjectQL's permission system provides: - **Action permissions**: Control who can execute specific actions - **View permissions**: Restrict access to specific UI views -**File Naming Convention:** `[object_name].permission.yml` +**File Naming Convention:** `.permission.yml` + +The filename (without the `.permission.yml` extension) automatically identifies which object these permission rules apply to. + +**Examples:** +- `project.permission.yml` → Applies to object: `project` +- `customer_order.permission.yml` → Applies to object: `customer_order` ## 2. Root Structure ```yaml -name: project_permissions -object: projects +# File: project.permission.yml +# Object is inferred from filename! + description: Permission rules for project object # Role Definitions diff --git a/docs/spec/report.md b/docs/spec/report.md index fc2dcab1..73146925 100644 --- a/docs/spec/report.md +++ b/docs/spec/report.md @@ -14,7 +14,13 @@ Reporting features include: - **Export**: PDF, Excel, CSV formats - **Dashboards**: Combine multiple reports and charts -**File Naming Convention:** `[report_name].report.yml`, `[dashboard_name].dashboard.yml` +**File Naming Convention:** `.report.yml`, `.dashboard.yml` + +The filename (without the `.report.yml` or `.dashboard.yml` extension) automatically becomes the report/dashboard identifier. + +**Examples:** +- `sales_summary.report.yml` → Report name: `sales_summary` +- `executive_dashboard.dashboard.yml` → Dashboard name: `executive_dashboard` ## 2. Report Types @@ -30,7 +36,9 @@ Reporting features include: Simple list reports with columns and filters: ```yaml -name: open_tasks_report +# File: open_tasks.report.yml +# Report name is inferred from filename! + label: Open Tasks type: tabular object: tasks diff --git a/docs/spec/validation.md b/docs/spec/validation.md index fb58432b..ac66e220 100644 --- a/docs/spec/validation.md +++ b/docs/spec/validation.md @@ -13,14 +13,21 @@ ObjectQL's validation system provides: - **Conditional validation**: Rules that apply only in specific contexts - **State machine validation**: Enforce valid state transitions -**File Naming Convention:** `[object_name].validation.yml` +**File Naming Convention:** `.validation.yml` + +The filename (without the `.validation.yml` extension) automatically identifies which object these validation rules apply to. This eliminates the need for redundant `name` and `object` properties. + +**Examples:** +- `project.validation.yml` → Applies to object: `project` +- `customer_order.validation.yml` → Applies to object: `customer_order` ## 2. Root Structure ```yaml -name: project_validation -object: projects -description: Validation rules for project object +# File: project.validation.yml +# Object "project" is inferred from filename! + +description: "Validation rules for project object" # AI-friendly context (optional) ai_context: diff --git a/docs/spec/view.md b/docs/spec/view.md index eabdac0e..4f899bd4 100644 --- a/docs/spec/view.md +++ b/docs/spec/view.md @@ -6,7 +6,14 @@ Views define how data is presented to users in different contexts (list, detail, View metadata separates the presentation logic from the data model, allowing the same object to be displayed differently based on context, user role, or device type. -**File Naming Convention:** `[object_name].view.yml` or `[view_name].view.yml` +**File Naming Convention:** `.view.yml` + +The filename (without the `.view.yml` extension) automatically becomes the view's identifier. This eliminates the need for a redundant `name` property. + +**Examples:** +- `task_list.view.yml` → View name: `task_list` +- `customer_kanban.view.yml` → View name: `customer_kanban` +- `project_calendar.view.yml` → View name: `project_calendar` ## 2. View Types @@ -26,10 +33,12 @@ ObjectQL supports multiple view types for different use cases: ## 3. Root Properties ```yaml -name: task_list_view +# File: task_list.view.yml +# View name is inferred from filename! + label: Task List type: list -object: tasks +object: tasks # Must specify which object to display description: Default task listing view # View Configuration @@ -42,7 +51,6 @@ config: | Property | Type | Required | Description | |:---|:---|:---|:---| -| `name` | `string` | ✓ | Unique identifier for the view | | `label` | `string` | ✓ | Display name for the view | | `type` | `ViewType` | ✓ | Type of view (list, grid, kanban, etc.) | | `object` | `string` | ✓ | Target object name | @@ -51,12 +59,15 @@ config: | `default` | `boolean` | | Whether this is the default view for the object | | `config` | `object` | ✓ | View-specific configuration | +**Note:** The `name` property is **no longer needed** - it's automatically inferred from the filename. + ## 4. List View Configuration The most common view type for browsing records. ```yaml -name: task_list +# File: task_list.view.yml + type: list object: tasks config: diff --git a/docs/spec/workflow.md b/docs/spec/workflow.md index f163d854..07a34817 100644 --- a/docs/spec/workflow.md +++ b/docs/spec/workflow.md @@ -13,12 +13,20 @@ Workflow features include: - **Event-Driven**: React to record changes - **Integration**: Connect with external systems -**File Naming Convention:** `[workflow_name].workflow.yml` +**File Naming Convention:** `.workflow.yml` + +The filename (without the `.workflow.yml` extension) automatically becomes the workflow's identifier. + +**Examples:** +- `order_approval.workflow.yml` → Workflow name: `order_approval` +- `customer_onboarding.workflow.yml` → Workflow name: `customer_onboarding` ## 2. Root Structure with AI Context ```yaml -name: order_approval_workflow +# File: order_approval.workflow.yml +# Workflow name is inferred from filename! + label: Order Approval Process description: Multi-level approval workflow for orders object: orders From 8ec149bf897e4bf3e21268f58555c7d4bae5fe0e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 03:05:55 +0000 Subject: [PATCH 04/15] Update action, hook, metadata-organization docs and README with filename-based approach Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- README.md | 11 +++++- docs/guide/metadata-organization.md | 54 ++++++++++++++++++++++------- docs/spec/action.md | 22 ++++++++++-- docs/spec/hook.md | 12 +++++-- 4 files changed, 81 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index b94fd84c..df840e4c 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,13 @@ It is **not** an ORM, but a high-level data protocol designed for AI agents, low * Template messages with internationalization support. +* **📝 Clean, Minimal Syntax:** +* **Filename-based identification** - No redundant `name` properties needed +* Object name automatically inferred from `project.object.yml` → `project` +* 10-15% less boilerplate compared to traditional metadata formats +* Crystal-clear file organization and conventions + + * **⚡ Modern & Lightweight:** * Written in 100% **TypeScript**. * **Zero heavy legacy dependencies.** No runtime environment requirements beyond Node.js. @@ -289,7 +296,9 @@ ObjectQL includes a comprehensive **visual reporting system** similar to Salesfo **Example Report Definition:** ```yaml -name: tasks_by_project +# File: tasks_by_project.report.yml +# Report name is inferred from filename! + label: Tasks by Project and Priority type: summary object: tasks diff --git a/docs/guide/metadata-organization.md b/docs/guide/metadata-organization.md index 6f22d832..a16dfef2 100644 --- a/docs/guide/metadata-organization.md +++ b/docs/guide/metadata-organization.md @@ -107,19 +107,41 @@ Each module should have a README explaining: ## Object Naming Conventions -### Prefixing Strategy +### File-Based Naming + +**ObjectQL uses filename-based identification.** The object name is automatically inferred from the filename (without the `.object.yml` extension), eliminating redundancy. + +**Examples:** +- `crm_account.object.yml` → Object name: `crm_account` +- `finance_invoice.object.yml` → Object name: `finance_invoice` +- `project_task.object.yml` → Object name: `project_task` -For large projects with multiple modules, use prefixes to avoid name collisions: +Inside the file, you **no longer need** to specify `name: crm_account` - it's inferred from the filename! ```yaml -# ✅ Good: Clear module ownership -name: crm_account -name: finance_invoice -name: project_task +# File: crm_account.object.yml +# Object name "crm_account" is automatically inferred! + +label: CRM Account +fields: + company_name: + type: text + required: true +``` + +### Prefixing Strategy + +For large projects with multiple modules, use prefixes in your **filenames** to avoid name collisions: + +``` +# ✅ Good: Clear module ownership via filenames +crm/objects/crm_account.object.yml → Object: crm_account +finance/objects/finance_invoice.object.yml → Object: finance_invoice +project/objects/project_task.object.yml → Object: project_task # ❌ Avoid: Risk of collision -name: account # Which account? CRM or Finance? -name: task # Project task or general task? +crm/objects/account.object.yml → Object: account (ambiguous) +finance/objects/account.object.yml → Object: account (collision!) ``` **When to prefix:** @@ -128,7 +150,7 @@ name: task # Project task or general task? - ✅ When similar concepts exist across domains **When NOT to prefix:** -- ❌ Core shared objects (`user`, `organization`) +- ❌ Core shared objects (`user.object.yml`, `organization.object.yml`) - ❌ Small applications (< 30 objects) - ❌ When it reduces clarity @@ -198,11 +220,13 @@ fields: ## Extension Pattern -Use extensions to customize objects without modifying source: +Use extensions to customize objects without modifying source files. **Original** (`core/objects/user.object.yml`): ```yaml -name: user +# File: user.object.yml +# Object name "user" is inferred from filename + fields: name: { type: text } email: { type: text } @@ -210,12 +234,18 @@ fields: **Extension** (`extensions/user.extension.object.yml`): ```yaml -name: user # Same name triggers merge +# File: user.extension.object.yml +# Extends the "user" object (matches by filename base) + fields: employee_id: { type: text } email: { required: true, unique: true } ``` +**Result:** ObjectQL merges both definitions, adding `employee_id` and making `email` required. + email: { required: true, unique: true } +``` + **Result:** ObjectQL merges both definitions, adding `employee_id` and making `email` required. ## Internationalization at Scale diff --git a/docs/spec/action.md b/docs/spec/action.md index 1f725580..74c395b9 100644 --- a/docs/spec/action.md +++ b/docs/spec/action.md @@ -19,9 +19,17 @@ Input parameters (`params`) are defined using the same `FieldConfig` schema as o ## 2. Configuration (YAML) -Actions are declared in `*.object.yml` or JSON. +Actions are declared in your object definition file (`.object.yml`). ```yaml +# File: order.object.yml +# Object name is inferred from filename! + +label: Order +fields: + # ... field definitions + +# Custom Actions actions: # 1. A Record Action (Button on a row) approve_order: @@ -48,10 +56,18 @@ actions: ## 3. Implementation (TypeScript) -Implement the logic in a companion `*.action.ts` file. +Implement the logic in a companion `.action.ts` file. + +**File Naming Convention:** `.action.ts` + +The filename (without `.action.ts`) must match your object name to enable automatic binding. + +**Examples:** +- `order.action.ts` → Actions for `order` object +- `project.action.ts` → Actions for `project` object ```typescript -// src/objects/order.action.ts +// File: order.action.ts import { ActionDefinition } from '@objectql/types'; import { Order } from './types'; diff --git a/docs/spec/hook.md b/docs/spec/hook.md index 16eaa99e..1d0588c2 100644 --- a/docs/spec/hook.md +++ b/docs/spec/hook.md @@ -4,7 +4,13 @@ Hooks allow you to execute server-side logic before or after database operations ## 1. Overview -Hook files should be named `[object_name].hook.ts` and placed alongside your `*.object.yml` files. +**File Naming Convention:** `.hook.ts` + +Hook implementation files should be named to match the object they apply to, and placed alongside your object definition files. + +**Examples:** +- `project.hook.ts` → Hooks for `project` object +- `customer_order.hook.ts` → Hooks for `customer_order` object ### The "Optimal" Design Philosophy @@ -32,7 +38,9 @@ Unlike traditional ORMs that provide generic contexts, ObjectQL hooks are **Type The recommended way to define hooks is using the `ObjectHookDefinition` interface. ```typescript -// src/objects/project.hook.ts +// File: project.hook.ts +// Hooks for the "project" object (name matches object definition file) + import { ObjectHookDefinition } from '@objectql/types'; import { Project } from './types'; // Your generated type From 33299878a959fc010d37db2cb701d830779a0470 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 03:07:00 +0000 Subject: [PATCH 05/15] Update getting-started and data-modeling guides with filename-based approach Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- docs/guide/data-modeling.md | 11 ++++++++--- docs/guide/getting-started.md | 9 +++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/guide/data-modeling.md b/docs/guide/data-modeling.md index 11021fdd..39b36186 100644 --- a/docs/guide/data-modeling.md +++ b/docs/guide/data-modeling.md @@ -4,11 +4,14 @@ Data modeling in ObjectQL is **Metadata-First**. You define your application's s ## 1. The Object Definition -Each file represents one business entity. By convention, name the file `[object_name].object.yml`. +**ObjectQL uses filename-based identification.** The object name is automatically inferred from the filename (without the `.object.yml` extension), eliminating redundancy. + +**File naming:** `.object.yml` ```yaml -# objects/product.object.yml -name: product +# File: product.object.yml +# Object name "product" is automatically inferred from filename! + label: Product description: "Catalog items for sale" icon: standard:product @@ -32,6 +35,8 @@ fields: - clothing ``` +**Note:** The redundant `name: product` property is no longer needed - it's automatically inferred from the filename! + ## 2. Fields & Relationships ObjectQL supports rich field types that automate UI rendering and validation. diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md index 4617fda5..92283a01 100644 --- a/docs/guide/getting-started.md +++ b/docs/guide/getting-started.md @@ -26,9 +26,12 @@ Let's build a simple **To-Do List** backend. In ObjectQL, everything is an "Object" (like a Table or Collection). +**ObjectQL uses filename-based identification** - the object name is automatically inferred from the filename, making your metadata files cleaner. + ```yaml -# todo.object.yml -name: todo +# File: todo.object.yml +# Object name "todo" is automatically inferred from filename! + label: To-Do Item fields: title: @@ -39,6 +42,8 @@ fields: default: false ``` +**Note:** You no longer need to specify `name: todo` - it's inferred from the filename `todo.object.yml`! + ### 2. Configure the Engine Updated in v0.2: You can now use a simple connection string. From 78bc2e39adac3ec553274480a8fbe51f01714f91 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 04:46:01 +0000 Subject: [PATCH 06/15] Fix documentation issues: correct example filename, remove duplicates, update menu spec Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- docs/guide/metadata-organization.md | 4 --- docs/spec/application.md | 2 ++ docs/spec/menu.md | 54 ++++++++++++++++++++++++++--- docs/spec/metadata-standard.md | 2 +- 4 files changed, 52 insertions(+), 10 deletions(-) diff --git a/docs/guide/metadata-organization.md b/docs/guide/metadata-organization.md index a16dfef2..8f7ecad3 100644 --- a/docs/guide/metadata-organization.md +++ b/docs/guide/metadata-organization.md @@ -242,10 +242,6 @@ fields: email: { required: true, unique: true } ``` -**Result:** ObjectQL merges both definitions, adding `employee_id` and making `email` required. - email: { required: true, unique: true } -``` - **Result:** ObjectQL merges both definitions, adding `employee_id` and making `email` required. ## Internationalization at Scale diff --git a/docs/spec/application.md b/docs/spec/application.md index 4009299d..cc7b99d5 100644 --- a/docs/spec/application.md +++ b/docs/spec/application.md @@ -12,6 +12,8 @@ The filename (without the `.app.yml` extension) automatically becomes the applic - `sales_crm.app.yml` → App name: `sales_crm` - `hr_portal.app.yml` → App name: `hr_portal` +**Note on Legacy Format:** Some existing app files may use an explicit `kind: app` and `name:` property. While this is supported for backward compatibility, the filename-based approach is recommended for new applications. + ## 1. Root Structure (Schema) ```yaml diff --git a/docs/spec/menu.md b/docs/spec/menu.md index 1c76d327..6c88a1c5 100644 --- a/docs/spec/menu.md +++ b/docs/spec/menu.md @@ -13,12 +13,22 @@ Navigation features include: - **Breadcrumbs**: Automatic navigation trails - **Search Integration**: Global search within navigation -**File Naming Convention:** `[menu_name].menu.yml` +**File Naming Convention:** `.menu.yml` + +The filename (without the `.menu.yml` extension) automatically becomes the menu's identifier. + +**Examples:** +- `main_navigation.menu.yml` → Menu name: `main_navigation` +- `admin_menu.menu.yml` → Menu name: `admin_menu` + +**Note:** Menu metadata is often embedded within Application metadata (`.app.yml` files) as the `navigation` property. See [Application Metadata](./application.md) for the recommended approach. ## 2. Root Structure ```yaml -name: main_navigation +# File: main_navigation.menu.yml +# Menu name is inferred from filename! + label: Main Menu type: sidebar # sidebar, topnav, context, mobile app: sales # Optional: Link to a specific application @@ -519,7 +529,9 @@ responsive: Right-click and action menus: ```yaml -name: record_context_menu +# File: record_context_menu.menu.yml +# Menu name is inferred from filename! + type: context object: tasks @@ -669,12 +681,44 @@ analytics: ## 18. Implementation Example +Complete menu definition: + +```yaml +# File: main_navigation.menu.yml +# Menu name is inferred from filename! + +label: Main Navigation +type: sidebar + +items: + - name: home + label: Home + icon: home + path: / + + - name: sales + label: Sales + icon: currency + type: section + items: + - name: leads + label: Leads + path: /leads + object: leads + + - name: accounts + label: Accounts + path: /accounts + object: accounts +``` + +**TypeScript Implementation:** + ```typescript -// src/navigation/main_menu.menu.yml +// File: main_navigation.menu.ts import { MenuDefinition } from '@objectql/types'; export const main_menu: MenuDefinition = { - name: 'main_navigation', type: 'sidebar', items: [ { diff --git a/docs/spec/metadata-standard.md b/docs/spec/metadata-standard.md index b69e499c..1666a105 100644 --- a/docs/spec/metadata-standard.md +++ b/docs/spec/metadata-standard.md @@ -112,7 +112,7 @@ rules: - Target object - List of records to insert (auto-created if validation passes) -**Example** (`initial.data.yml`): +**Example** (`users.data.yml`): ```yaml # File: users.data.yml # Object is inferred from filename! From 96039c01fdbdf293854593b72a35a7a1ec5c6709 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:58:44 +0800 Subject: [PATCH 07/15] feat: Add CRM and Finance modules with object definitions - Created CRM objects: Account, Contact, Lead, Opportunity - Created Finance objects: Budget, Expense, Invoice, Payment - Added HR objects: Department, Employee, Position, Timesheet - Introduced Project management objects: Project, Task, Milestone, Timesheet Entry - Updated starter scripts to remove unnecessary name fields --- .../plugins/audit-log/src/note.object.yml | 1 - .../scenarios/enterprise-structure/README.md | 32 +++++++++---------- ...ount.object.yml => crm_account.object.yml} | 1 - ...tact.object.yml => crm_contact.object.yml} | 1 - .../{lead.object.yml => crm_lead.object.yml} | 1 - ....object.yml => crm_opportunity.object.yml} | 1 - ...t.object.yml => finance_budget.object.yml} | 1 - ....object.yml => finance_expense.object.yml} | 1 - ....object.yml => finance_invoice.object.yml} | 1 - ....object.yml => finance_payment.object.yml} | 1 - ...nt.object.yml => hr_department.object.yml} | 1 - ...oyee.object.yml => hr_employee.object.yml} | 1 - ...tion.object.yml => hr_position.object.yml} | 1 - ...eet.object.yml => hr_timesheet.object.yml} | 1 - ...bject.yml => project_milestone.object.yml} | 1 - ....object.yml => project_project.object.yml} | 1 - ...ask.object.yml => project_task.object.yml} | 1 - ...yml => project_timesheet_entry.object.yml} | 1 - .../basic-script/src/kitchen_sink.object.yml | 1 - .../basic-script/src/projects.object.yml | 1 - .../basic-script/src/tasks.object.yml | 1 - .../starters/express-api/src/task.object.yml | 1 - .../starters/express-api/src/user.object.yml | 1 - 23 files changed, 16 insertions(+), 38 deletions(-) rename examples/scenarios/enterprise-structure/src/modules/crm/objects/{account.object.yml => crm_account.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/crm/objects/{contact.object.yml => crm_contact.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/crm/objects/{lead.object.yml => crm_lead.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/crm/objects/{opportunity.object.yml => crm_opportunity.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/finance/objects/{budget.object.yml => finance_budget.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/finance/objects/{expense.object.yml => finance_expense.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/finance/objects/{invoice.object.yml => finance_invoice.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/finance/objects/{payment.object.yml => finance_payment.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/hr/objects/{department.object.yml => hr_department.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/hr/objects/{employee.object.yml => hr_employee.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/hr/objects/{position.object.yml => hr_position.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/hr/objects/{timesheet.object.yml => hr_timesheet.object.yml} (98%) rename examples/scenarios/enterprise-structure/src/modules/project/objects/{milestone.object.yml => project_milestone.object.yml} (97%) rename examples/scenarios/enterprise-structure/src/modules/project/objects/{project.object.yml => project_project.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/project/objects/{task.object.yml => project_task.object.yml} (99%) rename examples/scenarios/enterprise-structure/src/modules/project/objects/{timesheet-entry.object.yml => project_timesheet_entry.object.yml} (98%) diff --git a/examples/plugins/audit-log/src/note.object.yml b/examples/plugins/audit-log/src/note.object.yml index 5096ab7a..09a9b18b 100644 --- a/examples/plugins/audit-log/src/note.object.yml +++ b/examples/plugins/audit-log/src/note.object.yml @@ -1,4 +1,3 @@ -name: note fields: content: type: text diff --git a/examples/scenarios/enterprise-structure/README.md b/examples/scenarios/enterprise-structure/README.md index 375c9c6f..648aa935 100644 --- a/examples/scenarios/enterprise-structure/README.md +++ b/examples/scenarios/enterprise-structure/README.md @@ -30,10 +30,10 @@ src/ ├── modules/ # Business Domain Modules │ ├── crm/ # Customer Relationship Module │ │ ├── objects/ -│ │ │ ├── account.object.yml -│ │ │ ├── contact.object.yml -│ │ │ ├── opportunity.object.yml -│ │ │ └── lead.object.yml +│ │ │ ├── crm_account.object.yml +│ │ │ ├── crm_contact.object.yml +│ │ │ ├── crm_opportunity.object.yml +│ │ │ └── crm_lead.object.yml │ │ ├── actions/ │ │ │ └── convert-lead.action.ts │ │ ├── hooks/ @@ -46,10 +46,10 @@ src/ │ │ │ ├── hr/ # Human Resources Module │ │ ├── objects/ -│ │ │ ├── employee.object.yml -│ │ │ ├── department.object.yml -│ │ │ ├── position.object.yml -│ │ │ └── timesheet.object.yml +│ │ │ ├── hr_employee.object.yml +│ │ │ ├── hr_department.object.yml +│ │ │ ├── hr_position.object.yml +│ │ │ └── hr_timesheet.object.yml │ │ ├── actions/ │ │ ├── hooks/ │ │ ├── i18n/ @@ -58,10 +58,10 @@ src/ │ │ │ ├── finance/ # Finance & Accounting Module │ │ ├── objects/ -│ │ │ ├── invoice.object.yml -│ │ │ ├── payment.object.yml -│ │ │ ├── expense.object.yml -│ │ │ └── budget.object.yml +│ │ │ ├── finance_invoice.object.yml +│ │ │ ├── finance_payment.object.yml +│ │ │ ├── finance_expense.object.yml +│ │ │ └── finance_budget.object.yml │ │ ├── actions/ │ │ ├── hooks/ │ │ ├── i18n/ @@ -70,10 +70,10 @@ src/ │ │ │ └── project/ # Project Management Module │ ├── objects/ -│ │ ├── project.object.yml -│ │ ├── task.object.yml -│ │ ├── milestone.object.yml -│ │ └── timesheet-entry.object.yml +│ │ ├── project_project.object.yml +│ │ ├── project_task.object.yml +│ │ ├── project_milestone.object.yml +│ │ └── project_timesheet_entry.object.yml │ ├── actions/ │ ├── hooks/ │ ├── i18n/ diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/account.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/account.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.object.yml index d51ba753..af910407 100644 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/account.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.object.yml @@ -1,4 +1,3 @@ -name: crm_account label: Account description: Customer company or organization icon: briefcase-line diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/contact.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/contact.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.object.yml index a91f6824..3b17c93f 100644 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/contact.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.object.yml @@ -1,4 +1,3 @@ -name: crm_contact label: Contact description: Individual contact person icon: user-line diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/lead.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/lead.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.object.yml index 2d0e82e6..7170d4ea 100644 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/lead.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.object.yml @@ -1,4 +1,3 @@ -name: crm_lead label: Lead description: Potential sales lead icon: user-add-line diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/opportunity.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/opportunity.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.object.yml index c200ef43..b1bccaf2 100644 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/opportunity.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.object.yml @@ -1,4 +1,3 @@ -name: crm_opportunity label: Opportunity description: Sales opportunity or deal icon: currency-line diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/budget.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/budget.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.object.yml index 9a5ba006..3bd597f7 100644 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/budget.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.object.yml @@ -1,4 +1,3 @@ -name: finance_budget label: Budget description: Department or project budget icon: pie-chart-line diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/expense.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/expense.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.object.yml index 699d35ce..80fc8b2a 100644 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/expense.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.object.yml @@ -1,4 +1,3 @@ -name: finance_expense label: Expense description: Company expense record icon: wallet-line diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/invoice.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/invoice.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.object.yml index 433e38ad..32bfab21 100644 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/invoice.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.object.yml @@ -1,4 +1,3 @@ -name: finance_invoice label: Invoice description: Customer invoice icon: file-text-line diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/payment.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/payment.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.object.yml index d4f056bb..b96bee53 100644 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/payment.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.object.yml @@ -1,4 +1,3 @@ -name: finance_payment label: Payment description: Payment transaction record icon: money-dollar-circle-line diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/department.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/department.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.object.yml index 4358396c..a3311f3c 100644 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/department.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.object.yml @@ -1,4 +1,3 @@ -name: hr_department label: Department description: Organizational department icon: building-line diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/employee.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/employee.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.object.yml index d4f52b80..f5877336 100644 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/employee.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.object.yml @@ -1,4 +1,3 @@ -name: hr_employee label: Employee description: Company employee record icon: user-line diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/position.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/position.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.object.yml index 9a7dd86d..1a8db7de 100644 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/position.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.object.yml @@ -1,4 +1,3 @@ -name: hr_position label: Position description: Job position or role icon: briefcase-line diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/timesheet.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/timesheet.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.object.yml index c7726cbf..03e91bb2 100644 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/timesheet.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.object.yml @@ -1,4 +1,3 @@ -name: hr_timesheet label: Timesheet description: Employee time tracking icon: time-line diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/milestone.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.object.yml similarity index 97% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/milestone.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.object.yml index 0d06b5e1..010e536b 100644 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/milestone.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.object.yml @@ -1,4 +1,3 @@ -name: project_milestone label: Milestone description: Project milestone or checkpoint icon: flag-line diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/project.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.object.yml index a84a2a64..5e754893 100644 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/project.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.object.yml @@ -1,4 +1,3 @@ -name: project_project label: Project description: Project or initiative icon: folder-line diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/task.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.object.yml similarity index 99% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/task.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.object.yml index 3ddd590e..e3780e75 100644 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/task.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.object.yml @@ -1,4 +1,3 @@ -name: project_task label: Task description: Project task or work item icon: task-line diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/timesheet-entry.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.object.yml similarity index 98% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/timesheet-entry.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.object.yml index e309d7ac..54c8243e 100644 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/timesheet-entry.object.yml +++ b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.object.yml @@ -1,4 +1,3 @@ -name: project_timesheet_entry label: Timesheet Entry description: Time entry for project tasks icon: time-line diff --git a/examples/starters/basic-script/src/kitchen_sink.object.yml b/examples/starters/basic-script/src/kitchen_sink.object.yml index ee94e52d..6be5c5a0 100644 --- a/examples/starters/basic-script/src/kitchen_sink.object.yml +++ b/examples/starters/basic-script/src/kitchen_sink.object.yml @@ -1,4 +1,3 @@ -name: kitchen_sink label: "Kitchen Sink (All Fields)" description: "A demonstration of every supported field type in ObjectQL" icon: "layout-grid-line" diff --git a/examples/starters/basic-script/src/projects.object.yml b/examples/starters/basic-script/src/projects.object.yml index 55731661..faacf4c0 100644 --- a/examples/starters/basic-script/src/projects.object.yml +++ b/examples/starters/basic-script/src/projects.object.yml @@ -1,4 +1,3 @@ -name: projects label: Project icon: building-line fields: diff --git a/examples/starters/basic-script/src/tasks.object.yml b/examples/starters/basic-script/src/tasks.object.yml index 9e9ef497..78173629 100644 --- a/examples/starters/basic-script/src/tasks.object.yml +++ b/examples/starters/basic-script/src/tasks.object.yml @@ -1,4 +1,3 @@ -name: tasks label: Task icon: checkbox-circle-line fields: diff --git a/examples/starters/express-api/src/task.object.yml b/examples/starters/express-api/src/task.object.yml index ceec7dad..a4a8b9ee 100644 --- a/examples/starters/express-api/src/task.object.yml +++ b/examples/starters/express-api/src/task.object.yml @@ -1,4 +1,3 @@ -name: Task label: Tasks fields: title: diff --git a/examples/starters/express-api/src/user.object.yml b/examples/starters/express-api/src/user.object.yml index 80e840f1..77f7af15 100644 --- a/examples/starters/express-api/src/user.object.yml +++ b/examples/starters/express-api/src/user.object.yml @@ -1,4 +1,3 @@ -name: User label: Users fields: name: From fee35a991a8ded59c32a261bb1c893ae2c82a6a7 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:01:04 +0800 Subject: [PATCH 08/15] feat: Enhance object loading to infer names from filenames and improve multi-object handling --- packages/core/src/loader.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/core/src/loader.ts b/packages/core/src/loader.ts index f0435510..2c58447c 100644 --- a/packages/core/src/loader.ts +++ b/packages/core/src/loader.ts @@ -21,16 +21,33 @@ export class ObjectLoader { const doc = yaml.load(ctx.content) as any; if (!doc) return; - if (doc.name && doc.fields) { + // Calculate ID from filename + const basename = path.basename(ctx.file); + const filenameId = basename.replace(/\.object\.(yml|yaml)$/, ''); + + // 1. Single Object definition (Standard) + // If fields are present, we treat it as a single object definition + if (doc.fields) { + if (!doc.name) { + // If name is missing, infer from filename + doc.name = filenameId; + } else if (doc.name !== filenameId) { + // warn if mismatch + console.warn(`[ObjectQL] Warning: Object name '${doc.name}' in ${basename} does not match filename. Using '${doc.name}'.`); + } + const packageEntry = ctx.registry.getEntry('package-map', ctx.file); registerObject(ctx.registry, doc, ctx.file, ctx.packageName || (packageEntry && packageEntry.package)); - } else { - for (const [key, value] of Object.entries(doc)) { - if (typeof value === 'object' && (value as any).fields) { - const obj = value as any; - if (!obj.name) obj.name = key; - registerObject(ctx.registry, obj, ctx.file, ctx.packageName); - } + return; + } + + // 2. Multi-object map (Legacy/Bundle mode) + // e.g. { object1: { fields... }, object2: { fields... } } + for (const [key, value] of Object.entries(doc)) { + if (typeof value === 'object' && (value as any).fields) { + const obj = value as any; + if (!obj.name) obj.name = key; + registerObject(ctx.registry, obj, ctx.file, ctx.packageName); } } } catch (e) { From bb547830da556305e7141a33788297e80c7d75f5 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:05:20 +0800 Subject: [PATCH 09/15] Add smart defaults and normalization for object fields Enhanced the object registration logic to infer labels and types for objects and fields when missing. Introduced a utility function to convert strings to title case, improving default label generation. --- packages/core/src/loader.ts | 41 +++++++++++++++++++++++++++++++++---- packages/core/src/util.ts | 5 +++++ 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 packages/core/src/util.ts diff --git a/packages/core/src/loader.ts b/packages/core/src/loader.ts index 2c58447c..3d2b5db3 100644 --- a/packages/core/src/loader.ts +++ b/packages/core/src/loader.ts @@ -1,8 +1,9 @@ import * as fs from 'fs'; import * as glob from 'fast-glob'; import * as path from 'path'; -import { MetadataRegistry, ObjectConfig, LoaderPlugin, LoaderHandlerContext } from '@objectql/types'; +import { MetadataRegistry, ObjectConfig, LoaderPlugin, LoaderHandlerContext, FieldConfig } from '@objectql/types'; import * as yaml from 'js-yaml'; +import { toTitleCase } from './util'; export class ObjectLoader { private plugins: LoaderPlugin[] = []; @@ -243,17 +244,49 @@ export class ObjectLoader { } function registerObject(registry: MetadataRegistry, obj: any, file: string, packageName?: string) { - // Normalize fields + if (!obj.name) return; + + // --- Smart Defaults & Normalization --- + + // 1. Object Label: Infer from name if missing + if (!obj.label) { + obj.label = toTitleCase(obj.name); + } + + // 2. Normalize Fields if (obj.fields) { for (const [key, field] of Object.entries(obj.fields)) { if (typeof field === 'object' && field !== null) { - if (!(field as any).name) { - (field as any).name = key; + const f = field as any; + + // Ensure field has a name + if (!f.name) { + f.name = key; + } + + // Field Label: Infer from key if missing + if (!f.label) { + f.label = toTitleCase(key); + } + + // Inferred Types + if (!f.type) { + if (f.reference_to) { + f.type = 'lookup'; + } else if (f.options) { + f.type = 'select'; + } else if (f.formula) { + f.type = 'formula'; + } else if (f.summary_object) { + f.type = 'summary'; + } } } } } + // --- End Smart Defaults --- + // Check for existing object to Merge const existing = registry.getEntry('object', obj.name); if (existing) { diff --git a/packages/core/src/util.ts b/packages/core/src/util.ts new file mode 100644 index 00000000..500b027b --- /dev/null +++ b/packages/core/src/util.ts @@ -0,0 +1,5 @@ +export function toTitleCase(str: string): string { + return str + .replace(/_/g, ' ') + .replace(/\b\w/g, (char) => char.toUpperCase()); +} From bf3387ffbdd68b231390917f2fda16f2eae1bbf7 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:11:14 +0800 Subject: [PATCH 10/15] Refactor object model: remove object interfaces, update types Removed all auto-generated object interface files from the enterprise-structure scenario and migrated their definitions to the corresponding type files. The type files now include additional field documentation and structure, consolidating object definitions and improving maintainability. Also added formula and summary properties to FieldConfig, and made minor improvements to starter script interfaces and loader type usage. --- .../src/core/objects/attachment.ts | 41 ---------- .../src/core/objects/organization.ts | 47 ----------- .../src/core/objects/user.ts | 39 --------- .../src/modules/crm/objects/crm_account.ts | 55 ------------- .../src/modules/crm/objects/crm_contact.ts | 58 -------------- .../src/modules/crm/objects/crm_lead.ts | 74 ----------------- .../modules/crm/objects/crm_opportunity.ts | 50 ------------ .../modules/finance/objects/finance_budget.ts | 52 ------------ .../finance/objects/finance_expense.ts | 56 ------------- .../finance/objects/finance_invoice.ts | 63 --------------- .../finance/objects/finance_payment.ts | 40 ---------- .../src/modules/hr/objects/hr_department.ts | 34 -------- .../src/modules/hr/objects/hr_employee.ts | 79 ------------------- .../src/modules/hr/objects/hr_position.ts | 46 ----------- .../src/modules/hr/objects/hr_timesheet.ts | 51 ------------ .../project/objects/project_milestone.ts | 38 --------- .../project/objects/project_project.ts | 60 -------------- .../modules/project/objects/project_task.ts | 51 ------------ .../objects/project_timesheet_entry.ts | 42 ---------- .../src/types/crm_account.ts | 6 ++ .../src/types/crm_contact.ts | 3 + .../src/types/crm_lead.ts | 3 + .../src/types/crm_opportunity.ts | 3 + .../src/types/finance_budget.ts | 9 +++ .../src/types/finance_expense.ts | 9 +++ .../src/types/finance_invoice.ts | 6 ++ .../src/types/finance_payment.ts | 9 +++ .../src/types/hr_department.ts | 3 + .../src/types/hr_employee.ts | 6 ++ .../src/types/hr_position.ts | 3 + .../src/types/hr_timesheet.ts | 6 ++ .../src/types/organization.ts | 6 ++ .../src/types/project_milestone.ts | 3 + .../src/types/project_project.ts | 9 +++ .../src/types/project_task.ts | 6 ++ .../src/types/project_timesheet_entry.ts | 3 + .../enterprise-structure/src/types/user.ts | 6 ++ .../starters/basic-script/src/projects.ts | 9 +++ examples/starters/basic-script/src/tasks.ts | 15 ++++ packages/core/src/loader.ts | 2 +- packages/types/src/field.ts | 11 +++ 41 files changed, 135 insertions(+), 977 deletions(-) delete mode 100644 examples/scenarios/enterprise-structure/src/core/objects/attachment.ts delete mode 100644 examples/scenarios/enterprise-structure/src/core/objects/organization.ts delete mode 100644 examples/scenarios/enterprise-structure/src/core/objects/user.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.ts delete mode 100644 examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.ts diff --git a/examples/scenarios/enterprise-structure/src/core/objects/attachment.ts b/examples/scenarios/enterprise-structure/src/core/objects/attachment.ts deleted file mode 100644 index 786dc4dd..00000000 --- a/examples/scenarios/enterprise-structure/src/core/objects/attachment.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface Attachment extends ObjectDoc { - /** - * File Name - */ - name: string; - /** - * File URL - */ - file_url: any; - /** - * File Size (bytes) - */ - file_size?: number; - /** - * MIME Type - */ - file_type?: string; - /** - * Related Object Name - */ - related_to?: string; - /** - * Related Record ID - */ - related_id?: string; - /** - * Uploaded By - */ - uploaded_by?: string | number; - /** - * Description - */ - description?: string; - /** - * Tags (comma-separated) - */ - tags?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/core/objects/organization.ts b/examples/scenarios/enterprise-structure/src/core/objects/organization.ts deleted file mode 100644 index 48eb0807..00000000 --- a/examples/scenarios/enterprise-structure/src/core/objects/organization.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface Organization extends ObjectDoc { - /** - * Organization Name - */ - name: string; - /** - * Organization Code - */ - code?: string; - type?: string; - /** - * Parent Organization - */ - parent?: string | number; - /** - * Manager - */ - manager?: string | number; - /** - * Description - */ - description?: string; - /** - * Organization Logo - */ - logo?: any; - /** - * Address - */ - address?: string; - /** - * Website - */ - website?: string; - /** - * Phone Number - */ - phone?: string; - /** - * Contact Email - */ - email?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/core/objects/user.ts b/examples/scenarios/enterprise-structure/src/core/objects/user.ts deleted file mode 100644 index 72b870a3..00000000 --- a/examples/scenarios/enterprise-structure/src/core/objects/user.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface User extends ObjectDoc { - /** - * Full Name - */ - name: string; - /** - * Email Address - */ - email: string; - /** - * Username - */ - username?: string; - /** - * Mobile Phone - */ - mobile?: string; - /** - * Profile Picture - */ - avatar?: any; - status?: string; - role?: string; - /** - * Last Login Time - */ - last_login_at?: Date | string; - /** - * Preferred Language - */ - locale?: string; - /** - * Timezone - */ - timezone?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.ts b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.ts deleted file mode 100644 index 52933a6e..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmAccount extends ObjectDoc { - /** - * Account Name - */ - name: string; - /** - * Account Number - */ - account_number?: string; - type?: string; - /** - * Industry - */ - industry?: string; - /** - * Annual Revenue - */ - annual_revenue?: number; - /** - * Number of Employees - */ - employees?: number; - /** - * Website - */ - website?: string; - /** - * Phone - */ - phone?: string; - /** - * Billing Address - */ - billing_address?: string; - /** - * Shipping Address - */ - shipping_address?: string; - /** - * Account Owner - */ - owner?: string | number; - /** - * Parent Account - */ - parent_account?: string | number; - /** - * Description - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.ts b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.ts deleted file mode 100644 index 2e2242b1..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmContact extends ObjectDoc { - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Full Name - */ - full_name?: any; - /** - * Email - */ - email?: string; - /** - * Phone - */ - phone?: string; - /** - * Mobile - */ - mobile?: string; - /** - * Job Title - */ - title?: string; - /** - * Department - */ - department?: string; - /** - * Account - */ - account: string | number; - /** - * Contact Owner - */ - owner?: string | number; - /** - * Lead Source - */ - lead_source?: string; - /** - * LinkedIn Profile - */ - linkedin_url?: string; - /** - * Notes - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.ts b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.ts deleted file mode 100644 index 6450ff56..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmLead extends ObjectDoc { - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Company - */ - company?: string; - /** - * Job Title - */ - title?: string; - /** - * Email - */ - email?: string; - /** - * Phone - */ - phone?: string; - status: string; - /** - * Lead Source - */ - lead_source?: string; - /** - * Lead Rating - */ - rating?: string; - /** - * Lead Owner - */ - owner?: string | number; - /** - * Industry - */ - industry?: string; - /** - * Annual Revenue - */ - annual_revenue?: number; - /** - * Number of Employees - */ - employees?: number; - /** - * Description - */ - description?: string; - /** - * Conversion Date - */ - converted_date?: Date | string; - /** - * Converted Account - */ - converted_account?: string | number; - /** - * Converted Contact - */ - converted_contact?: string | number; - /** - * Converted Opportunity - */ - converted_opportunity?: string | number; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.ts b/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.ts deleted file mode 100644 index fc2e8a68..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmOpportunity extends ObjectDoc { - /** - * Opportunity Name - */ - name: string; - /** - * Account - */ - account: string | number; - /** - * Amount - */ - amount: number; - /** - * Expected Close Date - */ - close_date: Date | string; - stage: string; - /** - * Probability (%) - */ - probability?: number; - /** - * Opportunity Type - */ - type?: string; - /** - * Lead Source - */ - lead_source?: string; - /** - * Opportunity Owner - */ - owner: string | number; - /** - * Next Step - */ - next_step?: string; - /** - * Description - */ - description?: string; - /** - * Known Competitors - */ - competitors?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.ts b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.ts deleted file mode 100644 index a27ab868..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceBudget extends ObjectDoc { - /** - * Budget Name - */ - name: string; - /** - * Fiscal Year - */ - fiscal_year: number; - period?: string; - /** - * Department - */ - department?: string | number; - /** - * Project - */ - project?: string | number; - category?: string; - /** - * Allocated Amount - */ - allocated_amount: number; - /** - * Spent Amount - */ - spent_amount?: number; - /** - * Remaining Amount - */ - remaining_amount?: number; - /** - * Start Date - */ - start_date: Date | string; - /** - * End Date - */ - end_date: Date | string; - status?: string; - /** - * Budget Owner - */ - owner?: string | number; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.ts b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.ts deleted file mode 100644 index 3734f625..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.ts +++ /dev/null @@ -1,56 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceExpense extends ObjectDoc { - /** - * Expense Number - */ - expense_number: string; - /** - * Employee - */ - employee: string | number; - /** - * Expense Date - */ - expense_date: Date | string; - category: string; - /** - * Amount - */ - amount: number; - currency?: string; - /** - * Merchant/Vendor - */ - merchant?: string; - /** - * Description - */ - description: string; - /** - * Receipt Attachment - */ - receipt_url?: any; - status: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; - /** - * Reimbursement Date - */ - reimbursed_at?: Date | string; - /** - * Department - */ - department?: string | number; - /** - * Related Project - */ - project?: string | number; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.ts b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.ts deleted file mode 100644 index e187b102..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.ts +++ /dev/null @@ -1,63 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceInvoice extends ObjectDoc { - /** - * Invoice Number - */ - invoice_number: string; - /** - * Customer Account - */ - account: string | number; - /** - * Invoice Date - */ - invoice_date: Date | string; - /** - * Due Date - */ - due_date: Date | string; - /** - * Subtotal - */ - subtotal: number; - /** - * Tax Amount - */ - tax_amount?: number; - /** - * Discount Amount - */ - discount_amount?: number; - /** - * Total Amount - */ - total_amount: number; - /** - * Paid Amount - */ - paid_amount?: number; - /** - * Balance Due - */ - balance?: number; - status: string; - /** - * Payment Terms - */ - payment_terms?: string; - currency?: string; - /** - * Billing Address - */ - billing_address?: string; - /** - * Notes - */ - notes?: string; - /** - * Internal Notes - */ - internal_notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.ts b/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.ts deleted file mode 100644 index 3c3b320d..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinancePayment extends ObjectDoc { - /** - * Payment Number - */ - payment_number: string; - /** - * Related Invoice - */ - invoice?: string | number; - /** - * Customer Account - */ - account: string | number; - /** - * Payment Date - */ - payment_date: Date | string; - /** - * Payment Amount - */ - amount: number; - payment_method: string; - currency?: string; - /** - * Reference/Transaction Number - */ - reference_number?: string; - status: string; - /** - * Processed By - */ - processed_by?: string | number; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.ts b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.ts deleted file mode 100644 index 3f96db09..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrDepartment extends ObjectDoc { - /** - * Department Name - */ - name: string; - /** - * Department Code - */ - code: string; - /** - * Parent Department - */ - parent_department?: string | number; - /** - * Department Manager - */ - manager?: string | number; - /** - * Cost Center Code - */ - cost_center?: string; - /** - * Primary Location - */ - location?: string; - /** - * Description - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.ts b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.ts deleted file mode 100644 index 176207a9..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.ts +++ /dev/null @@ -1,79 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrEmployee extends ObjectDoc { - /** - * Employee Number - */ - employee_number: string; - /** - * System User Account - */ - user?: string | number; - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Full Name - */ - full_name?: any; - /** - * Work Email - */ - email: string; - /** - * Work Phone - */ - phone?: string; - /** - * Mobile Phone - */ - mobile?: string; - /** - * Department - */ - department: string | number; - /** - * Position - */ - position: string | number; - /** - * Direct Manager - */ - manager?: string | number; - /** - * Hire Date - */ - hire_date: Date | string; - /** - * Termination Date - */ - termination_date?: Date | string; - employment_type?: string; - status: string; - /** - * Base Salary - */ - salary?: number; - /** - * Office Location - */ - location?: string; - /** - * Emergency Contact Name - */ - emergency_contact_name?: string; - /** - * Emergency Contact Phone - */ - emergency_contact_phone?: string; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.ts b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.ts deleted file mode 100644 index 221d65c7..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrPosition extends ObjectDoc { - /** - * Position Title - */ - title: string; - /** - * Position Code - */ - code: string; - /** - * Position Level - */ - level?: string; - /** - * Department - */ - department?: string | number; - /** - * Reports To Position - */ - reports_to?: string | number; - /** - * Minimum Salary - */ - min_salary?: number; - /** - * Maximum Salary - */ - max_salary?: number; - /** - * Job Description - */ - description?: string; - /** - * Requirements & Qualifications - */ - requirements?: string; - /** - * Key Responsibilities - */ - responsibilities?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.ts b/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.ts deleted file mode 100644 index ff0c4144..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrTimesheet extends ObjectDoc { - /** - * Employee - */ - employee: string | number; - /** - * Work Date - */ - work_date: Date | string; - /** - * Clock In Time - */ - clock_in?: Date | string; - /** - * Clock Out Time - */ - clock_out?: Date | string; - /** - * Total Hours - */ - total_hours?: number; - /** - * Regular Hours - */ - regular_hours?: number; - /** - * Overtime Hours - */ - overtime_hours?: number; - /** - * Break Hours - */ - break_hours?: number; - work_type?: string; - status: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.ts b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.ts deleted file mode 100644 index 34451382..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectMilestone extends ObjectDoc { - /** - * Milestone Name - */ - name: string; - /** - * Project - */ - project: string | number; - /** - * Description - */ - description?: string; - /** - * Target Date - */ - due_date: Date | string; - /** - * Completion Date - */ - completed_date?: Date | string; - status: string; - /** - * Milestone Owner - */ - owner?: string | number; - /** - * Deliverables - */ - deliverables?: string; - /** - * Success Criteria - */ - success_criteria?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.ts b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.ts deleted file mode 100644 index f35f3e39..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectProject extends ObjectDoc { - /** - * Project Name - */ - name: string; - /** - * Project Code - */ - code: string; - /** - * Description - */ - description?: string; - status: string; - priority?: string; - type?: string; - /** - * Customer Account - */ - account?: string | number; - /** - * Project Manager - */ - owner: string | number; - /** - * Department - */ - department?: string | number; - /** - * Start Date - */ - start_date: Date | string; - /** - * Target End Date - */ - end_date?: Date | string; - /** - * Actual End Date - */ - actual_end_date?: Date | string; - /** - * Project Budget - */ - budget?: number; - /** - * Estimated Hours - */ - estimated_hours?: number; - /** - * Actual Hours - */ - actual_hours?: number; - /** - * Completion % - */ - completion_percentage?: number; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.ts b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.ts deleted file mode 100644 index 722709b2..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectTask extends ObjectDoc { - /** - * Task Name - */ - name: string; - /** - * Project - */ - project: string | number; - /** - * Parent Task - */ - parent_task?: string | number; - /** - * Description - */ - description?: string; - status: string; - priority?: string; - /** - * Assigned To - */ - assigned_to?: string | number; - /** - * Due Date - */ - due_date?: Date | string; - /** - * Completion Date - */ - completed_date?: Date | string; - /** - * Estimated Hours - */ - estimated_hours?: number; - /** - * Actual Hours - */ - actual_hours?: number; - /** - * Milestone - */ - milestone?: string | number; - /** - * Tags - */ - tags?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.ts b/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.ts deleted file mode 100644 index e403f5fe..00000000 --- a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectTimesheetEntry extends ObjectDoc { - /** - * Employee - */ - employee: string | number; - /** - * Project - */ - project: string | number; - /** - * Task - */ - task?: string | number; - /** - * Work Date - */ - work_date: Date | string; - /** - * Hours Worked - */ - hours: number; - /** - * Work Description - */ - description?: string; - /** - * Billable - */ - billable?: boolean; - status?: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/crm_account.ts b/examples/scenarios/enterprise-structure/src/types/crm_account.ts index 52933a6e..3d6b3b37 100644 --- a/examples/scenarios/enterprise-structure/src/types/crm_account.ts +++ b/examples/scenarios/enterprise-structure/src/types/crm_account.ts @@ -10,6 +10,9 @@ export interface CrmAccount extends ObjectDoc { * Account Number */ account_number?: string; + /** + * Type + */ type?: string; /** * Industry @@ -51,5 +54,8 @@ export interface CrmAccount extends ObjectDoc { * Description */ description?: string; + /** + * Status + */ status?: string; } diff --git a/examples/scenarios/enterprise-structure/src/types/crm_contact.ts b/examples/scenarios/enterprise-structure/src/types/crm_contact.ts index 2e2242b1..524860f4 100644 --- a/examples/scenarios/enterprise-structure/src/types/crm_contact.ts +++ b/examples/scenarios/enterprise-structure/src/types/crm_contact.ts @@ -54,5 +54,8 @@ export interface CrmContact extends ObjectDoc { * Notes */ description?: string; + /** + * Status + */ status?: string; } diff --git a/examples/scenarios/enterprise-structure/src/types/crm_lead.ts b/examples/scenarios/enterprise-structure/src/types/crm_lead.ts index 6450ff56..2689d610 100644 --- a/examples/scenarios/enterprise-structure/src/types/crm_lead.ts +++ b/examples/scenarios/enterprise-structure/src/types/crm_lead.ts @@ -26,6 +26,9 @@ export interface CrmLead extends ObjectDoc { * Phone */ phone?: string; + /** + * Status + */ status: string; /** * Lead Source diff --git a/examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts b/examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts index fc2e8a68..23e4702c 100644 --- a/examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts +++ b/examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts @@ -18,6 +18,9 @@ export interface CrmOpportunity extends ObjectDoc { * Expected Close Date */ close_date: Date | string; + /** + * Stage + */ stage: string; /** * Probability (%) diff --git a/examples/scenarios/enterprise-structure/src/types/finance_budget.ts b/examples/scenarios/enterprise-structure/src/types/finance_budget.ts index a27ab868..b3da7b4d 100644 --- a/examples/scenarios/enterprise-structure/src/types/finance_budget.ts +++ b/examples/scenarios/enterprise-structure/src/types/finance_budget.ts @@ -10,6 +10,9 @@ export interface FinanceBudget extends ObjectDoc { * Fiscal Year */ fiscal_year: number; + /** + * Period + */ period?: string; /** * Department @@ -19,6 +22,9 @@ export interface FinanceBudget extends ObjectDoc { * Project */ project?: string | number; + /** + * Category + */ category?: string; /** * Allocated Amount @@ -40,6 +46,9 @@ export interface FinanceBudget extends ObjectDoc { * End Date */ end_date: Date | string; + /** + * Status + */ status?: string; /** * Budget Owner diff --git a/examples/scenarios/enterprise-structure/src/types/finance_expense.ts b/examples/scenarios/enterprise-structure/src/types/finance_expense.ts index 3734f625..57b945e8 100644 --- a/examples/scenarios/enterprise-structure/src/types/finance_expense.ts +++ b/examples/scenarios/enterprise-structure/src/types/finance_expense.ts @@ -14,11 +14,17 @@ export interface FinanceExpense extends ObjectDoc { * Expense Date */ expense_date: Date | string; + /** + * Category + */ category: string; /** * Amount */ amount: number; + /** + * Currency + */ currency?: string; /** * Merchant/Vendor @@ -32,6 +38,9 @@ export interface FinanceExpense extends ObjectDoc { * Receipt Attachment */ receipt_url?: any; + /** + * Status + */ status: string; /** * Approved By diff --git a/examples/scenarios/enterprise-structure/src/types/finance_invoice.ts b/examples/scenarios/enterprise-structure/src/types/finance_invoice.ts index e187b102..8f2cbdee 100644 --- a/examples/scenarios/enterprise-structure/src/types/finance_invoice.ts +++ b/examples/scenarios/enterprise-structure/src/types/finance_invoice.ts @@ -42,11 +42,17 @@ export interface FinanceInvoice extends ObjectDoc { * Balance Due */ balance?: number; + /** + * Status + */ status: string; /** * Payment Terms */ payment_terms?: string; + /** + * Currency + */ currency?: string; /** * Billing Address diff --git a/examples/scenarios/enterprise-structure/src/types/finance_payment.ts b/examples/scenarios/enterprise-structure/src/types/finance_payment.ts index 3c3b320d..402a43c9 100644 --- a/examples/scenarios/enterprise-structure/src/types/finance_payment.ts +++ b/examples/scenarios/enterprise-structure/src/types/finance_payment.ts @@ -22,12 +22,21 @@ export interface FinancePayment extends ObjectDoc { * Payment Amount */ amount: number; + /** + * Payment Method + */ payment_method: string; + /** + * Currency + */ currency?: string; /** * Reference/Transaction Number */ reference_number?: string; + /** + * Status + */ status: string; /** * Processed By diff --git a/examples/scenarios/enterprise-structure/src/types/hr_department.ts b/examples/scenarios/enterprise-structure/src/types/hr_department.ts index 3f96db09..6703ecfe 100644 --- a/examples/scenarios/enterprise-structure/src/types/hr_department.ts +++ b/examples/scenarios/enterprise-structure/src/types/hr_department.ts @@ -30,5 +30,8 @@ export interface HrDepartment extends ObjectDoc { * Description */ description?: string; + /** + * Status + */ status?: string; } diff --git a/examples/scenarios/enterprise-structure/src/types/hr_employee.ts b/examples/scenarios/enterprise-structure/src/types/hr_employee.ts index 176207a9..07d8765a 100644 --- a/examples/scenarios/enterprise-structure/src/types/hr_employee.ts +++ b/examples/scenarios/enterprise-structure/src/types/hr_employee.ts @@ -54,7 +54,13 @@ export interface HrEmployee extends ObjectDoc { * Termination Date */ termination_date?: Date | string; + /** + * Employment Type + */ employment_type?: string; + /** + * Status + */ status: string; /** * Base Salary diff --git a/examples/scenarios/enterprise-structure/src/types/hr_position.ts b/examples/scenarios/enterprise-structure/src/types/hr_position.ts index 221d65c7..809d6d47 100644 --- a/examples/scenarios/enterprise-structure/src/types/hr_position.ts +++ b/examples/scenarios/enterprise-structure/src/types/hr_position.ts @@ -42,5 +42,8 @@ export interface HrPosition extends ObjectDoc { * Key Responsibilities */ responsibilities?: string; + /** + * Status + */ status?: string; } diff --git a/examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts b/examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts index ff0c4144..c5a54919 100644 --- a/examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts +++ b/examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts @@ -34,7 +34,13 @@ export interface HrTimesheet extends ObjectDoc { * Break Hours */ break_hours?: number; + /** + * Work Type + */ work_type?: string; + /** + * Status + */ status: string; /** * Approved By diff --git a/examples/scenarios/enterprise-structure/src/types/organization.ts b/examples/scenarios/enterprise-structure/src/types/organization.ts index 48eb0807..aac1ed21 100644 --- a/examples/scenarios/enterprise-structure/src/types/organization.ts +++ b/examples/scenarios/enterprise-structure/src/types/organization.ts @@ -10,6 +10,9 @@ export interface Organization extends ObjectDoc { * Organization Code */ code?: string; + /** + * Type + */ type?: string; /** * Parent Organization @@ -43,5 +46,8 @@ export interface Organization extends ObjectDoc { * Contact Email */ email?: string; + /** + * Status + */ status?: string; } diff --git a/examples/scenarios/enterprise-structure/src/types/project_milestone.ts b/examples/scenarios/enterprise-structure/src/types/project_milestone.ts index 34451382..b02fdf52 100644 --- a/examples/scenarios/enterprise-structure/src/types/project_milestone.ts +++ b/examples/scenarios/enterprise-structure/src/types/project_milestone.ts @@ -22,6 +22,9 @@ export interface ProjectMilestone extends ObjectDoc { * Completion Date */ completed_date?: Date | string; + /** + * Status + */ status: string; /** * Milestone Owner diff --git a/examples/scenarios/enterprise-structure/src/types/project_project.ts b/examples/scenarios/enterprise-structure/src/types/project_project.ts index f35f3e39..3833d99e 100644 --- a/examples/scenarios/enterprise-structure/src/types/project_project.ts +++ b/examples/scenarios/enterprise-structure/src/types/project_project.ts @@ -14,8 +14,17 @@ export interface ProjectProject extends ObjectDoc { * Description */ description?: string; + /** + * Status + */ status: string; + /** + * Priority + */ priority?: string; + /** + * Type + */ type?: string; /** * Customer Account diff --git a/examples/scenarios/enterprise-structure/src/types/project_task.ts b/examples/scenarios/enterprise-structure/src/types/project_task.ts index 722709b2..28669e25 100644 --- a/examples/scenarios/enterprise-structure/src/types/project_task.ts +++ b/examples/scenarios/enterprise-structure/src/types/project_task.ts @@ -18,7 +18,13 @@ export interface ProjectTask extends ObjectDoc { * Description */ description?: string; + /** + * Status + */ status: string; + /** + * Priority + */ priority?: string; /** * Assigned To diff --git a/examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts b/examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts index e403f5fe..c74ca3ed 100644 --- a/examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts +++ b/examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts @@ -30,6 +30,9 @@ export interface ProjectTimesheetEntry extends ObjectDoc { * Billable */ billable?: boolean; + /** + * Status + */ status?: string; /** * Approved By diff --git a/examples/scenarios/enterprise-structure/src/types/user.ts b/examples/scenarios/enterprise-structure/src/types/user.ts index b8a8ce75..cb25d0a1 100644 --- a/examples/scenarios/enterprise-structure/src/types/user.ts +++ b/examples/scenarios/enterprise-structure/src/types/user.ts @@ -42,7 +42,13 @@ export interface User extends ObjectDoc { * Profile Picture */ avatar?: any; + /** + * Status + */ status?: string; + /** + * Role + */ role?: string; /** * Last Login Time diff --git a/examples/starters/basic-script/src/projects.ts b/examples/starters/basic-script/src/projects.ts index aa9dd7d2..34bbb56e 100644 --- a/examples/starters/basic-script/src/projects.ts +++ b/examples/starters/basic-script/src/projects.ts @@ -6,8 +6,17 @@ export interface Projects extends ObjectDoc { * Name */ name: string; + /** + * Status + */ status?: string; + /** + * Priority + */ priority?: string; + /** + * Description + */ description?: string; /** * Project Owner diff --git a/examples/starters/basic-script/src/tasks.ts b/examples/starters/basic-script/src/tasks.ts index 94ea19e3..e9a66f7b 100644 --- a/examples/starters/basic-script/src/tasks.ts +++ b/examples/starters/basic-script/src/tasks.ts @@ -2,10 +2,25 @@ import { ObjectDoc } from '@objectql/types'; export interface Tasks extends ObjectDoc { + /** + * Name + */ name: string; + /** + * Project + */ project?: string | number; + /** + * Due Date + */ due_date?: Date | string; + /** + * Completed + */ completed?: boolean; + /** + * Priority + */ priority?: string; /** * Assignee diff --git a/packages/core/src/loader.ts b/packages/core/src/loader.ts index 3d2b5db3..82dbbabb 100644 --- a/packages/core/src/loader.ts +++ b/packages/core/src/loader.ts @@ -257,7 +257,7 @@ function registerObject(registry: MetadataRegistry, obj: any, file: string, pack if (obj.fields) { for (const [key, field] of Object.entries(obj.fields)) { if (typeof field === 'object' && field !== null) { - const f = field as any; + const f = field as FieldConfig; // Ensure field has a name if (!f.name) { diff --git a/packages/types/src/field.ts b/packages/types/src/field.ts index 20eaf2ca..b43bbfb5 100644 --- a/packages/types/src/field.ts +++ b/packages/types/src/field.ts @@ -135,4 +135,15 @@ export interface FieldConfig { // Vector properties /** Dimension of the vector for 'vector' type fields. */ dimension?: number; + + // Formula & Summary + /** Formula expression. */ + formula?: string; + /** Object to summarize. */ + summary_object?: string; + /** Field on the summary object. */ + summary_field?: string; + /** Type of summary (count, sum, min, max, avg). */ + summary_type?: string; + filters?: any[]; } From 53c3e3e89fc3fe8ade70b57217dabc7cb1e6098e Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:50:22 +0800 Subject: [PATCH 11/15] Refactor to modular structure and update type exports Reorganized source files into module-based directories for projects, tasks, and kitchen-sink. Moved type definitions to a dedicated 'types' directory and updated imports accordingly. Replaced the app navigation structure in demo.app.yml with a separate main.menu.yml. Updated package.json scripts to generate types in the new location and improved the build process for YAML files. --- examples/starters/basic-script/package.json | 8 ++-- .../starters/basic-script/src/demo.app.yml | 39 +------------------ examples/starters/basic-script/src/index.ts | 4 +- .../starters/basic-script/src/main.menu.yml | 30 ++++++++++++++ .../kitchen-sink}/kitchen_sink.data.yml | 0 .../kitchen-sink}/kitchen_sink.object.yml | 0 .../pages}/create_project_wizard.page.yml | 0 .../projects/pages}/project_detail.page.yml | 0 .../projects}/project_approval.workflow.yml | 0 .../projects}/project_status.report.yml | 0 .../{ => modules/projects}/projects.action.ts | 14 +++---- .../{ => modules/projects}/projects.data.yml | 0 .../{ => modules/projects}/projects.form.yml | 0 .../{ => modules/projects}/projects.hook.ts | 4 +- .../projects}/projects.object.yml | 12 ------ .../projects}/projects.permission.yml | 0 .../projects}/projects.validation.yml | 0 .../{ => modules/projects}/projects.view.yml | 0 .../src/{ => modules/tasks}/tasks.data.yml | 0 .../src/{ => modules/tasks}/tasks.object.yml | 3 -- .../{ => modules/tasks}/tasks.permission.yml | 0 .../src/{ => pages}/dashboard.page.yml | 0 .../src/{ => pages}/landing.page.yml | 0 examples/starters/basic-script/src/types.ts | 25 ------------ .../starters/basic-script/src/types/index.ts | 3 ++ .../src/{ => types}/kitchen_sink.ts | 0 .../basic-script/src/{ => types}/projects.ts | 4 +- .../basic-script/src/{ => types}/tasks.ts | 0 28 files changed, 50 insertions(+), 96 deletions(-) create mode 100644 examples/starters/basic-script/src/main.menu.yml rename examples/starters/basic-script/src/{ => modules/kitchen-sink}/kitchen_sink.data.yml (100%) rename examples/starters/basic-script/src/{ => modules/kitchen-sink}/kitchen_sink.object.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects/pages}/create_project_wizard.page.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects/pages}/project_detail.page.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/project_approval.workflow.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/project_status.report.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.action.ts (96%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.data.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.form.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.hook.ts (99%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.object.yml (92%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.permission.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.validation.yml (100%) rename examples/starters/basic-script/src/{ => modules/projects}/projects.view.yml (100%) rename examples/starters/basic-script/src/{ => modules/tasks}/tasks.data.yml (100%) rename examples/starters/basic-script/src/{ => modules/tasks}/tasks.object.yml (92%) rename examples/starters/basic-script/src/{ => modules/tasks}/tasks.permission.yml (100%) rename examples/starters/basic-script/src/{ => pages}/dashboard.page.yml (100%) rename examples/starters/basic-script/src/{ => pages}/landing.page.yml (100%) delete mode 100644 examples/starters/basic-script/src/types.ts create mode 100644 examples/starters/basic-script/src/types/index.ts rename examples/starters/basic-script/src/{ => types}/kitchen_sink.ts (100%) rename examples/starters/basic-script/src/{ => types}/projects.ts (94%) rename examples/starters/basic-script/src/{ => types}/tasks.ts (100%) diff --git a/examples/starters/basic-script/package.json b/examples/starters/basic-script/package.json index 698c3c2c..58b94724 100644 --- a/examples/starters/basic-script/package.json +++ b/examples/starters/basic-script/package.json @@ -15,21 +15,21 @@ "dist" ], "scripts": { - "codegen": "objectql generate -s src -o src", - "build": "npm run codegen && tsc && cp src/*.yml dist/", + "codegen": "objectql generate -s src -o src/types", + "build": "npm run codegen && tsc && rsync -a --include '*/' --include '*.yml' --exclude '*' src/ dist/", "repl": "objectql repl", "test": "echo \"No tests specified\" && exit 0" }, "peerDependencies": { "@objectql/core": "workspace:*", - "@objectql/types": "workspace:*", "@objectql/driver-knex": "workspace:*", + "@objectql/types": "workspace:*", "sqlite3": "^5.1.7" }, "devDependencies": { + "@objectql/cli": "workspace:*", "@objectql/core": "workspace:*", "@objectql/types": "workspace:*", - "@objectql/cli": "workspace:*", "typescript": "^5.3.0" } } diff --git a/examples/starters/basic-script/src/demo.app.yml b/examples/starters/basic-script/src/demo.app.yml index 0561ea30..5bbd2813 100644 --- a/examples/starters/basic-script/src/demo.app.yml +++ b/examples/starters/basic-script/src/demo.app.yml @@ -1,41 +1,4 @@ -kind: app name: demo_app label: Demo Application description: "A showcase of ObjectQL capabilities including all field types." -home_page: /kitchen_sink - -# Access Control - Define system-wide roles -permissions: - roles: - - admin - - manager - - developer - - user - - viewer - -# Navigation Menu Structure -navigation: - - section: Core Business - icon: briefcase - items: - - object: projects - - object: tasks - - - section: Showcase - icon: flask - items: - - object: kitchen_sink - label: Component Gallery - - - section: Reporting - icon: bar-chart - items: - # Placeholder for future views/reports - - type: link - label: Dashboard - url: /dashboard - -# App-level Configuration (Theming, etc.) -layout: - theme: light - sidebar_width: 260 +homepage: /kitchen_sink diff --git a/examples/starters/basic-script/src/index.ts b/examples/starters/basic-script/src/index.ts index 9a7cb638..fcb073fe 100644 --- a/examples/starters/basic-script/src/index.ts +++ b/examples/starters/basic-script/src/index.ts @@ -1,3 +1 @@ -export * from './kitchen_sink'; -export * from './projects'; -export * from './tasks'; \ No newline at end of file +export * from './types'; diff --git a/examples/starters/basic-script/src/main.menu.yml b/examples/starters/basic-script/src/main.menu.yml new file mode 100644 index 00000000..6df5cb96 --- /dev/null +++ b/examples/starters/basic-script/src/main.menu.yml @@ -0,0 +1,30 @@ +name: main +label: Main Menu +type: sidebar +app: demo_app + +items: + - name: core_business + label: Core Business + icon: briefcase + type: section + items: + - object: projects + - object: tasks + + - name: showcase + label: Showcase + icon: flask + type: section + items: + - object: kitchen_sink + label: Component Gallery + + - name: reporting + label: Reporting + icon: bar-chart + type: section + items: + - type: url + label: Dashboard + path: /dashboard diff --git a/examples/starters/basic-script/src/kitchen_sink.data.yml b/examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.data.yml similarity index 100% rename from examples/starters/basic-script/src/kitchen_sink.data.yml rename to examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.data.yml diff --git a/examples/starters/basic-script/src/kitchen_sink.object.yml b/examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.object.yml similarity index 100% rename from examples/starters/basic-script/src/kitchen_sink.object.yml rename to examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.object.yml diff --git a/examples/starters/basic-script/src/create_project_wizard.page.yml b/examples/starters/basic-script/src/modules/projects/pages/create_project_wizard.page.yml similarity index 100% rename from examples/starters/basic-script/src/create_project_wizard.page.yml rename to examples/starters/basic-script/src/modules/projects/pages/create_project_wizard.page.yml diff --git a/examples/starters/basic-script/src/project_detail.page.yml b/examples/starters/basic-script/src/modules/projects/pages/project_detail.page.yml similarity index 100% rename from examples/starters/basic-script/src/project_detail.page.yml rename to examples/starters/basic-script/src/modules/projects/pages/project_detail.page.yml diff --git a/examples/starters/basic-script/src/project_approval.workflow.yml b/examples/starters/basic-script/src/modules/projects/project_approval.workflow.yml similarity index 100% rename from examples/starters/basic-script/src/project_approval.workflow.yml rename to examples/starters/basic-script/src/modules/projects/project_approval.workflow.yml diff --git a/examples/starters/basic-script/src/project_status.report.yml b/examples/starters/basic-script/src/modules/projects/project_status.report.yml similarity index 100% rename from examples/starters/basic-script/src/project_status.report.yml rename to examples/starters/basic-script/src/modules/projects/project_status.report.yml diff --git a/examples/starters/basic-script/src/projects.action.ts b/examples/starters/basic-script/src/modules/projects/projects.action.ts similarity index 96% rename from examples/starters/basic-script/src/projects.action.ts rename to examples/starters/basic-script/src/modules/projects/projects.action.ts index c5037983..b0d31022 100644 --- a/examples/starters/basic-script/src/projects.action.ts +++ b/examples/starters/basic-script/src/modules/projects/projects.action.ts @@ -1,5 +1,5 @@ import { ActionDefinition } from '@objectql/types'; -import { Project } from './types'; +import { Projects } from '../../types'; /** * Project Actions - Comprehensive Examples @@ -29,7 +29,7 @@ interface CompleteInput { * - Returning structured results * - Input parameter usage */ -export const complete: ActionDefinition = { +export const complete: ActionDefinition = { handler: async ({ id, input, api, user }) => { const { comment, completion_date } = input; @@ -103,7 +103,7 @@ interface ApproveInput { * - Required input parameters * - Business logic enforcement */ -export const approve: ActionDefinition = { +export const approve: ActionDefinition = { handler: async ({ id, input, api, user }) => { const { comment } = input; @@ -163,7 +163,7 @@ interface CloneInput { * - Copying related data * - Complex multi-step operations */ -export const clone: ActionDefinition = { +export const clone: ActionDefinition = { handler: async ({ id, input, api, user }) => { const { new_name, copy_tasks = false } = input; @@ -242,7 +242,7 @@ interface ImportProjectsInput { * - Error collection * - Progress reporting */ -export const import_projects: ActionDefinition = { +export const import_projects: ActionDefinition = { handler: async ({ input, api, user }) => { const { source, data, file_url } = input; @@ -332,7 +332,7 @@ interface BulkUpdateStatusInput { * - Validation across multiple items * - Transactional operations (if supported) */ -export const bulk_update_status: ActionDefinition = { +export const bulk_update_status: ActionDefinition = { handler: async ({ input, api, user }) => { const { project_ids, new_status } = input; @@ -412,7 +412,7 @@ export const bulk_update_status: ActionDefinition = { +export const generate_report: ActionDefinition = { handler: async ({ api, user }) => { console.log(`[Action] Generating project report for ${user?.id}`); diff --git a/examples/starters/basic-script/src/projects.data.yml b/examples/starters/basic-script/src/modules/projects/projects.data.yml similarity index 100% rename from examples/starters/basic-script/src/projects.data.yml rename to examples/starters/basic-script/src/modules/projects/projects.data.yml diff --git a/examples/starters/basic-script/src/projects.form.yml b/examples/starters/basic-script/src/modules/projects/projects.form.yml similarity index 100% rename from examples/starters/basic-script/src/projects.form.yml rename to examples/starters/basic-script/src/modules/projects/projects.form.yml diff --git a/examples/starters/basic-script/src/projects.hook.ts b/examples/starters/basic-script/src/modules/projects/projects.hook.ts similarity index 99% rename from examples/starters/basic-script/src/projects.hook.ts rename to examples/starters/basic-script/src/modules/projects/projects.hook.ts index f23efbb9..6a889c45 100644 --- a/examples/starters/basic-script/src/projects.hook.ts +++ b/examples/starters/basic-script/src/modules/projects/projects.hook.ts @@ -1,5 +1,5 @@ import { ObjectHookDefinition } from '@objectql/types'; -import { Project } from './types'; +import { Projects } from '../../types'; /** * Project Hooks - Comprehensive Example @@ -12,7 +12,7 @@ import { Project } from './types'; * 5. Dependency checking (beforeDelete) * 6. Side effects and cleanup (afterDelete) */ -const hooks: ObjectHookDefinition = { +const hooks: ObjectHookDefinition = { /** * beforeCreate - Data Validation & Defaulting diff --git a/examples/starters/basic-script/src/projects.object.yml b/examples/starters/basic-script/src/modules/projects/projects.object.yml similarity index 92% rename from examples/starters/basic-script/src/projects.object.yml rename to examples/starters/basic-script/src/modules/projects/projects.object.yml index faacf4c0..bfcda74e 100644 --- a/examples/starters/basic-script/src/projects.object.yml +++ b/examples/starters/basic-script/src/modules/projects/projects.object.yml @@ -4,11 +4,9 @@ fields: name: type: text required: true - label: Name index: true # Field-level index status: - type: select options: - planned - in_progress @@ -17,7 +15,6 @@ fields: index: true priority: - type: select options: - low - normal @@ -29,31 +26,24 @@ fields: owner: type: text - label: Project Owner budget: type: currency - label: Total Budget start_date: type: date - label: Start Date end_date: type: date - label: End Date approved_by: type: text - label: Approved By approved_at: type: datetime - label: Approved At approval_comment: type: textarea - label: Approval Comment indexes: # Composite index for reporting @@ -117,7 +107,6 @@ actions: description: Import multiple projects from various sources params: source: - type: select required: true label: Import Source options: @@ -145,7 +134,6 @@ actions: label: Project IDs help_text: "List of project IDs" new_status: - type: select required: true label: New Status options: diff --git a/examples/starters/basic-script/src/projects.permission.yml b/examples/starters/basic-script/src/modules/projects/projects.permission.yml similarity index 100% rename from examples/starters/basic-script/src/projects.permission.yml rename to examples/starters/basic-script/src/modules/projects/projects.permission.yml diff --git a/examples/starters/basic-script/src/projects.validation.yml b/examples/starters/basic-script/src/modules/projects/projects.validation.yml similarity index 100% rename from examples/starters/basic-script/src/projects.validation.yml rename to examples/starters/basic-script/src/modules/projects/projects.validation.yml diff --git a/examples/starters/basic-script/src/projects.view.yml b/examples/starters/basic-script/src/modules/projects/projects.view.yml similarity index 100% rename from examples/starters/basic-script/src/projects.view.yml rename to examples/starters/basic-script/src/modules/projects/projects.view.yml diff --git a/examples/starters/basic-script/src/tasks.data.yml b/examples/starters/basic-script/src/modules/tasks/tasks.data.yml similarity index 100% rename from examples/starters/basic-script/src/tasks.data.yml rename to examples/starters/basic-script/src/modules/tasks/tasks.data.yml diff --git a/examples/starters/basic-script/src/tasks.object.yml b/examples/starters/basic-script/src/modules/tasks/tasks.object.yml similarity index 92% rename from examples/starters/basic-script/src/tasks.object.yml rename to examples/starters/basic-script/src/modules/tasks/tasks.object.yml index 78173629..6a5128d5 100644 --- a/examples/starters/basic-script/src/tasks.object.yml +++ b/examples/starters/basic-script/src/modules/tasks/tasks.object.yml @@ -7,7 +7,6 @@ fields: index: true # Simple index project: - type: lookup reference_to: projects due_date: @@ -19,7 +18,6 @@ fields: index: true # Helpful for finding pending tasks priority: - type: select options: - low - medium @@ -32,6 +30,5 @@ fields: estimated_hours: type: number - min: 0 label: Estimated Hours diff --git a/examples/starters/basic-script/src/tasks.permission.yml b/examples/starters/basic-script/src/modules/tasks/tasks.permission.yml similarity index 100% rename from examples/starters/basic-script/src/tasks.permission.yml rename to examples/starters/basic-script/src/modules/tasks/tasks.permission.yml diff --git a/examples/starters/basic-script/src/dashboard.page.yml b/examples/starters/basic-script/src/pages/dashboard.page.yml similarity index 100% rename from examples/starters/basic-script/src/dashboard.page.yml rename to examples/starters/basic-script/src/pages/dashboard.page.yml diff --git a/examples/starters/basic-script/src/landing.page.yml b/examples/starters/basic-script/src/pages/landing.page.yml similarity index 100% rename from examples/starters/basic-script/src/landing.page.yml rename to examples/starters/basic-script/src/pages/landing.page.yml diff --git a/examples/starters/basic-script/src/types.ts b/examples/starters/basic-script/src/types.ts deleted file mode 100644 index b4c532f3..00000000 --- a/examples/starters/basic-script/src/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -// (Simulated for this example) - -export interface Project { - _id: string; - name: string; - status: 'planned' | 'in_progress' | 'completed'; - priority: 'low' | 'normal' | 'high'; - description?: string; - owner?: string; - budget?: number; - start_date?: Date | string; - end_date?: Date | string; -} - -export interface Task { - _id: string; - name: string; - project: string; // ID - due_date?: Date | string; - completed: boolean; - priority: 'low' | 'medium' | 'high'; - assigned_to?: string; - estimated_hours?: number; -} diff --git a/examples/starters/basic-script/src/types/index.ts b/examples/starters/basic-script/src/types/index.ts new file mode 100644 index 00000000..9a7cb638 --- /dev/null +++ b/examples/starters/basic-script/src/types/index.ts @@ -0,0 +1,3 @@ +export * from './kitchen_sink'; +export * from './projects'; +export * from './tasks'; \ No newline at end of file diff --git a/examples/starters/basic-script/src/kitchen_sink.ts b/examples/starters/basic-script/src/types/kitchen_sink.ts similarity index 100% rename from examples/starters/basic-script/src/kitchen_sink.ts rename to examples/starters/basic-script/src/types/kitchen_sink.ts diff --git a/examples/starters/basic-script/src/projects.ts b/examples/starters/basic-script/src/types/projects.ts similarity index 94% rename from examples/starters/basic-script/src/projects.ts rename to examples/starters/basic-script/src/types/projects.ts index 34bbb56e..150ec96f 100644 --- a/examples/starters/basic-script/src/projects.ts +++ b/examples/starters/basic-script/src/types/projects.ts @@ -19,11 +19,11 @@ export interface Projects extends ObjectDoc { */ description?: string; /** - * Project Owner + * Owner */ owner?: string; /** - * Total Budget + * Budget */ budget?: number; /** diff --git a/examples/starters/basic-script/src/tasks.ts b/examples/starters/basic-script/src/types/tasks.ts similarity index 100% rename from examples/starters/basic-script/src/tasks.ts rename to examples/starters/basic-script/src/types/tasks.ts From d40c72b3a4dbee1e22bef4591677099fcabe3f01 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:58:26 +0800 Subject: [PATCH 12/15] Restructure enterprise scenario and consolidate types Renamed package and updated metadata in package.json. Moved object YAML files to new locations and added ERP app/menu definitions. Deleted individual TypeScript object interfaces and merged user type definitions into a single file, simplifying type exports. --- .../enterprise-structure/package.json | 6 +- .../enterprise-structure/src/apps/erp.app.yml | 4 + .../core/{objects => }/attachment.object.yml | 0 .../{objects => }/organization.object.yml | 0 .../src/core/{objects => }/user.object.yml | 0 .../src/menus/erp.menu.yml | 11 +++ .../crm/{objects => }/crm_account.object.yml | 0 .../crm/{objects => }/crm_contact.object.yml | 0 .../crm/{objects => }/crm_lead.object.yml | 0 .../{objects => }/crm_opportunity.object.yml | 0 .../{objects => }/finance_budget.object.yml | 0 .../{objects => }/finance_expense.object.yml | 0 .../{objects => }/finance_invoice.object.yml | 0 .../{objects => }/finance_payment.object.yml | 0 .../hr/{objects => }/hr_department.object.yml | 0 .../hr/{objects => }/hr_employee.object.yml | 0 .../hr/{objects => }/hr_position.object.yml | 0 .../hr/{objects => }/hr_timesheet.object.yml | 0 .../project_milestone.object.yml | 0 .../{objects => }/project_project.object.yml | 0 .../{objects => }/project_task.object.yml | 0 .../project_timesheet_entry.object.yml | 0 .../src/types/core/objects/attachment.ts | 41 ---------- .../src/types/core/objects/organization.ts | 47 ----------- .../src/types/core/objects/user.ts | 39 --------- .../src/types/extensions/user.ts | 26 ------ .../enterprise-structure/src/types/index.ts | 2 +- .../types/modules/crm/objects/crm_account.ts | 55 ------------- .../types/modules/crm/objects/crm_contact.ts | 58 -------------- .../src/types/modules/crm/objects/crm_lead.ts | 74 ----------------- .../modules/crm/objects/crm_opportunity.ts | 50 ------------ .../modules/finance/objects/finance_budget.ts | 52 ------------ .../finance/objects/finance_expense.ts | 56 ------------- .../finance/objects/finance_invoice.ts | 63 --------------- .../finance/objects/finance_payment.ts | 40 ---------- .../types/modules/hr/objects/hr_department.ts | 34 -------- .../types/modules/hr/objects/hr_employee.ts | 79 ------------------- .../types/modules/hr/objects/hr_position.ts | 46 ----------- .../types/modules/hr/objects/hr_timesheet.ts | 51 ------------ .../project/objects/project_milestone.ts | 38 --------- .../project/objects/project_project.ts | 60 -------------- .../modules/project/objects/project_task.ts | 51 ------------ .../objects/project_timesheet_entry.ts | 42 ---------- .../enterprise-structure/src/types/user.ts | 48 +++++------ 44 files changed, 43 insertions(+), 1030 deletions(-) create mode 100644 examples/scenarios/enterprise-structure/src/apps/erp.app.yml rename examples/scenarios/enterprise-structure/src/core/{objects => }/attachment.object.yml (100%) rename examples/scenarios/enterprise-structure/src/core/{objects => }/organization.object.yml (100%) rename examples/scenarios/enterprise-structure/src/core/{objects => }/user.object.yml (100%) create mode 100644 examples/scenarios/enterprise-structure/src/menus/erp.menu.yml rename examples/scenarios/enterprise-structure/src/modules/crm/{objects => }/crm_account.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/crm/{objects => }/crm_contact.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/crm/{objects => }/crm_lead.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/crm/{objects => }/crm_opportunity.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/finance/{objects => }/finance_budget.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/finance/{objects => }/finance_expense.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/finance/{objects => }/finance_invoice.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/finance/{objects => }/finance_payment.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/hr/{objects => }/hr_department.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/hr/{objects => }/hr_employee.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/hr/{objects => }/hr_position.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/hr/{objects => }/hr_timesheet.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/project/{objects => }/project_milestone.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/project/{objects => }/project_project.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/project/{objects => }/project_task.object.yml (100%) rename examples/scenarios/enterprise-structure/src/modules/project/{objects => }/project_timesheet_entry.object.yml (100%) delete mode 100644 examples/scenarios/enterprise-structure/src/types/core/objects/attachment.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/core/objects/organization.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/core/objects/user.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/extensions/user.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_account.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_contact.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_lead.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_opportunity.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_budget.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_expense.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_invoice.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_payment.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_department.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_employee.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_position.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_timesheet.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_milestone.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_project.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_task.ts delete mode 100644 examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_timesheet_entry.ts diff --git a/examples/scenarios/enterprise-structure/package.json b/examples/scenarios/enterprise-structure/package.json index 6c2e1f13..217d315e 100644 --- a/examples/scenarios/enterprise-structure/package.json +++ b/examples/scenarios/enterprise-structure/package.json @@ -1,6 +1,6 @@ { - "name": "@example/enterprise-structure", - "version": "2.0.0", + "name": "@objectql/starter-enterprise", + "version": "1.0.0", "license": "MIT", "author": "ObjectQL Contributors", "repository": { @@ -8,7 +8,7 @@ "url": "https://github.com/objectql/objectql.git", "directory": "examples/scenarios/enterprise-structure" }, - "private": true, + "private": false, "description": "Enterprise-scale metadata organization example for ObjectQL", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/examples/scenarios/enterprise-structure/src/apps/erp.app.yml b/examples/scenarios/enterprise-structure/src/apps/erp.app.yml new file mode 100644 index 00000000..5440b72f --- /dev/null +++ b/examples/scenarios/enterprise-structure/src/apps/erp.app.yml @@ -0,0 +1,4 @@ +name: erp +label: Enterprise RPG +description: Core ERP system +icon: building diff --git a/examples/scenarios/enterprise-structure/src/core/objects/attachment.object.yml b/examples/scenarios/enterprise-structure/src/core/attachment.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/objects/attachment.object.yml rename to examples/scenarios/enterprise-structure/src/core/attachment.object.yml diff --git a/examples/scenarios/enterprise-structure/src/core/objects/organization.object.yml b/examples/scenarios/enterprise-structure/src/core/organization.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/objects/organization.object.yml rename to examples/scenarios/enterprise-structure/src/core/organization.object.yml diff --git a/examples/scenarios/enterprise-structure/src/core/objects/user.object.yml b/examples/scenarios/enterprise-structure/src/core/user.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/objects/user.object.yml rename to examples/scenarios/enterprise-structure/src/core/user.object.yml diff --git a/examples/scenarios/enterprise-structure/src/menus/erp.menu.yml b/examples/scenarios/enterprise-structure/src/menus/erp.menu.yml new file mode 100644 index 00000000..3c1a59cc --- /dev/null +++ b/examples/scenarios/enterprise-structure/src/menus/erp.menu.yml @@ -0,0 +1,11 @@ +name: erp_main +label: ERP Main Menu +app: erp +type: sidebar +items: + - name: projects + label: Projects + type: section + items: + - object: project_project + - object: project_task diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/crm_account.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_account.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/crm_account.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/crm_contact.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_contact.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/crm_contact.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/crm_lead.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_lead.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/crm_lead.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.object.yml b/examples/scenarios/enterprise-structure/src/modules/crm/crm_opportunity.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/objects/crm_opportunity.object.yml rename to examples/scenarios/enterprise-structure/src/modules/crm/crm_opportunity.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/finance_budget.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_budget.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/finance_budget.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/finance_expense.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_expense.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/finance_expense.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/finance_invoice.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_invoice.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/finance_invoice.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.object.yml b/examples/scenarios/enterprise-structure/src/modules/finance/finance_payment.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/objects/finance_payment.object.yml rename to examples/scenarios/enterprise-structure/src/modules/finance/finance_payment.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/hr_department.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_department.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/hr_department.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/hr_employee.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_employee.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/hr_employee.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/hr_position.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_position.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/hr_position.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.object.yml b/examples/scenarios/enterprise-structure/src/modules/hr/hr_timesheet.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/objects/hr_timesheet.object.yml rename to examples/scenarios/enterprise-structure/src/modules/hr/hr_timesheet.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/project_milestone.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/project_milestone.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/project_milestone.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/project_project.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/project_project.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/project_project.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/project_task.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/project_task.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/project_task.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.object.yml b/examples/scenarios/enterprise-structure/src/modules/project/project_timesheet_entry.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/objects/project_timesheet_entry.object.yml rename to examples/scenarios/enterprise-structure/src/modules/project/project_timesheet_entry.object.yml diff --git a/examples/scenarios/enterprise-structure/src/types/core/objects/attachment.ts b/examples/scenarios/enterprise-structure/src/types/core/objects/attachment.ts deleted file mode 100644 index 786dc4dd..00000000 --- a/examples/scenarios/enterprise-structure/src/types/core/objects/attachment.ts +++ /dev/null @@ -1,41 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface Attachment extends ObjectDoc { - /** - * File Name - */ - name: string; - /** - * File URL - */ - file_url: any; - /** - * File Size (bytes) - */ - file_size?: number; - /** - * MIME Type - */ - file_type?: string; - /** - * Related Object Name - */ - related_to?: string; - /** - * Related Record ID - */ - related_id?: string; - /** - * Uploaded By - */ - uploaded_by?: string | number; - /** - * Description - */ - description?: string; - /** - * Tags (comma-separated) - */ - tags?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/core/objects/organization.ts b/examples/scenarios/enterprise-structure/src/types/core/objects/organization.ts deleted file mode 100644 index 48eb0807..00000000 --- a/examples/scenarios/enterprise-structure/src/types/core/objects/organization.ts +++ /dev/null @@ -1,47 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface Organization extends ObjectDoc { - /** - * Organization Name - */ - name: string; - /** - * Organization Code - */ - code?: string; - type?: string; - /** - * Parent Organization - */ - parent?: string | number; - /** - * Manager - */ - manager?: string | number; - /** - * Description - */ - description?: string; - /** - * Organization Logo - */ - logo?: any; - /** - * Address - */ - address?: string; - /** - * Website - */ - website?: string; - /** - * Phone Number - */ - phone?: string; - /** - * Contact Email - */ - email?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/core/objects/user.ts b/examples/scenarios/enterprise-structure/src/types/core/objects/user.ts deleted file mode 100644 index 72b870a3..00000000 --- a/examples/scenarios/enterprise-structure/src/types/core/objects/user.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface User extends ObjectDoc { - /** - * Full Name - */ - name: string; - /** - * Email Address - */ - email: string; - /** - * Username - */ - username?: string; - /** - * Mobile Phone - */ - mobile?: string; - /** - * Profile Picture - */ - avatar?: any; - status?: string; - role?: string; - /** - * Last Login Time - */ - last_login_at?: Date | string; - /** - * Preferred Language - */ - locale?: string; - /** - * Timezone - */ - timezone?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/extensions/user.ts b/examples/scenarios/enterprise-structure/src/types/extensions/user.ts deleted file mode 100644 index 62c3a3bb..00000000 --- a/examples/scenarios/enterprise-structure/src/types/extensions/user.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface User extends ObjectDoc { - /** - * Employee Record - */ - employee?: string | number; - email: any; - /** - * Employee ID - */ - employee_id?: string; - /** - * Department - */ - department?: string | number; - /** - * Office Location - */ - office_location?: string; - /** - * Two-Factor Auth Enabled - */ - two_factor_enabled?: boolean; -} diff --git a/examples/scenarios/enterprise-structure/src/types/index.ts b/examples/scenarios/enterprise-structure/src/types/index.ts index a49b8298..45f2c984 100644 --- a/examples/scenarios/enterprise-structure/src/types/index.ts +++ b/examples/scenarios/enterprise-structure/src/types/index.ts @@ -1,6 +1,6 @@ -export * from './user'; export * from './attachment'; export * from './organization'; +export * from './user'; export * from './crm_account'; export * from './crm_contact'; export * from './crm_lead'; diff --git a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_account.ts b/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_account.ts deleted file mode 100644 index 52933a6e..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_account.ts +++ /dev/null @@ -1,55 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmAccount extends ObjectDoc { - /** - * Account Name - */ - name: string; - /** - * Account Number - */ - account_number?: string; - type?: string; - /** - * Industry - */ - industry?: string; - /** - * Annual Revenue - */ - annual_revenue?: number; - /** - * Number of Employees - */ - employees?: number; - /** - * Website - */ - website?: string; - /** - * Phone - */ - phone?: string; - /** - * Billing Address - */ - billing_address?: string; - /** - * Shipping Address - */ - shipping_address?: string; - /** - * Account Owner - */ - owner?: string | number; - /** - * Parent Account - */ - parent_account?: string | number; - /** - * Description - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_contact.ts b/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_contact.ts deleted file mode 100644 index 2e2242b1..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_contact.ts +++ /dev/null @@ -1,58 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmContact extends ObjectDoc { - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Full Name - */ - full_name?: any; - /** - * Email - */ - email?: string; - /** - * Phone - */ - phone?: string; - /** - * Mobile - */ - mobile?: string; - /** - * Job Title - */ - title?: string; - /** - * Department - */ - department?: string; - /** - * Account - */ - account: string | number; - /** - * Contact Owner - */ - owner?: string | number; - /** - * Lead Source - */ - lead_source?: string; - /** - * LinkedIn Profile - */ - linkedin_url?: string; - /** - * Notes - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_lead.ts b/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_lead.ts deleted file mode 100644 index 6450ff56..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_lead.ts +++ /dev/null @@ -1,74 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmLead extends ObjectDoc { - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Company - */ - company?: string; - /** - * Job Title - */ - title?: string; - /** - * Email - */ - email?: string; - /** - * Phone - */ - phone?: string; - status: string; - /** - * Lead Source - */ - lead_source?: string; - /** - * Lead Rating - */ - rating?: string; - /** - * Lead Owner - */ - owner?: string | number; - /** - * Industry - */ - industry?: string; - /** - * Annual Revenue - */ - annual_revenue?: number; - /** - * Number of Employees - */ - employees?: number; - /** - * Description - */ - description?: string; - /** - * Conversion Date - */ - converted_date?: Date | string; - /** - * Converted Account - */ - converted_account?: string | number; - /** - * Converted Contact - */ - converted_contact?: string | number; - /** - * Converted Opportunity - */ - converted_opportunity?: string | number; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_opportunity.ts b/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_opportunity.ts deleted file mode 100644 index fc2e8a68..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/crm/objects/crm_opportunity.ts +++ /dev/null @@ -1,50 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface CrmOpportunity extends ObjectDoc { - /** - * Opportunity Name - */ - name: string; - /** - * Account - */ - account: string | number; - /** - * Amount - */ - amount: number; - /** - * Expected Close Date - */ - close_date: Date | string; - stage: string; - /** - * Probability (%) - */ - probability?: number; - /** - * Opportunity Type - */ - type?: string; - /** - * Lead Source - */ - lead_source?: string; - /** - * Opportunity Owner - */ - owner: string | number; - /** - * Next Step - */ - next_step?: string; - /** - * Description - */ - description?: string; - /** - * Known Competitors - */ - competitors?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_budget.ts b/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_budget.ts deleted file mode 100644 index a27ab868..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_budget.ts +++ /dev/null @@ -1,52 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceBudget extends ObjectDoc { - /** - * Budget Name - */ - name: string; - /** - * Fiscal Year - */ - fiscal_year: number; - period?: string; - /** - * Department - */ - department?: string | number; - /** - * Project - */ - project?: string | number; - category?: string; - /** - * Allocated Amount - */ - allocated_amount: number; - /** - * Spent Amount - */ - spent_amount?: number; - /** - * Remaining Amount - */ - remaining_amount?: number; - /** - * Start Date - */ - start_date: Date | string; - /** - * End Date - */ - end_date: Date | string; - status?: string; - /** - * Budget Owner - */ - owner?: string | number; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_expense.ts b/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_expense.ts deleted file mode 100644 index 3734f625..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_expense.ts +++ /dev/null @@ -1,56 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceExpense extends ObjectDoc { - /** - * Expense Number - */ - expense_number: string; - /** - * Employee - */ - employee: string | number; - /** - * Expense Date - */ - expense_date: Date | string; - category: string; - /** - * Amount - */ - amount: number; - currency?: string; - /** - * Merchant/Vendor - */ - merchant?: string; - /** - * Description - */ - description: string; - /** - * Receipt Attachment - */ - receipt_url?: any; - status: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; - /** - * Reimbursement Date - */ - reimbursed_at?: Date | string; - /** - * Department - */ - department?: string | number; - /** - * Related Project - */ - project?: string | number; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_invoice.ts b/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_invoice.ts deleted file mode 100644 index e187b102..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_invoice.ts +++ /dev/null @@ -1,63 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinanceInvoice extends ObjectDoc { - /** - * Invoice Number - */ - invoice_number: string; - /** - * Customer Account - */ - account: string | number; - /** - * Invoice Date - */ - invoice_date: Date | string; - /** - * Due Date - */ - due_date: Date | string; - /** - * Subtotal - */ - subtotal: number; - /** - * Tax Amount - */ - tax_amount?: number; - /** - * Discount Amount - */ - discount_amount?: number; - /** - * Total Amount - */ - total_amount: number; - /** - * Paid Amount - */ - paid_amount?: number; - /** - * Balance Due - */ - balance?: number; - status: string; - /** - * Payment Terms - */ - payment_terms?: string; - currency?: string; - /** - * Billing Address - */ - billing_address?: string; - /** - * Notes - */ - notes?: string; - /** - * Internal Notes - */ - internal_notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_payment.ts b/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_payment.ts deleted file mode 100644 index 3c3b320d..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/finance/objects/finance_payment.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface FinancePayment extends ObjectDoc { - /** - * Payment Number - */ - payment_number: string; - /** - * Related Invoice - */ - invoice?: string | number; - /** - * Customer Account - */ - account: string | number; - /** - * Payment Date - */ - payment_date: Date | string; - /** - * Payment Amount - */ - amount: number; - payment_method: string; - currency?: string; - /** - * Reference/Transaction Number - */ - reference_number?: string; - status: string; - /** - * Processed By - */ - processed_by?: string | number; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_department.ts b/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_department.ts deleted file mode 100644 index 3f96db09..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_department.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrDepartment extends ObjectDoc { - /** - * Department Name - */ - name: string; - /** - * Department Code - */ - code: string; - /** - * Parent Department - */ - parent_department?: string | number; - /** - * Department Manager - */ - manager?: string | number; - /** - * Cost Center Code - */ - cost_center?: string; - /** - * Primary Location - */ - location?: string; - /** - * Description - */ - description?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_employee.ts b/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_employee.ts deleted file mode 100644 index 176207a9..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_employee.ts +++ /dev/null @@ -1,79 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrEmployee extends ObjectDoc { - /** - * Employee Number - */ - employee_number: string; - /** - * System User Account - */ - user?: string | number; - /** - * First Name - */ - first_name: string; - /** - * Last Name - */ - last_name: string; - /** - * Full Name - */ - full_name?: any; - /** - * Work Email - */ - email: string; - /** - * Work Phone - */ - phone?: string; - /** - * Mobile Phone - */ - mobile?: string; - /** - * Department - */ - department: string | number; - /** - * Position - */ - position: string | number; - /** - * Direct Manager - */ - manager?: string | number; - /** - * Hire Date - */ - hire_date: Date | string; - /** - * Termination Date - */ - termination_date?: Date | string; - employment_type?: string; - status: string; - /** - * Base Salary - */ - salary?: number; - /** - * Office Location - */ - location?: string; - /** - * Emergency Contact Name - */ - emergency_contact_name?: string; - /** - * Emergency Contact Phone - */ - emergency_contact_phone?: string; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_position.ts b/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_position.ts deleted file mode 100644 index 221d65c7..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_position.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrPosition extends ObjectDoc { - /** - * Position Title - */ - title: string; - /** - * Position Code - */ - code: string; - /** - * Position Level - */ - level?: string; - /** - * Department - */ - department?: string | number; - /** - * Reports To Position - */ - reports_to?: string | number; - /** - * Minimum Salary - */ - min_salary?: number; - /** - * Maximum Salary - */ - max_salary?: number; - /** - * Job Description - */ - description?: string; - /** - * Requirements & Qualifications - */ - requirements?: string; - /** - * Key Responsibilities - */ - responsibilities?: string; - status?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_timesheet.ts b/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_timesheet.ts deleted file mode 100644 index ff0c4144..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/hr/objects/hr_timesheet.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface HrTimesheet extends ObjectDoc { - /** - * Employee - */ - employee: string | number; - /** - * Work Date - */ - work_date: Date | string; - /** - * Clock In Time - */ - clock_in?: Date | string; - /** - * Clock Out Time - */ - clock_out?: Date | string; - /** - * Total Hours - */ - total_hours?: number; - /** - * Regular Hours - */ - regular_hours?: number; - /** - * Overtime Hours - */ - overtime_hours?: number; - /** - * Break Hours - */ - break_hours?: number; - work_type?: string; - status: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; - /** - * Notes - */ - notes?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_milestone.ts b/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_milestone.ts deleted file mode 100644 index 34451382..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_milestone.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectMilestone extends ObjectDoc { - /** - * Milestone Name - */ - name: string; - /** - * Project - */ - project: string | number; - /** - * Description - */ - description?: string; - /** - * Target Date - */ - due_date: Date | string; - /** - * Completion Date - */ - completed_date?: Date | string; - status: string; - /** - * Milestone Owner - */ - owner?: string | number; - /** - * Deliverables - */ - deliverables?: string; - /** - * Success Criteria - */ - success_criteria?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_project.ts b/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_project.ts deleted file mode 100644 index f35f3e39..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_project.ts +++ /dev/null @@ -1,60 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectProject extends ObjectDoc { - /** - * Project Name - */ - name: string; - /** - * Project Code - */ - code: string; - /** - * Description - */ - description?: string; - status: string; - priority?: string; - type?: string; - /** - * Customer Account - */ - account?: string | number; - /** - * Project Manager - */ - owner: string | number; - /** - * Department - */ - department?: string | number; - /** - * Start Date - */ - start_date: Date | string; - /** - * Target End Date - */ - end_date?: Date | string; - /** - * Actual End Date - */ - actual_end_date?: Date | string; - /** - * Project Budget - */ - budget?: number; - /** - * Estimated Hours - */ - estimated_hours?: number; - /** - * Actual Hours - */ - actual_hours?: number; - /** - * Completion % - */ - completion_percentage?: number; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_task.ts b/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_task.ts deleted file mode 100644 index 722709b2..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_task.ts +++ /dev/null @@ -1,51 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectTask extends ObjectDoc { - /** - * Task Name - */ - name: string; - /** - * Project - */ - project: string | number; - /** - * Parent Task - */ - parent_task?: string | number; - /** - * Description - */ - description?: string; - status: string; - priority?: string; - /** - * Assigned To - */ - assigned_to?: string | number; - /** - * Due Date - */ - due_date?: Date | string; - /** - * Completion Date - */ - completed_date?: Date | string; - /** - * Estimated Hours - */ - estimated_hours?: number; - /** - * Actual Hours - */ - actual_hours?: number; - /** - * Milestone - */ - milestone?: string | number; - /** - * Tags - */ - tags?: string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_timesheet_entry.ts b/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_timesheet_entry.ts deleted file mode 100644 index e403f5fe..00000000 --- a/examples/scenarios/enterprise-structure/src/types/modules/project/objects/project_timesheet_entry.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Auto-generated by ObjectQL. DO NOT EDIT. -import { ObjectDoc } from '@objectql/types'; - -export interface ProjectTimesheetEntry extends ObjectDoc { - /** - * Employee - */ - employee: string | number; - /** - * Project - */ - project: string | number; - /** - * Task - */ - task?: string | number; - /** - * Work Date - */ - work_date: Date | string; - /** - * Hours Worked - */ - hours: number; - /** - * Work Description - */ - description?: string; - /** - * Billable - */ - billable?: boolean; - status?: string; - /** - * Approved By - */ - approved_by?: string | number; - /** - * Approval Time - */ - approved_at?: Date | string; -} diff --git a/examples/scenarios/enterprise-structure/src/types/user.ts b/examples/scenarios/enterprise-structure/src/types/user.ts index cb25d0a1..a49276bf 100644 --- a/examples/scenarios/enterprise-structure/src/types/user.ts +++ b/examples/scenarios/enterprise-structure/src/types/user.ts @@ -2,34 +2,14 @@ import { ObjectDoc } from '@objectql/types'; export interface User extends ObjectDoc { - /** - * Employee Record - */ - employee?: string | number; - /** - * Email Address - */ - email: string; - /** - * Employee ID - */ - employee_id?: string; - /** - * Department - */ - department?: string | number; - /** - * Office Location - */ - office_location?: string; - /** - * Two-Factor Auth Enabled - */ - two_factor_enabled?: boolean; /** * Full Name */ name: string; + /** + * Email + */ + email: any; /** * Username */ @@ -62,4 +42,24 @@ export interface User extends ObjectDoc { * Timezone */ timezone?: string; + /** + * Employee Record + */ + employee?: string | number; + /** + * Employee ID + */ + employee_id?: string; + /** + * Department + */ + department?: string | number; + /** + * Office Location + */ + office_location?: string; + /** + * Two-Factor Auth Enabled + */ + two_factor_enabled?: boolean; } From d3cd022fdee3c20ae05e9dd17de2996bfdd044fe Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:41:13 +0800 Subject: [PATCH 13/15] feat: Implement dynamic plugin loading and validation system - Added a new plugin loader in `plugin.ts` to dynamically load ObjectQL plugins. - Created tests for dynamic package loading in `dynamic.test.ts`. - Defined a project object with validation rules in `project-with-validation.object.yml`. - Implemented action handlers for project management in `project.action.js`. - Developed various page configurations including dashboards and responsive layouts. - Enhanced validation tests to cover field-level, cross-field, and state machine validations. - Introduced a remote driver for ObjectQL SDK to handle CRUD operations over HTTP. - Updated TypeScript configurations and package metadata for new features. --- examples/plugins/audit-log/objectql.config.ts | 13 +- examples/plugins/audit-log/package.json | 3 +- .../enterprise-structure/package.json | 6 +- .../enterprise-structure/src/index.ts | 11 +- .../scenarios/preset-usage/objectql.config.ts | 6 +- examples/scenarios/preset-usage/package.json | 3 +- .../starters/basic-script/objectql.config.ts | 8 +- examples/starters/basic-script/package.json | 3 +- examples/starters/express-api/package.json | 3 +- examples/starters/express-api/src/index.ts | 14 ++- packages/cli/package.json | 3 +- packages/cli/src/commands/generate.ts | 2 +- packages/cli/src/commands/serve.ts | 6 +- packages/cli/src/commands/studio.ts | 1 + packages/cli/tsconfig.json | 3 +- packages/core/package.json | 4 +- packages/core/src/app.ts | 114 ++--------------- packages/core/src/index.ts | 8 +- packages/core/src/remote.ts | 50 -------- packages/core/test/remote.test.ts | 119 ------------------ packages/core/tsconfig.json | 2 +- .../{driver-knex => driver-sql}/CHANGELOG.md | 0 .../{driver-knex => driver-sql}/README.md | 0 .../jest.config.js | 0 .../{driver-knex => driver-sql}/package.json | 2 +- .../{driver-knex => driver-sql}/src/index.ts | 0 .../test/index.test.ts | 0 .../test/schema.test.ts | 0 .../{driver-knex => driver-sql}/tsconfig.json | 0 packages/platform-node/jest.config.js | 13 ++ packages/platform-node/package.json | 19 +++ .../{core => platform-node}/src/driver.ts | 6 +- packages/platform-node/src/index.ts | 3 + .../{core => platform-node}/src/loader.ts | 2 +- .../{core => platform-node}/src/plugin.ts | 0 .../test/dynamic.test.ts | 17 ++- .../project-with-validation.object.yml | 0 .../test/fixtures/project.action.js | 0 .../test/fixtures/project.object.yml | 0 .../test/fixtures/test_dashboard.page.yml | 0 .../test/fixtures/test_page.page.yml | 0 .../test/fixtures/test_responsive.page.yml | 0 .../test/fixtures/test_sections.page.yml | 0 .../test/loader.test.ts | 0 .../test/metadata.test.ts | 2 +- .../{core => platform-node}/test/page.test.ts | 0 .../test/validation.test.ts | 2 +- packages/platform-node/tsconfig.json | 14 +++ packages/{driver-remote => sdk}/CHANGELOG.md | 0 packages/{driver-remote => sdk}/package.json | 2 +- packages/{driver-remote => sdk}/src/index.ts | 0 packages/{driver-remote => sdk}/tsconfig.json | 0 packages/server/src/metadata.ts | 5 +- packages/types/src/app.ts | 8 -- pnpm-lock.yaml | 76 +++++++---- tsconfig.json | 6 +- 56 files changed, 198 insertions(+), 361 deletions(-) delete mode 100644 packages/core/src/remote.ts delete mode 100644 packages/core/test/remote.test.ts rename packages/{driver-knex => driver-sql}/CHANGELOG.md (100%) rename packages/{driver-knex => driver-sql}/README.md (100%) rename packages/{driver-knex => driver-sql}/jest.config.js (100%) rename packages/{driver-knex => driver-sql}/package.json (88%) rename packages/{driver-knex => driver-sql}/src/index.ts (100%) rename packages/{driver-knex => driver-sql}/test/index.test.ts (100%) rename packages/{driver-knex => driver-sql}/test/schema.test.ts (100%) rename packages/{driver-knex => driver-sql}/tsconfig.json (100%) create mode 100644 packages/platform-node/jest.config.js create mode 100644 packages/platform-node/package.json rename packages/{core => platform-node}/src/driver.ts (92%) create mode 100644 packages/platform-node/src/index.ts rename packages/{core => platform-node}/src/loader.ts (99%) rename packages/{core => platform-node}/src/plugin.ts (100%) rename packages/{core => platform-node}/test/dynamic.test.ts (58%) rename packages/{core => platform-node}/test/fixtures/project-with-validation.object.yml (100%) rename packages/{core => platform-node}/test/fixtures/project.action.js (100%) rename packages/{core => platform-node}/test/fixtures/project.object.yml (100%) rename packages/{core => platform-node}/test/fixtures/test_dashboard.page.yml (100%) rename packages/{core => platform-node}/test/fixtures/test_page.page.yml (100%) rename packages/{core => platform-node}/test/fixtures/test_responsive.page.yml (100%) rename packages/{core => platform-node}/test/fixtures/test_sections.page.yml (100%) rename packages/{core => platform-node}/test/loader.test.ts (100%) rename packages/{core => platform-node}/test/metadata.test.ts (97%) rename packages/{core => platform-node}/test/page.test.ts (100%) rename packages/{core => platform-node}/test/validation.test.ts (99%) create mode 100644 packages/platform-node/tsconfig.json rename packages/{driver-remote => sdk}/CHANGELOG.md (100%) rename packages/{driver-remote => sdk}/package.json (88%) rename packages/{driver-remote => sdk}/src/index.ts (100%) rename packages/{driver-remote => sdk}/tsconfig.json (100%) diff --git a/examples/plugins/audit-log/objectql.config.ts b/examples/plugins/audit-log/objectql.config.ts index 8a905231..e814f43a 100644 --- a/examples/plugins/audit-log/objectql.config.ts +++ b/examples/plugins/audit-log/objectql.config.ts @@ -1,13 +1,20 @@ import { ObjectQL } from '@objectql/core'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader, createDriverFromConnection } from '@objectql/platform-node'; +import { AuditLogPlugin } from './src'; import * as path from 'path'; -import { AuditLogPlugin } from './src/audit.plugin'; const db = new ObjectQL({ - connection: `sqlite://${path.join(__dirname, 'audit.sqlite3')}`, - source: ['src'], + datasources: { + default: createDriverFromConnection(`sqlite://${path.join(__dirname, 'audit.sqlite3')}`) + }, plugins: [ new AuditLogPlugin() ] }); +// Load Schema for testing only +const loader = new ObjectLoader(db.metadata); +loader.load(path.join(__dirname, 'src')); + export default db; diff --git a/examples/plugins/audit-log/package.json b/examples/plugins/audit-log/package.json index e166cee5..f3c18d3b 100644 --- a/examples/plugins/audit-log/package.json +++ b/examples/plugins/audit-log/package.json @@ -21,7 +21,8 @@ "@objectql/cli": "workspace:*", "@objectql/core": "workspace:*", "@objectql/types": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "typescript": "^5.3.0" } } diff --git a/examples/scenarios/enterprise-structure/package.json b/examples/scenarios/enterprise-structure/package.json index 217d315e..febf5e7f 100644 --- a/examples/scenarios/enterprise-structure/package.json +++ b/examples/scenarios/enterprise-structure/package.json @@ -23,14 +23,16 @@ "peerDependencies": { "@objectql/core": "workspace:*", "@objectql/types": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "sqlite3": "^5.1.7" }, "devDependencies": { "@objectql/core": "workspace:*", "@objectql/types": "workspace:*", "@objectql/cli": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "typescript": "^5.3.0" } } diff --git a/examples/scenarios/enterprise-structure/src/index.ts b/examples/scenarios/enterprise-structure/src/index.ts index 812f2f68..4ca3a81b 100644 --- a/examples/scenarios/enterprise-structure/src/index.ts +++ b/examples/scenarios/enterprise-structure/src/index.ts @@ -6,7 +6,8 @@ */ import { ObjectQL } from '@objectql/core'; -import { KnexDriver } from '@objectql/driver-knex'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader } from '@objectql/platform-node'; import path from 'path'; /** @@ -21,11 +22,13 @@ export async function initializeApp() { filename: ':memory:' } }) - }, - // Load metadata from current directory - source: __dirname + } }); + // Load metadata from current directory + const loader = new ObjectLoader(app.metadata); + loader.load(__dirname); + await app.init(); return app; } diff --git a/examples/scenarios/preset-usage/objectql.config.ts b/examples/scenarios/preset-usage/objectql.config.ts index 9fdf29e4..77334f9f 100644 --- a/examples/scenarios/preset-usage/objectql.config.ts +++ b/examples/scenarios/preset-usage/objectql.config.ts @@ -1,8 +1,12 @@ import { ObjectQL } from '@objectql/core'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader, createDriverFromConnection } from '@objectql/platform-node'; import * as path from 'path'; const db = new ObjectQL({ - connection: `sqlite://${path.join(__dirname, 'preset.sqlite3')}`, + datasources: { + default: createDriverFromConnection(`sqlite://${path.join(__dirname, 'preset.sqlite3')}`) + }, // Load the project-management capabilities as a preset presets: ['@example/basic-script'], plugins: ['@example/audit-log'] diff --git a/examples/scenarios/preset-usage/package.json b/examples/scenarios/preset-usage/package.json index 9297e108..d0afcced 100644 --- a/examples/scenarios/preset-usage/package.json +++ b/examples/scenarios/preset-usage/package.json @@ -23,7 +23,8 @@ "@objectql/core": "workspace:*", "@objectql/types": "workspace:*", "@objectql/cli": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "sqlite3": "^5.1.7", "typescript": "^5.3.0" } diff --git a/examples/starters/basic-script/objectql.config.ts b/examples/starters/basic-script/objectql.config.ts index 328ade5f..b80096ea 100644 --- a/examples/starters/basic-script/objectql.config.ts +++ b/examples/starters/basic-script/objectql.config.ts @@ -1,5 +1,6 @@ import { ObjectQL } from '@objectql/core'; -import { KnexDriver } from '@objectql/driver-knex'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader } from '@objectql/platform-node'; import * as path from 'path'; const db = new ObjectQL({ @@ -12,7 +13,10 @@ const db = new ObjectQL({ useNullAsDefault: true }) }, - source: [path.join(__dirname, 'src')], + const loader = new ObjectLoader(app.metadata); +loader.load(path.join(__dirname, 'src')); + +export default app;, presets: [] }); diff --git a/examples/starters/basic-script/package.json b/examples/starters/basic-script/package.json index 58b94724..6b43c667 100644 --- a/examples/starters/basic-script/package.json +++ b/examples/starters/basic-script/package.json @@ -22,7 +22,8 @@ }, "peerDependencies": { "@objectql/core": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "@objectql/types": "workspace:*", "sqlite3": "^5.1.7" }, diff --git a/examples/starters/express-api/package.json b/examples/starters/express-api/package.json index c60231af..84fdabc7 100644 --- a/examples/starters/express-api/package.json +++ b/examples/starters/express-api/package.json @@ -17,7 +17,8 @@ "@objectql/core": "workspace:*", "@objectql/server": "workspace:*", "@objectql/types": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "express": "^4.18.2", "sqlite3": "^5.1.7" }, diff --git a/examples/starters/express-api/src/index.ts b/examples/starters/express-api/src/index.ts index 3e33b689..ae711c5b 100644 --- a/examples/starters/express-api/src/index.ts +++ b/examples/starters/express-api/src/index.ts @@ -1,6 +1,7 @@ import express from 'express'; import { ObjectQL } from '@objectql/core'; -import { KnexDriver } from '@objectql/driver-knex'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader } from '@objectql/platform-node'; import { createNodeHandler, createMetadataHandler, createStudioHandler, createRESTHandler } from '@objectql/server'; import * as path from 'path'; @@ -18,11 +19,13 @@ async function main() { } }); - // 2. Register Schema - app.loadFromDirectory(path.join(__dirname)); - await app.init(); + // 2. Load Schema +const rootDir = path.resolve(__dirname, '..'); +const loader = new ObjectLoader(app.metadata); +loader.load(rootDir); - // 3. Create Handlers +// 3. Init +app.init().then(async () => { const objectQLHandler = createNodeHandler(app); const restHandler = createRESTHandler(app); const metadataHandler = createMetadataHandler(app); @@ -75,6 +78,7 @@ async function main() { console.log(`\nTest Metadata API:`); console.log(`curl http://localhost:${port}/api/metadata/objects`); }); + }); } main().catch(console.error); diff --git a/packages/cli/package.json b/packages/cli/package.json index 71604423..827d04cd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -14,7 +14,8 @@ "@objectql/types": "workspace:*", "@objectql/core": "workspace:*", "@objectql/server": "workspace:*", - "@objectql/driver-knex": "workspace:*", + "@objectql/driver-sql": "workspace:*", + "@objectql/platform-node": "workspace:*", "sqlite3": "^5.1.7", "commander": "^11.0.0", "chalk": "^4.1.2", diff --git a/packages/cli/src/commands/generate.ts b/packages/cli/src/commands/generate.ts index 7a97a33c..208ba704 100644 --- a/packages/cli/src/commands/generate.ts +++ b/packages/cli/src/commands/generate.ts @@ -1,6 +1,6 @@ import * as fs from 'fs'; import * as path from 'path'; -import { loadObjectConfigs } from '@objectql/core'; +import { loadObjectConfigs } from '@objectql/platform-node'; import { ObjectConfig, FieldConfig } from '@objectql/types'; export async function generateTypes(sourceDir: string, outputDir: string) { diff --git a/packages/cli/src/commands/serve.ts b/packages/cli/src/commands/serve.ts index 1c6f25d5..58b64273 100644 --- a/packages/cli/src/commands/serve.ts +++ b/packages/cli/src/commands/serve.ts @@ -1,5 +1,6 @@ import { ObjectQL } from '@objectql/core'; -import { KnexDriver } from '@objectql/driver-knex'; +import { KnexDriver } from '@objectql/driver-sql'; +import { ObjectLoader } from '@objectql/platform-node'; import { createNodeHandler } from '@objectql/server'; import { createServer } from 'http'; import * as path from 'path'; @@ -53,7 +54,8 @@ export async function serve(options: { port: number; dir: string }) { // 2. Load Schema try { - app.loadFromDirectory(rootDir); + const loader = new ObjectLoader(app.metadata); + loader.load(rootDir); await app.init(); console.log(chalk.green('✅ Schema loaded successfully.')); } catch (e: any) { diff --git a/packages/cli/src/commands/studio.ts b/packages/cli/src/commands/studio.ts index ed5b976f..ab0a5abd 100644 --- a/packages/cli/src/commands/studio.ts +++ b/packages/cli/src/commands/studio.ts @@ -1,4 +1,5 @@ import { ObjectQL } from '@objectql/core'; +import { ObjectLoader, createDriverFromConnection } from '@objectql/platform-node'; import { createNodeHandler, createStudioHandler, createMetadataHandler } from '@objectql/server'; import { createServer } from 'http'; import * as path from 'path'; diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 9a42280e..02fcab7f 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -9,6 +9,7 @@ { "path": "../types" }, { "path": "../core" }, { "path": "../server" }, - { "path": "../driver-knex" } + { "path": "../platform-node" }, + { "path": "../driver-sql" } ] } diff --git a/packages/core/package.json b/packages/core/package.json index 5a19add3..e30403bc 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -9,9 +9,7 @@ }, "dependencies": { "@objectql/types": "workspace:*", - "@objectql/driver-remote": "workspace:*", - "fast-glob": "^3.3.2", - "js-yaml": "^4.1.1" + "@objectql/sdk": "workspace:*" }, "devDependencies": { "typescript": "^5.3.0" diff --git a/packages/core/src/app.ts b/packages/core/src/app.ts index 988468ed..46e1ec0f 100644 --- a/packages/core/src/app.ts +++ b/packages/core/src/app.ts @@ -14,21 +14,16 @@ import { ActionContext, LoaderPlugin } from '@objectql/types'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as yaml from 'js-yaml'; -import { ObjectLoader } from './loader'; import { ObjectRepository } from './repository'; -import { loadPlugin } from './plugin'; -import { createDriverFromConnection } from './driver'; -import { loadRemoteFromUrl } from './remote'; +// import { createDriverFromConnection } from './driver'; // REMOVE THIS + +// import { loadRemoteFromUrl } from './remote'; import { executeActionHelper, registerActionHelper, ActionEntry } from './action'; import { registerHookHelper, triggerHookHelper, HookEntry } from './hook'; import { registerObjectHelper, getConfigsHelper } from './object'; export class ObjectQL implements IObjectQL { public metadata: MetadataRegistry; - private loader: ObjectLoader; private datasources: Record = {}; private remotes: string[] = []; private hooks: Record = {}; @@ -41,30 +36,24 @@ export class ObjectQL implements IObjectQL { constructor(config: ObjectQLConfig) { this.config = config; this.metadata = config.registry || new MetadataRegistry(); - this.loader = new ObjectLoader(this.metadata); this.datasources = config.datasources || {}; - this.remotes = config.remotes || []; + // this.remotes = config.remotes || []; if (config.connection) { - this.datasources['default'] = createDriverFromConnection(config.connection); + throw new Error("Connection strings are not supported in core directly. Use @objectql/platform-node's createDriverFromConnection or pass a driver instance to 'datasources'."); } // Initialize Plugin List (but don't setup yet) if (config.plugins) { for (const plugin of config.plugins) { if (typeof plugin === 'string') { - this.use(loadPlugin(plugin)); + throw new Error("String plugins are not supported in core. Use @objectql/platform-node or pass plugin instance."); } else { this.use(plugin); } } } } - - addPackage(name: string) { - this.loader.loadPackage(name); - } - use(plugin: ObjectQLPlugin) { this.pluginsList.push(plugin); } @@ -101,58 +90,6 @@ export class ObjectQL implements IObjectQL { return await executeActionHelper(this.metadata, this.actions, objectName, actionName, ctx); } - loadFromDirectory(dir: string, packageName?: string) { - this.loader.load(dir, packageName); - } - - addLoader(plugin: LoaderPlugin) { - this.loader.use(plugin); - } - - async updateMetadata(type: string, id: string, content: any): Promise { - // Use registry to find the entry so we can get the file path - const entry = this.metadata.getEntry(type, id); - if (!entry) { - throw new Error(`Metadata ${type}:${id} not found`); - } - - if (!entry.path) { - throw new Error('Cannot update: Metadata source file not found (in-memory only?)'); - } - - // Safety Check: Prevent writing to node_modules - if (entry.path.includes('node_modules')) { - throw new Error(`Cannot update metadata ${type}:${id}: File is inside node_modules (read-only package).`); - } - - // Check file extension - const ext = path.extname(entry.path).toLowerCase(); - let newContent = ''; - - if (ext === '.yml' || ext === '.yaml') { - newContent = yaml.dump(content); - } else if (ext === '.json') { - newContent = JSON.stringify(content, null, 2); - } else { - throw new Error(`Cannot update: Unsupported file format ${ext} (only .yml, .yaml, .json supported)`); - } - - // Write file - try { - await fs.promises.chmod(entry.path, 0o666).catch(() => {}); // Try to ensure writable - await fs.promises.writeFile(entry.path, newContent, 'utf8'); - } catch (e: any) { - throw new Error(`Failed to write file ${entry.path}: ${e.message}`); - } - - // Update registry in-memory - entry.content = content; - - // If it's an object update, we might need some re-processing? - // For now, assume a restart or reload is needed for deep schema changes, - // but simple property updates are reflected immediately in registry. - } - createContext(options: ObjectQLContextOptions): ObjectQLContext { const ctx: ObjectQLContext = { userId: options.userId, @@ -249,26 +186,9 @@ export class ObjectQL implements IObjectQL { await plugin.setup(app); } - // 1. Load Presets/Packages (Base Layer) - AFTER plugins, so they can use new loaders - if (this.config.packages) { - for (const name of this.config.packages) { - this.addPackage(name); - } - } - if (this.config.presets) { - for (const name of this.config.presets) { - this.addPackage(name); - } - } - - // 2. Load Local Sources (Application Layer) - if (this.config.source) { - const sources = Array.isArray(this.config.source) ? this.config.source : [this.config.source]; - for (const src of sources) { - this.loader.load(src); - } - } - + // Packages, Presets, Source, Objects loading logic removed from Core. + // Use @objectql/platform-node's ObjectLoader or platform-specific loaders. + // 3. Load In-Memory Objects (Dynamic Layer) if (this.config.objects) { for (const [key, obj] of Object.entries(this.config.objects)) { @@ -276,23 +196,9 @@ export class ObjectQL implements IObjectQL { } } - // 4. Load Remotes - if (this.remotes.length > 0) { - console.log(`Loading ${this.remotes.length} remotes...`); - const results = await Promise.all(this.remotes.map(url => loadRemoteFromUrl(url))); - for (const res of results) { - if (res) { - this.datasources[res.driverName] = res.driver; - for (const obj of res.objects) { - this.registerObject(obj); - } - } - } - } - const objects = this.metadata.list('object'); - // 5. Init Drivers (e.g. Sync Schema) + // 5. Init Datasources // Let's pass all objects to all configured drivers. for (const [name, driver] of Object.entries(this.datasources)) { if (driver.init) { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 3d88167d..c93f9b3c 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,10 +1,10 @@ -export * from './loader'; export * from './repository'; export * from './app'; -export * from './plugin'; -export * from './driver'; -export * from './remote'; + export * from './action'; export * from './hook'; export * from './object'; export * from './validator'; +export * from './util'; + +export * from './util'; diff --git a/packages/core/src/remote.ts b/packages/core/src/remote.ts deleted file mode 100644 index d4c14480..00000000 --- a/packages/core/src/remote.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { RemoteDriver } from '@objectql/driver-remote'; -import { ObjectConfig } from '@objectql/types'; - -export interface RemoteLoadResult { - driverName: string; - driver: RemoteDriver; - objects: ObjectConfig[]; -} - -export async function loadRemoteFromUrl(url: string): Promise { - try { - const baseUrl = url.replace(/\/$/, ''); - const metadataUrl = `${baseUrl}/api/metadata/objects`; - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - Fetch is available in Node 18+ - const res = await fetch(metadataUrl); - if (!res.ok) { - console.warn(`[ObjectQL] Remote ${url} returned ${res.status}`); - return null; - } - - const data = await res.json() as any; - if (!data || !data.objects) return null; - - const driverName = `remote:${baseUrl}`; - const driver = new RemoteDriver(baseUrl); - const objects: ObjectConfig[] = []; - - await Promise.all(data.objects.map(async (summary: any) => { - try { - // @ts-ignore - const detailRes = await fetch(`${metadataUrl}/${summary.name}`); - if (detailRes.ok) { - const config = await detailRes.json() as ObjectConfig; - config.datasource = driverName; - objects.push(config); - } - } catch (e) { - console.warn(`[ObjectQL] Failed to load object ${summary.name} from ${url}`); - } - })); - - return { driverName, driver, objects }; - - } catch (e: any) { - console.warn(`[ObjectQL] Remote connection error ${url}: ${e.message}`); - return null; - } -} diff --git a/packages/core/test/remote.test.ts b/packages/core/test/remote.test.ts deleted file mode 100644 index be31b8cc..00000000 --- a/packages/core/test/remote.test.ts +++ /dev/null @@ -1,119 +0,0 @@ - -import { ObjectQL } from '../src'; -import { ObjectConfig } from '@objectql/types'; - -describe('ObjectQL Remote Federation', () => { - let originalFetch: any; - - beforeAll(() => { - originalFetch = global.fetch; - }); - - afterAll(() => { - global.fetch = originalFetch; - }); - - it('should load remote objects and proxy queries', async () => { - // 1. Mock Fetch - const mockFetch = jest.fn(); - global.fetch = mockFetch; - - const remoteUrl = 'http://remote-service:3000'; - - // Mock Responses - mockFetch.mockImplementation(async (url: string, options: any) => { - // A. Metadata List - if (url === `${remoteUrl}/api/metadata/objects`) { - return { - ok: true, - json: async () => ({ - objects: [ - { name: 'remote_user', label: 'Remote User' } - ] - }) - }; - } - - // B. Object Detail - if (url === `${remoteUrl}/api/metadata/objects/remote_user`) { - return { - ok: true, - json: async () => ({ - name: 'remote_user', - fields: { - name: { type: 'text' }, - email: { type: 'text' } - } - } as ObjectConfig) - }; - } - - // C. Data Query (find) - if (url === `${remoteUrl}/api/objectql`) { - const body = JSON.parse(options.body); - if (body.op === 'find' && body.object === 'remote_user') { - return { - ok: true, - json: async () => ({ - data: [ - { id: 1, name: 'Alice', email: 'alice@example.com' } - ] - }) - }; - } - } - - return { ok: false, status: 404 }; - }); - - // 2. Init ObjectQL with remotes - const app = new ObjectQL({ - remotes: [remoteUrl] - }); - - await app.init(); - - // 3. Verify Schema is loaded - const config = app.getObject('remote_user'); - expect(config).toBeDefined(); - expect(config?.datasource).toBe(`remote:${remoteUrl}`); - - // 4. Verify Query is proxied - // Note: 'object()' is on Context, not App. We need to create a context first. - const ctx = app.createContext({}); - const users = await ctx.object('remote_user').find(); - - expect(users).toHaveLength(1); - expect(users[0].name).toBe('Alice'); - - // Verify fetch was called correctly - expect(mockFetch).toHaveBeenCalledTimes(3); - // 1. api/metadata/objects -> List - // 2. api/metadata/objects/remote_user -> Detail - // 3. api/objectql -> Query - }); - - it('should handle remote errors gracefully', async () => { - const mockFetch = jest.fn(); - global.fetch = mockFetch; - const remoteUrl = 'http://broken-service:3000'; - - // Mock Failure - mockFetch.mockResolvedValue({ - ok: false, - status: 500, - statusText: 'Internal Server Error' - }); - - const app = new ObjectQL({ - remotes: [remoteUrl] - }); - - // Should not throw, just log warning (which we can spy on if we want, but preventing crash is key) - await expect(app.init()).resolves.not.toThrow(); - - // Object shouldn't exist - const config = app.getObject('remote_user'); - expect(config).toBeUndefined(); - }); -}); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 515efad6..b50e081d 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -7,6 +7,6 @@ "include": ["src/**/*"], "references": [ { "path": "../types" }, - { "path": "../driver-remote" } + { "path": "../sdk" } ] } diff --git a/packages/driver-knex/CHANGELOG.md b/packages/driver-sql/CHANGELOG.md similarity index 100% rename from packages/driver-knex/CHANGELOG.md rename to packages/driver-sql/CHANGELOG.md diff --git a/packages/driver-knex/README.md b/packages/driver-sql/README.md similarity index 100% rename from packages/driver-knex/README.md rename to packages/driver-sql/README.md diff --git a/packages/driver-knex/jest.config.js b/packages/driver-sql/jest.config.js similarity index 100% rename from packages/driver-knex/jest.config.js rename to packages/driver-sql/jest.config.js diff --git a/packages/driver-knex/package.json b/packages/driver-sql/package.json similarity index 88% rename from packages/driver-knex/package.json rename to packages/driver-sql/package.json index a35c948d..fd67a164 100644 --- a/packages/driver-knex/package.json +++ b/packages/driver-sql/package.json @@ -1,5 +1,5 @@ { - "name": "@objectql/driver-knex", + "name": "@objectql/driver-sql", "version": "1.5.0", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/driver-knex/src/index.ts b/packages/driver-sql/src/index.ts similarity index 100% rename from packages/driver-knex/src/index.ts rename to packages/driver-sql/src/index.ts diff --git a/packages/driver-knex/test/index.test.ts b/packages/driver-sql/test/index.test.ts similarity index 100% rename from packages/driver-knex/test/index.test.ts rename to packages/driver-sql/test/index.test.ts diff --git a/packages/driver-knex/test/schema.test.ts b/packages/driver-sql/test/schema.test.ts similarity index 100% rename from packages/driver-knex/test/schema.test.ts rename to packages/driver-sql/test/schema.test.ts diff --git a/packages/driver-knex/tsconfig.json b/packages/driver-sql/tsconfig.json similarity index 100% rename from packages/driver-knex/tsconfig.json rename to packages/driver-sql/tsconfig.json diff --git a/packages/platform-node/jest.config.js b/packages/platform-node/jest.config.js new file mode 100644 index 00000000..0bf5d35a --- /dev/null +++ b/packages/platform-node/jest.config.js @@ -0,0 +1,13 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/test/**/*.test.ts'], + moduleNameMapper: { + '^@objectql/(.*)$': '/../$1/src', + }, + transform: { + '^.+\\.ts$': ['ts-jest', { + isolatedModules: true, + }], + }, +}; diff --git a/packages/platform-node/package.json b/packages/platform-node/package.json new file mode 100644 index 00000000..7144b8fc --- /dev/null +++ b/packages/platform-node/package.json @@ -0,0 +1,19 @@ +{ + "name": "@objectql/platform-node", + "version": "1.5.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc", + "test": "jest" + }, + "dependencies": { + "@objectql/types": "workspace:*", + "@objectql/core": "workspace:*", + "fast-glob": "^3.3.2", + "js-yaml": "^4.1.1" + }, + "devDependencies": { + "typescript": "^5.3.0" + } +} diff --git a/packages/core/src/driver.ts b/packages/platform-node/src/driver.ts similarity index 92% rename from packages/core/src/driver.ts rename to packages/platform-node/src/driver.ts index 58936af0..c64db674 100644 --- a/packages/core/src/driver.ts +++ b/packages/platform-node/src/driver.ts @@ -11,7 +11,7 @@ export function createDriverFromConnection(connection: string): Driver { driverConfig = { url: connection }; } else if (connection.startsWith('sqlite://')) { - driverPackage = '@objectql/driver-knex'; + driverPackage = '@objectql/driver-sql'; driverClass = 'KnexDriver'; const filename = connection.replace('sqlite://', ''); driverConfig = { @@ -21,7 +21,7 @@ export function createDriverFromConnection(connection: string): Driver { }; } else if (connection.startsWith('postgres://') || connection.startsWith('postgresql://')) { - driverPackage = '@objectql/driver-knex'; + driverPackage = '@objectql/driver-sql'; driverClass = 'KnexDriver'; driverConfig = { client: 'pg', @@ -29,7 +29,7 @@ export function createDriverFromConnection(connection: string): Driver { }; } else if (connection.startsWith('mysql://')) { - driverPackage = '@objectql/driver-knex'; + driverPackage = '@objectql/driver-sql'; driverClass = 'KnexDriver'; driverConfig = { client: 'mysql2', diff --git a/packages/platform-node/src/index.ts b/packages/platform-node/src/index.ts new file mode 100644 index 00000000..95a94fc6 --- /dev/null +++ b/packages/platform-node/src/index.ts @@ -0,0 +1,3 @@ +export * from './loader'; +export * from './plugin'; +export * from './driver'; diff --git a/packages/core/src/loader.ts b/packages/platform-node/src/loader.ts similarity index 99% rename from packages/core/src/loader.ts rename to packages/platform-node/src/loader.ts index 82dbbabb..e2131b0b 100644 --- a/packages/core/src/loader.ts +++ b/packages/platform-node/src/loader.ts @@ -3,7 +3,7 @@ import * as glob from 'fast-glob'; import * as path from 'path'; import { MetadataRegistry, ObjectConfig, LoaderPlugin, LoaderHandlerContext, FieldConfig } from '@objectql/types'; import * as yaml from 'js-yaml'; -import { toTitleCase } from './util'; +import { toTitleCase } from '@objectql/core'; export class ObjectLoader { private plugins: LoaderPlugin[] = []; diff --git a/packages/core/src/plugin.ts b/packages/platform-node/src/plugin.ts similarity index 100% rename from packages/core/src/plugin.ts rename to packages/platform-node/src/plugin.ts diff --git a/packages/core/test/dynamic.test.ts b/packages/platform-node/test/dynamic.test.ts similarity index 58% rename from packages/core/test/dynamic.test.ts rename to packages/platform-node/test/dynamic.test.ts index 02331c47..71b8516c 100644 --- a/packages/core/test/dynamic.test.ts +++ b/packages/platform-node/test/dynamic.test.ts @@ -1,34 +1,33 @@ -import { ObjectQL } from '../src/index'; +import { ObjectQL } from '@objectql/core'; +import { ObjectLoader } from '../src'; import * as path from 'path'; describe('Dynamic Package Loading', () => { let objectql: ObjectQL; + let loader: ObjectLoader; beforeEach(() => { objectql = new ObjectQL({ datasources: {} }); + loader = new ObjectLoader(objectql.metadata); }); test('should load directory manually', () => { const fixtureDir = path.join(__dirname, 'fixtures'); - objectql.loadFromDirectory(fixtureDir, 'test-pkg'); + loader.load(fixtureDir, 'test-pkg'); expect(objectql.getObject('project')).toBeDefined(); - // Since 'test-pkg' is passed, it should be tracked - // but packageObjects is private, so we test behavior by removal }); test('should remove package objects', () => { const fixtureDir = path.join(__dirname, 'fixtures'); - objectql.loadFromDirectory(fixtureDir, 'test-pkg'); + loader.load(fixtureDir, 'test-pkg'); expect(objectql.getObject('project')).toBeDefined(); - + objectql.removePackage('test-pkg'); + expect(objectql.getObject('project')).toBeUndefined(); }); - - // Mocking require for loadFromPackage is harder in jest without creating a real node module. - // relying on loadFromDirectory with packageName argument is sufficient to test the tracking logic. }); diff --git a/packages/core/test/fixtures/project-with-validation.object.yml b/packages/platform-node/test/fixtures/project-with-validation.object.yml similarity index 100% rename from packages/core/test/fixtures/project-with-validation.object.yml rename to packages/platform-node/test/fixtures/project-with-validation.object.yml diff --git a/packages/core/test/fixtures/project.action.js b/packages/platform-node/test/fixtures/project.action.js similarity index 100% rename from packages/core/test/fixtures/project.action.js rename to packages/platform-node/test/fixtures/project.action.js diff --git a/packages/core/test/fixtures/project.object.yml b/packages/platform-node/test/fixtures/project.object.yml similarity index 100% rename from packages/core/test/fixtures/project.object.yml rename to packages/platform-node/test/fixtures/project.object.yml diff --git a/packages/core/test/fixtures/test_dashboard.page.yml b/packages/platform-node/test/fixtures/test_dashboard.page.yml similarity index 100% rename from packages/core/test/fixtures/test_dashboard.page.yml rename to packages/platform-node/test/fixtures/test_dashboard.page.yml diff --git a/packages/core/test/fixtures/test_page.page.yml b/packages/platform-node/test/fixtures/test_page.page.yml similarity index 100% rename from packages/core/test/fixtures/test_page.page.yml rename to packages/platform-node/test/fixtures/test_page.page.yml diff --git a/packages/core/test/fixtures/test_responsive.page.yml b/packages/platform-node/test/fixtures/test_responsive.page.yml similarity index 100% rename from packages/core/test/fixtures/test_responsive.page.yml rename to packages/platform-node/test/fixtures/test_responsive.page.yml diff --git a/packages/core/test/fixtures/test_sections.page.yml b/packages/platform-node/test/fixtures/test_sections.page.yml similarity index 100% rename from packages/core/test/fixtures/test_sections.page.yml rename to packages/platform-node/test/fixtures/test_sections.page.yml diff --git a/packages/core/test/loader.test.ts b/packages/platform-node/test/loader.test.ts similarity index 100% rename from packages/core/test/loader.test.ts rename to packages/platform-node/test/loader.test.ts diff --git a/packages/core/test/metadata.test.ts b/packages/platform-node/test/metadata.test.ts similarity index 97% rename from packages/core/test/metadata.test.ts rename to packages/platform-node/test/metadata.test.ts index 997ec371..653b22eb 100644 --- a/packages/core/test/metadata.test.ts +++ b/packages/platform-node/test/metadata.test.ts @@ -1,4 +1,4 @@ -import { ObjectQL } from '../src/index'; +import { ObjectQL } from '@objectql/core'; import { ObjectConfig } from '@objectql/types'; import * as fs from 'fs'; import * as path from 'path'; diff --git a/packages/core/test/page.test.ts b/packages/platform-node/test/page.test.ts similarity index 100% rename from packages/core/test/page.test.ts rename to packages/platform-node/test/page.test.ts diff --git a/packages/core/test/validation.test.ts b/packages/platform-node/test/validation.test.ts similarity index 99% rename from packages/core/test/validation.test.ts rename to packages/platform-node/test/validation.test.ts index 9fcb7ecb..96a48306 100644 --- a/packages/core/test/validation.test.ts +++ b/packages/platform-node/test/validation.test.ts @@ -1,4 +1,4 @@ -import { Validator } from '../src/validator'; +import { Validator } from '@objectql/core'; import { ValidationContext, AnyValidationRule, diff --git a/packages/platform-node/tsconfig.json b/packages/platform-node/tsconfig.json new file mode 100644 index 00000000..5d3cf0cb --- /dev/null +++ b/packages/platform-node/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*"], + "references": [ + { "path": "../types" }, + { "path": "../core" }, + { "path": "../driver-sql" }, + { "path": "../driver-mongo" } + ] +} diff --git a/packages/driver-remote/CHANGELOG.md b/packages/sdk/CHANGELOG.md similarity index 100% rename from packages/driver-remote/CHANGELOG.md rename to packages/sdk/CHANGELOG.md diff --git a/packages/driver-remote/package.json b/packages/sdk/package.json similarity index 88% rename from packages/driver-remote/package.json rename to packages/sdk/package.json index 0f6b471b..ff9067a5 100644 --- a/packages/driver-remote/package.json +++ b/packages/sdk/package.json @@ -1,5 +1,5 @@ { - "name": "@objectql/driver-remote", + "name": "@objectql/sdk", "version": "1.5.0", "description": "Remote/HTTP Driver for ObjectQL", "main": "dist/index.js", diff --git a/packages/driver-remote/src/index.ts b/packages/sdk/src/index.ts similarity index 100% rename from packages/driver-remote/src/index.ts rename to packages/sdk/src/index.ts diff --git a/packages/driver-remote/tsconfig.json b/packages/sdk/tsconfig.json similarity index 100% rename from packages/driver-remote/tsconfig.json rename to packages/sdk/tsconfig.json diff --git a/packages/server/src/metadata.ts b/packages/server/src/metadata.ts index ae8d4e17..030838c6 100644 --- a/packages/server/src/metadata.ts +++ b/packages/server/src/metadata.ts @@ -138,8 +138,9 @@ export function createMetadataHandler(app: IObjectQL) { const body = await readBody(req); try { - await app.updateMetadata(type, id, body); - return sendJson({ success: true }); + // await app.updateMetadata(type, id, body); + // return sendJson({ success: true }); + return sendError(ErrorCode.INTERNAL_ERROR, 'Metadata updates via API are temporarily disabled in this architectural version.', 501); } catch (e: any) { const isUserError = e.message.startsWith('Cannot update') || e.message.includes('not found'); return sendError( diff --git a/packages/types/src/app.ts b/packages/types/src/app.ts index 844da1d8..dec989ea 100644 --- a/packages/types/src/app.ts +++ b/packages/types/src/app.ts @@ -10,18 +10,10 @@ export interface IObjectQL { getConfigs(): Record; datasource(name: string): Driver; init(): Promise; - addPackage(name: string): void; removePackage(name: string): void; metadata: MetadataRegistry; registerObject(object: ObjectConfig): void; - loadFromDirectory(dir: string): void; - addLoader(plugin: LoaderPlugin): void; - /** - * Updates and persists metadata content. - * Only works if the metadata was loaded from a writable file source (e.g. local disk). - */ - updateMetadata(type: string, id: string, content: any): Promise; on(event: HookName, objectName: string, handler: HookHandler): void; triggerHook(event: HookName, objectName: string, ctx: HookContext): Promise; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1117e0d3..8d5156da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,9 +61,12 @@ importers: '@objectql/core': specifier: workspace:* version: link:../../../packages/core - '@objectql/driver-knex': + '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-knex + version: link:../../../packages/driver-sql + '@objectql/platform-node': + specifier: workspace:* + version: link:../../../packages/platform-node '@objectql/types': specifier: workspace:* version: link:../../../packages/types @@ -79,9 +82,12 @@ importers: '@objectql/core': specifier: workspace:* version: link:../../../packages/core - '@objectql/driver-knex': + '@objectql/driver-sql': + specifier: workspace:* + version: link:../../../packages/driver-sql + '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/driver-knex + version: link:../../../packages/platform-node '@objectql/types': specifier: workspace:* version: link:../../../packages/types @@ -104,9 +110,12 @@ importers: '@objectql/core': specifier: workspace:* version: link:../../../packages/core - '@objectql/driver-knex': + '@objectql/driver-sql': + specifier: workspace:* + version: link:../../../packages/driver-sql + '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/driver-knex + version: link:../../../packages/platform-node '@objectql/types': specifier: workspace:* version: link:../../../packages/types @@ -137,9 +146,12 @@ importers: '@objectql/core': specifier: workspace:* version: link:../../../packages/core - '@objectql/driver-knex': + '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-knex + version: link:../../../packages/driver-sql + '@objectql/platform-node': + specifier: workspace:* + version: link:../../../packages/platform-node '@objectql/server': specifier: workspace:* version: link:../../../packages/server @@ -165,9 +177,12 @@ importers: '@objectql/core': specifier: workspace:* version: link:../core - '@objectql/driver-knex': + '@objectql/driver-sql': + specifier: workspace:* + version: link:../driver-sql + '@objectql/platform-node': specifier: workspace:* - version: link:../driver-knex + version: link:../platform-node '@objectql/server': specifier: workspace:* version: link:../server @@ -208,24 +223,27 @@ importers: packages/core: dependencies: - '@objectql/driver-remote': + '@objectql/sdk': specifier: workspace:* - version: link:../driver-remote + version: link:../sdk '@objectql/types': specifier: workspace:* version: link:../types - fast-glob: - specifier: ^3.3.2 - version: 3.3.3 - js-yaml: - specifier: ^4.1.1 - version: 4.1.1 devDependencies: typescript: specifier: ^5.3.0 version: 5.9.3 - packages/driver-knex: + packages/driver-mongo: + dependencies: + '@objectql/types': + specifier: workspace:* + version: link:../types + mongodb: + specifier: ^5.9.2 + version: 5.9.2 + + packages/driver-sql: dependencies: '@objectql/types': specifier: workspace:* @@ -238,16 +256,26 @@ importers: specifier: ^5.1.7 version: 5.1.7 - packages/driver-mongo: + packages/platform-node: dependencies: + '@objectql/core': + specifier: workspace:* + version: link:../core '@objectql/types': specifier: workspace:* version: link:../types - mongodb: - specifier: ^5.9.2 - version: 5.9.2 + fast-glob: + specifier: ^3.3.2 + version: 3.3.3 + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 + devDependencies: + typescript: + specifier: ^5.3.0 + version: 5.9.3 - packages/driver-remote: + packages/sdk: dependencies: '@objectql/types': specifier: workspace:* diff --git a/tsconfig.json b/tsconfig.json index aea2e09f..932e00e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,9 +3,9 @@ "references": [ { "path": "./packages/types" }, { "path": "./packages/core" }, - { "path": "./packages/driver-mongo" }, - { "path": "./packages/driver-knex" }, - { "path": "./packages/driver-remote" }, + { "path": "./packages/driver-sql" }, + { "path": "./packages/sdk" }, + { "path": "./packages/platform-node" }, { "path": "./packages/server" }, { "path": "./packages/cli" } ] From d4e53249eb68faa12c74fb552b6ac56532a40681 Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:55:19 +0800 Subject: [PATCH 14/15] feat: add UI components and metadata handling for the studio - Implemented Card component and its subcomponents (CardHeader, CardTitle, CardDescription, CardContent, CardFooter) for consistent UI layout. - Created useMetadata hook to fetch and manage metadata objects from the API. - Developed Dashboard page to display total collections and individual metadata objects using Card components. - Introduced MetadataBrowser page for browsing and viewing detailed metadata information. - Built ObjectView page for displaying object data in a grid format with server-side fetching capabilities. - Added SchemaEditor page for editing schema files with file selection functionality. - Configured Tailwind CSS for styling and responsive design. - Set up Vite for development and build processes, including API proxying. - Established TypeScript configuration for type safety and module resolution. --- .../scenarios/preset-usage/objectql.config.ts | 2 +- examples/scenarios/preset-usage/package.json | 2 +- examples/starters/basic-script/package.json | 2 +- examples/starters/express-api/package.json | 2 +- packages/cli/tsconfig.json | 15 -- .../mongo}/CHANGELOG.md | 0 .../{driver-mongo => drivers/mongo}/README.md | 0 .../mongo}/jest.config.js | 3 +- .../mongo}/package.json | 0 .../mongo}/src/index.ts | 0 .../mongo}/test/index.test.ts | 0 .../mongo}/tsconfig.json | 4 +- packages/{ => drivers}/sdk/CHANGELOG.md | 0 packages/{ => drivers}/sdk/package.json | 0 packages/{ => drivers}/sdk/src/index.ts | 0 packages/{ => drivers}/sdk/tsconfig.json | 4 +- .../{driver-sql => drivers/sql}/CHANGELOG.md | 0 .../{driver-sql => drivers/sql}/README.md | 0 .../sql}/jest.config.js | 3 +- .../{driver-sql => drivers/sql}/package.json | 0 .../{driver-sql => drivers/sql}/src/index.ts | 0 .../sql}/test/index.test.ts | 0 .../sql}/test/schema.test.ts | 0 .../{driver-sql => drivers/sql}/tsconfig.json | 4 +- packages/{ => foundation}/core/CHANGELOG.md | 0 packages/{ => foundation}/core/README.md | 0 packages/{ => foundation}/core/jest.config.js | 0 packages/{ => foundation}/core/package.json | 3 +- packages/{ => foundation}/core/src/action.ts | 0 packages/{ => foundation}/core/src/app.ts | 0 packages/{ => foundation}/core/src/hook.ts | 0 packages/{ => foundation}/core/src/index.ts | 0 packages/{ => foundation}/core/src/object.ts | 0 .../{ => foundation}/core/src/repository.ts | 0 packages/{ => foundation}/core/src/util.ts | 0 .../{ => foundation}/core/src/validator.ts | 0 .../{ => foundation}/core/test/action.test.ts | 0 .../{ => foundation}/core/test/hook.test.ts | 0 .../{ => foundation}/core/test/mock-driver.ts | 0 .../core/test/repository.test.ts | 0 packages/{ => foundation}/core/test/utils.ts | 0 packages/{ => foundation}/core/tsconfig.json | 5 +- .../platform-node}/jest.config.js | 0 .../platform-node/package.json | 0 .../platform-node/src/driver.ts | 0 .../platform-node/src/index.ts | 0 .../platform-node/src/loader.ts | 0 .../platform-node/src/plugin.ts | 0 .../platform-node/test/dynamic.test.ts | 0 .../project-with-validation.object.yml | 0 .../test/fixtures/project.action.js | 0 .../test/fixtures/project.object.yml | 0 .../test/fixtures/test_dashboard.page.yml | 0 .../test/fixtures/test_page.page.yml | 0 .../test/fixtures/test_responsive.page.yml | 0 .../test/fixtures/test_sections.page.yml | 0 .../platform-node/test/loader.test.ts | 0 .../platform-node/test/metadata.test.ts | 0 .../platform-node/test/page.test.ts | 0 .../platform-node/test/validation.test.ts | 0 .../platform-node/tsconfig.json | 6 +- packages/{ => foundation}/types/CHANGELOG.md | 0 packages/{ => foundation}/types/README.md | 0 .../{ => foundation}/types/jest.config.js | 0 packages/{ => foundation}/types/package.json | 0 packages/{ => foundation}/types/src/action.ts | 0 packages/{ => foundation}/types/src/app.ts | 0 .../{ => foundation}/types/src/application.ts | 0 packages/{ => foundation}/types/src/config.ts | 0 .../{ => foundation}/types/src/context.ts | 0 packages/{ => foundation}/types/src/driver.ts | 0 packages/{ => foundation}/types/src/field.ts | 0 packages/{ => foundation}/types/src/hook.ts | 0 packages/{ => foundation}/types/src/index.ts | 0 packages/{ => foundation}/types/src/loader.ts | 0 packages/{ => foundation}/types/src/menu.ts | 0 packages/{ => foundation}/types/src/object.ts | 0 packages/{ => foundation}/types/src/page.ts | 0 .../{ => foundation}/types/src/permission.ts | 0 packages/{ => foundation}/types/src/plugin.ts | 0 packages/{ => foundation}/types/src/query.ts | 0 .../{ => foundation}/types/src/registry.ts | 0 .../{ => foundation}/types/src/repository.ts | 0 .../{ => foundation}/types/src/validation.ts | 0 packages/{ => foundation}/types/tsconfig.json | 2 +- packages/{ => runtime}/server/CHANGELOG.md | 0 packages/{ => runtime}/server/README.md | 0 packages/runtime/server/jest.config.js | 11 + packages/{ => runtime}/server/package.json | 0 .../{ => runtime}/server/src/adapters/node.ts | 0 .../{ => runtime}/server/src/adapters/rest.ts | 0 packages/{ => runtime}/server/src/index.ts | 0 packages/{ => runtime}/server/src/metadata.ts | 0 packages/{ => runtime}/server/src/openapi.ts | 0 packages/{ => runtime}/server/src/server.ts | 0 packages/{ => runtime}/server/src/studio.ts | 0 packages/{ => runtime}/server/src/types.ts | 0 .../{ => runtime}/server/test/node.test.ts | 0 .../{ => runtime}/server/test/rest.test.ts | 0 packages/{ => runtime}/server/tsconfig.json | 6 +- packages/server/jest.config.js | 8 - packages/{ => tools}/cli/CHANGELOG.md | 0 packages/{ => tools}/cli/README.md | 0 packages/{ => tools}/cli/bin/objectql | 0 packages/{ => tools}/cli/package.json | 0 .../{ => tools}/cli/src/commands/generate.ts | 0 packages/{ => tools}/cli/src/commands/repl.ts | 0 .../{ => tools}/cli/src/commands/serve.ts | 0 .../{ => tools}/cli/src/commands/studio.ts | 0 packages/{ => tools}/cli/src/index.ts | 0 packages/tools/cli/tsconfig.json | 15 ++ packages/{ => tools}/studio/CHANGELOG.md | 0 packages/{ => tools}/studio/README.md | 0 packages/{ => tools}/studio/index.html | 0 packages/{ => tools}/studio/package.json | 0 .../{ => tools}/studio/postcss.config.cjs | 0 packages/{ => tools}/studio/src/App.css | 0 packages/{ => tools}/studio/src/App.tsx | 0 .../studio/src/components/DataGrid.tsx | 0 .../studio/src/components/FileEditor.tsx | 0 .../studio/src/components/ObjectList.tsx | 0 .../studio/src/components/RecordDetail.tsx | 0 .../studio/src/components/SchemaInspector.tsx | 0 .../studio/src/components/Sidebar.tsx | 0 .../studio/src/components/ui/button.tsx | 0 .../studio/src/components/ui/card.tsx | 0 .../studio/src/hooks/use-metadata.ts | 0 packages/{ => tools}/studio/src/index.css | 0 packages/{ => tools}/studio/src/lib/utils.ts | 0 packages/{ => tools}/studio/src/main.tsx | 0 .../studio/src/pages/Dashboard.tsx | 0 .../studio/src/pages/MetadataBrowser.tsx | 0 .../studio/src/pages/ObjectView.tsx | 0 .../studio/src/pages/SchemaEditor.tsx | 0 .../{ => tools}/studio/tailwind.config.cjs | 0 packages/{ => tools}/studio/tsconfig.json | 2 +- packages/{ => tools}/studio/vite.config.ts | 0 pnpm-lock.yaml | 193 +++++++++--------- pnpm-workspace.yaml | 5 +- tsconfig.json | 21 +- 140 files changed, 164 insertions(+), 154 deletions(-) delete mode 100644 packages/cli/tsconfig.json rename packages/{driver-mongo => drivers/mongo}/CHANGELOG.md (100%) rename packages/{driver-mongo => drivers/mongo}/README.md (100%) rename packages/{platform-node => drivers/mongo}/jest.config.js (63%) rename packages/{driver-mongo => drivers/mongo}/package.json (100%) rename packages/{driver-mongo => drivers/mongo}/src/index.ts (100%) rename packages/{driver-mongo => drivers/mongo}/test/index.test.ts (100%) rename packages/{driver-mongo => drivers/mongo}/tsconfig.json (51%) rename packages/{ => drivers}/sdk/CHANGELOG.md (100%) rename packages/{ => drivers}/sdk/package.json (100%) rename packages/{ => drivers}/sdk/src/index.ts (100%) rename packages/{ => drivers}/sdk/tsconfig.json (53%) rename packages/{driver-sql => drivers/sql}/CHANGELOG.md (100%) rename packages/{driver-sql => drivers/sql}/README.md (100%) rename packages/{driver-sql => drivers/sql}/jest.config.js (63%) rename packages/{driver-sql => drivers/sql}/package.json (100%) rename packages/{driver-sql => drivers/sql}/src/index.ts (100%) rename packages/{driver-sql => drivers/sql}/test/index.test.ts (100%) rename packages/{driver-sql => drivers/sql}/test/schema.test.ts (100%) rename packages/{driver-sql => drivers/sql}/tsconfig.json (51%) rename packages/{ => foundation}/core/CHANGELOG.md (100%) rename packages/{ => foundation}/core/README.md (100%) rename packages/{ => foundation}/core/jest.config.js (100%) rename packages/{ => foundation}/core/package.json (77%) rename packages/{ => foundation}/core/src/action.ts (100%) rename packages/{ => foundation}/core/src/app.ts (100%) rename packages/{ => foundation}/core/src/hook.ts (100%) rename packages/{ => foundation}/core/src/index.ts (100%) rename packages/{ => foundation}/core/src/object.ts (100%) rename packages/{ => foundation}/core/src/repository.ts (100%) rename packages/{ => foundation}/core/src/util.ts (100%) rename packages/{ => foundation}/core/src/validator.ts (100%) rename packages/{ => foundation}/core/test/action.test.ts (100%) rename packages/{ => foundation}/core/test/hook.test.ts (100%) rename packages/{ => foundation}/core/test/mock-driver.ts (100%) rename packages/{ => foundation}/core/test/repository.test.ts (100%) rename packages/{ => foundation}/core/test/utils.ts (100%) rename packages/{ => foundation}/core/tsconfig.json (56%) rename packages/{driver-mongo => foundation/platform-node}/jest.config.js (100%) rename packages/{ => foundation}/platform-node/package.json (100%) rename packages/{ => foundation}/platform-node/src/driver.ts (100%) rename packages/{ => foundation}/platform-node/src/index.ts (100%) rename packages/{ => foundation}/platform-node/src/loader.ts (100%) rename packages/{ => foundation}/platform-node/src/plugin.ts (100%) rename packages/{ => foundation}/platform-node/test/dynamic.test.ts (100%) rename packages/{ => foundation}/platform-node/test/fixtures/project-with-validation.object.yml (100%) rename packages/{ => foundation}/platform-node/test/fixtures/project.action.js (100%) rename packages/{ => foundation}/platform-node/test/fixtures/project.object.yml (100%) rename packages/{ => foundation}/platform-node/test/fixtures/test_dashboard.page.yml (100%) rename packages/{ => foundation}/platform-node/test/fixtures/test_page.page.yml (100%) rename packages/{ => foundation}/platform-node/test/fixtures/test_responsive.page.yml (100%) rename packages/{ => foundation}/platform-node/test/fixtures/test_sections.page.yml (100%) rename packages/{ => foundation}/platform-node/test/loader.test.ts (100%) rename packages/{ => foundation}/platform-node/test/metadata.test.ts (100%) rename packages/{ => foundation}/platform-node/test/page.test.ts (100%) rename packages/{ => foundation}/platform-node/test/validation.test.ts (100%) rename packages/{ => foundation}/platform-node/tsconfig.json (60%) rename packages/{ => foundation}/types/CHANGELOG.md (100%) rename packages/{ => foundation}/types/README.md (100%) rename packages/{ => foundation}/types/jest.config.js (100%) rename packages/{ => foundation}/types/package.json (100%) rename packages/{ => foundation}/types/src/action.ts (100%) rename packages/{ => foundation}/types/src/app.ts (100%) rename packages/{ => foundation}/types/src/application.ts (100%) rename packages/{ => foundation}/types/src/config.ts (100%) rename packages/{ => foundation}/types/src/context.ts (100%) rename packages/{ => foundation}/types/src/driver.ts (100%) rename packages/{ => foundation}/types/src/field.ts (100%) rename packages/{ => foundation}/types/src/hook.ts (100%) rename packages/{ => foundation}/types/src/index.ts (100%) rename packages/{ => foundation}/types/src/loader.ts (100%) rename packages/{ => foundation}/types/src/menu.ts (100%) rename packages/{ => foundation}/types/src/object.ts (100%) rename packages/{ => foundation}/types/src/page.ts (100%) rename packages/{ => foundation}/types/src/permission.ts (100%) rename packages/{ => foundation}/types/src/plugin.ts (100%) rename packages/{ => foundation}/types/src/query.ts (100%) rename packages/{ => foundation}/types/src/registry.ts (100%) rename packages/{ => foundation}/types/src/repository.ts (100%) rename packages/{ => foundation}/types/src/validation.ts (100%) rename packages/{ => foundation}/types/tsconfig.json (73%) rename packages/{ => runtime}/server/CHANGELOG.md (100%) rename packages/{ => runtime}/server/README.md (100%) create mode 100644 packages/runtime/server/jest.config.js rename packages/{ => runtime}/server/package.json (100%) rename packages/{ => runtime}/server/src/adapters/node.ts (100%) rename packages/{ => runtime}/server/src/adapters/rest.ts (100%) rename packages/{ => runtime}/server/src/index.ts (100%) rename packages/{ => runtime}/server/src/metadata.ts (100%) rename packages/{ => runtime}/server/src/openapi.ts (100%) rename packages/{ => runtime}/server/src/server.ts (100%) rename packages/{ => runtime}/server/src/studio.ts (100%) rename packages/{ => runtime}/server/src/types.ts (100%) rename packages/{ => runtime}/server/test/node.test.ts (100%) rename packages/{ => runtime}/server/test/rest.test.ts (100%) rename packages/{ => runtime}/server/tsconfig.json (53%) delete mode 100644 packages/server/jest.config.js rename packages/{ => tools}/cli/CHANGELOG.md (100%) rename packages/{ => tools}/cli/README.md (100%) rename packages/{ => tools}/cli/bin/objectql (100%) rename packages/{ => tools}/cli/package.json (100%) rename packages/{ => tools}/cli/src/commands/generate.ts (100%) rename packages/{ => tools}/cli/src/commands/repl.ts (100%) rename packages/{ => tools}/cli/src/commands/serve.ts (100%) rename packages/{ => tools}/cli/src/commands/studio.ts (100%) rename packages/{ => tools}/cli/src/index.ts (100%) create mode 100644 packages/tools/cli/tsconfig.json rename packages/{ => tools}/studio/CHANGELOG.md (100%) rename packages/{ => tools}/studio/README.md (100%) rename packages/{ => tools}/studio/index.html (100%) rename packages/{ => tools}/studio/package.json (100%) rename packages/{ => tools}/studio/postcss.config.cjs (100%) rename packages/{ => tools}/studio/src/App.css (100%) rename packages/{ => tools}/studio/src/App.tsx (100%) rename packages/{ => tools}/studio/src/components/DataGrid.tsx (100%) rename packages/{ => tools}/studio/src/components/FileEditor.tsx (100%) rename packages/{ => tools}/studio/src/components/ObjectList.tsx (100%) rename packages/{ => tools}/studio/src/components/RecordDetail.tsx (100%) rename packages/{ => tools}/studio/src/components/SchemaInspector.tsx (100%) rename packages/{ => tools}/studio/src/components/Sidebar.tsx (100%) rename packages/{ => tools}/studio/src/components/ui/button.tsx (100%) rename packages/{ => tools}/studio/src/components/ui/card.tsx (100%) rename packages/{ => tools}/studio/src/hooks/use-metadata.ts (100%) rename packages/{ => tools}/studio/src/index.css (100%) rename packages/{ => tools}/studio/src/lib/utils.ts (100%) rename packages/{ => tools}/studio/src/main.tsx (100%) rename packages/{ => tools}/studio/src/pages/Dashboard.tsx (100%) rename packages/{ => tools}/studio/src/pages/MetadataBrowser.tsx (100%) rename packages/{ => tools}/studio/src/pages/ObjectView.tsx (100%) rename packages/{ => tools}/studio/src/pages/SchemaEditor.tsx (100%) rename packages/{ => tools}/studio/tailwind.config.cjs (100%) rename packages/{ => tools}/studio/tsconfig.json (92%) rename packages/{ => tools}/studio/vite.config.ts (100%) diff --git a/examples/scenarios/preset-usage/objectql.config.ts b/examples/scenarios/preset-usage/objectql.config.ts index 77334f9f..82da821d 100644 --- a/examples/scenarios/preset-usage/objectql.config.ts +++ b/examples/scenarios/preset-usage/objectql.config.ts @@ -8,7 +8,7 @@ const db = new ObjectQL({ default: createDriverFromConnection(`sqlite://${path.join(__dirname, 'preset.sqlite3')}`) }, // Load the project-management capabilities as a preset - presets: ['@example/basic-script'], + presets: ['@objectql/starter-basic-script'], plugins: ['@example/audit-log'] }); diff --git a/examples/scenarios/preset-usage/package.json b/examples/scenarios/preset-usage/package.json index d0afcced..0a5737e1 100644 --- a/examples/scenarios/preset-usage/package.json +++ b/examples/scenarios/preset-usage/package.json @@ -16,7 +16,7 @@ "repl": "objectql repl" }, "dependencies": { - "@example/basic-script": "workspace:*", + "@objectql/starter-basic-script": "workspace:*", "@example/audit-log": "workspace:*" }, "devDependencies": { diff --git a/examples/starters/basic-script/package.json b/examples/starters/basic-script/package.json index 6b43c667..688fca5d 100644 --- a/examples/starters/basic-script/package.json +++ b/examples/starters/basic-script/package.json @@ -1,5 +1,5 @@ { - "name": "@example/basic-script", + "name": "@objectql/starter-basic-script", "version": "6.0.0", "license": "MIT", "author": "ObjectQL Contributors", diff --git a/examples/starters/express-api/package.json b/examples/starters/express-api/package.json index 84fdabc7..e408b83e 100644 --- a/examples/starters/express-api/package.json +++ b/examples/starters/express-api/package.json @@ -1,5 +1,5 @@ { - "name": "@example/express-api", + "name": "@objectql/starter-express-api", "version": "1.1.4", "license": "MIT", "author": "ObjectQL Contributors", diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json deleted file mode 100644 index 02fcab7f..00000000 --- a/packages/cli/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - }, - "include": ["src"], - "references": [ - { "path": "../types" }, - { "path": "../core" }, - { "path": "../server" }, - { "path": "../platform-node" }, - { "path": "../driver-sql" } - ] -} diff --git a/packages/driver-mongo/CHANGELOG.md b/packages/drivers/mongo/CHANGELOG.md similarity index 100% rename from packages/driver-mongo/CHANGELOG.md rename to packages/drivers/mongo/CHANGELOG.md diff --git a/packages/driver-mongo/README.md b/packages/drivers/mongo/README.md similarity index 100% rename from packages/driver-mongo/README.md rename to packages/drivers/mongo/README.md diff --git a/packages/platform-node/jest.config.js b/packages/drivers/mongo/jest.config.js similarity index 63% rename from packages/platform-node/jest.config.js rename to packages/drivers/mongo/jest.config.js index 0bf5d35a..c57bd361 100644 --- a/packages/platform-node/jest.config.js +++ b/packages/drivers/mongo/jest.config.js @@ -3,7 +3,8 @@ module.exports = { testEnvironment: 'node', testMatch: ['**/test/**/*.test.ts'], moduleNameMapper: { - '^@objectql/(.*)$': '/../$1/src', + '^@objectql/types$': '/../../foundation/types/src', + '^@objectql/core$': '/../../foundation/core/src', }, transform: { '^.+\\.ts$': ['ts-jest', { diff --git a/packages/driver-mongo/package.json b/packages/drivers/mongo/package.json similarity index 100% rename from packages/driver-mongo/package.json rename to packages/drivers/mongo/package.json diff --git a/packages/driver-mongo/src/index.ts b/packages/drivers/mongo/src/index.ts similarity index 100% rename from packages/driver-mongo/src/index.ts rename to packages/drivers/mongo/src/index.ts diff --git a/packages/driver-mongo/test/index.test.ts b/packages/drivers/mongo/test/index.test.ts similarity index 100% rename from packages/driver-mongo/test/index.test.ts rename to packages/drivers/mongo/test/index.test.ts diff --git a/packages/driver-mongo/tsconfig.json b/packages/drivers/mongo/tsconfig.json similarity index 51% rename from packages/driver-mongo/tsconfig.json rename to packages/drivers/mongo/tsconfig.json index fd15f521..38c971f6 100644 --- a/packages/driver-mongo/tsconfig.json +++ b/packages/drivers/mongo/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "rootDir": "./src" }, "include": ["src/**/*"], - "references": [{ "path": "../types" }] + "references": [{ "path": "../../foundation/types" }] } diff --git a/packages/sdk/CHANGELOG.md b/packages/drivers/sdk/CHANGELOG.md similarity index 100% rename from packages/sdk/CHANGELOG.md rename to packages/drivers/sdk/CHANGELOG.md diff --git a/packages/sdk/package.json b/packages/drivers/sdk/package.json similarity index 100% rename from packages/sdk/package.json rename to packages/drivers/sdk/package.json diff --git a/packages/sdk/src/index.ts b/packages/drivers/sdk/src/index.ts similarity index 100% rename from packages/sdk/src/index.ts rename to packages/drivers/sdk/src/index.ts diff --git a/packages/sdk/tsconfig.json b/packages/drivers/sdk/tsconfig.json similarity index 53% rename from packages/sdk/tsconfig.json rename to packages/drivers/sdk/tsconfig.json index 73f22e2f..60ad3d4d 100644 --- a/packages/sdk/tsconfig.json +++ b/packages/drivers/sdk/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "rootDir": "./src" }, "include": ["src/**/*"], - "references": [{ "path": "../types" }] + "references": [{ "path": "../../foundation/types" }] } diff --git a/packages/driver-sql/CHANGELOG.md b/packages/drivers/sql/CHANGELOG.md similarity index 100% rename from packages/driver-sql/CHANGELOG.md rename to packages/drivers/sql/CHANGELOG.md diff --git a/packages/driver-sql/README.md b/packages/drivers/sql/README.md similarity index 100% rename from packages/driver-sql/README.md rename to packages/drivers/sql/README.md diff --git a/packages/driver-sql/jest.config.js b/packages/drivers/sql/jest.config.js similarity index 63% rename from packages/driver-sql/jest.config.js rename to packages/drivers/sql/jest.config.js index 0bf5d35a..c57bd361 100644 --- a/packages/driver-sql/jest.config.js +++ b/packages/drivers/sql/jest.config.js @@ -3,7 +3,8 @@ module.exports = { testEnvironment: 'node', testMatch: ['**/test/**/*.test.ts'], moduleNameMapper: { - '^@objectql/(.*)$': '/../$1/src', + '^@objectql/types$': '/../../foundation/types/src', + '^@objectql/core$': '/../../foundation/core/src', }, transform: { '^.+\\.ts$': ['ts-jest', { diff --git a/packages/driver-sql/package.json b/packages/drivers/sql/package.json similarity index 100% rename from packages/driver-sql/package.json rename to packages/drivers/sql/package.json diff --git a/packages/driver-sql/src/index.ts b/packages/drivers/sql/src/index.ts similarity index 100% rename from packages/driver-sql/src/index.ts rename to packages/drivers/sql/src/index.ts diff --git a/packages/driver-sql/test/index.test.ts b/packages/drivers/sql/test/index.test.ts similarity index 100% rename from packages/driver-sql/test/index.test.ts rename to packages/drivers/sql/test/index.test.ts diff --git a/packages/driver-sql/test/schema.test.ts b/packages/drivers/sql/test/schema.test.ts similarity index 100% rename from packages/driver-sql/test/schema.test.ts rename to packages/drivers/sql/test/schema.test.ts diff --git a/packages/driver-sql/tsconfig.json b/packages/drivers/sql/tsconfig.json similarity index 51% rename from packages/driver-sql/tsconfig.json rename to packages/drivers/sql/tsconfig.json index fd15f521..38c971f6 100644 --- a/packages/driver-sql/tsconfig.json +++ b/packages/drivers/sql/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "rootDir": "./src" }, "include": ["src/**/*"], - "references": [{ "path": "../types" }] + "references": [{ "path": "../../foundation/types" }] } diff --git a/packages/core/CHANGELOG.md b/packages/foundation/core/CHANGELOG.md similarity index 100% rename from packages/core/CHANGELOG.md rename to packages/foundation/core/CHANGELOG.md diff --git a/packages/core/README.md b/packages/foundation/core/README.md similarity index 100% rename from packages/core/README.md rename to packages/foundation/core/README.md diff --git a/packages/core/jest.config.js b/packages/foundation/core/jest.config.js similarity index 100% rename from packages/core/jest.config.js rename to packages/foundation/core/jest.config.js diff --git a/packages/core/package.json b/packages/foundation/core/package.json similarity index 77% rename from packages/core/package.json rename to packages/foundation/core/package.json index e30403bc..995713e5 100644 --- a/packages/core/package.json +++ b/packages/foundation/core/package.json @@ -8,8 +8,7 @@ "test": "jest" }, "dependencies": { - "@objectql/types": "workspace:*", - "@objectql/sdk": "workspace:*" + "@objectql/types": "workspace:*" }, "devDependencies": { "typescript": "^5.3.0" diff --git a/packages/core/src/action.ts b/packages/foundation/core/src/action.ts similarity index 100% rename from packages/core/src/action.ts rename to packages/foundation/core/src/action.ts diff --git a/packages/core/src/app.ts b/packages/foundation/core/src/app.ts similarity index 100% rename from packages/core/src/app.ts rename to packages/foundation/core/src/app.ts diff --git a/packages/core/src/hook.ts b/packages/foundation/core/src/hook.ts similarity index 100% rename from packages/core/src/hook.ts rename to packages/foundation/core/src/hook.ts diff --git a/packages/core/src/index.ts b/packages/foundation/core/src/index.ts similarity index 100% rename from packages/core/src/index.ts rename to packages/foundation/core/src/index.ts diff --git a/packages/core/src/object.ts b/packages/foundation/core/src/object.ts similarity index 100% rename from packages/core/src/object.ts rename to packages/foundation/core/src/object.ts diff --git a/packages/core/src/repository.ts b/packages/foundation/core/src/repository.ts similarity index 100% rename from packages/core/src/repository.ts rename to packages/foundation/core/src/repository.ts diff --git a/packages/core/src/util.ts b/packages/foundation/core/src/util.ts similarity index 100% rename from packages/core/src/util.ts rename to packages/foundation/core/src/util.ts diff --git a/packages/core/src/validator.ts b/packages/foundation/core/src/validator.ts similarity index 100% rename from packages/core/src/validator.ts rename to packages/foundation/core/src/validator.ts diff --git a/packages/core/test/action.test.ts b/packages/foundation/core/test/action.test.ts similarity index 100% rename from packages/core/test/action.test.ts rename to packages/foundation/core/test/action.test.ts diff --git a/packages/core/test/hook.test.ts b/packages/foundation/core/test/hook.test.ts similarity index 100% rename from packages/core/test/hook.test.ts rename to packages/foundation/core/test/hook.test.ts diff --git a/packages/core/test/mock-driver.ts b/packages/foundation/core/test/mock-driver.ts similarity index 100% rename from packages/core/test/mock-driver.ts rename to packages/foundation/core/test/mock-driver.ts diff --git a/packages/core/test/repository.test.ts b/packages/foundation/core/test/repository.test.ts similarity index 100% rename from packages/core/test/repository.test.ts rename to packages/foundation/core/test/repository.test.ts diff --git a/packages/core/test/utils.ts b/packages/foundation/core/test/utils.ts similarity index 100% rename from packages/core/test/utils.ts rename to packages/foundation/core/test/utils.ts diff --git a/packages/core/tsconfig.json b/packages/foundation/core/tsconfig.json similarity index 56% rename from packages/core/tsconfig.json rename to packages/foundation/core/tsconfig.json index b50e081d..2a75d35f 100644 --- a/packages/core/tsconfig.json +++ b/packages/foundation/core/tsconfig.json @@ -1,12 +1,11 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" }, "include": ["src/**/*"], "references": [ - { "path": "../types" }, - { "path": "../sdk" } + { "path": "../types" } ] } diff --git a/packages/driver-mongo/jest.config.js b/packages/foundation/platform-node/jest.config.js similarity index 100% rename from packages/driver-mongo/jest.config.js rename to packages/foundation/platform-node/jest.config.js diff --git a/packages/platform-node/package.json b/packages/foundation/platform-node/package.json similarity index 100% rename from packages/platform-node/package.json rename to packages/foundation/platform-node/package.json diff --git a/packages/platform-node/src/driver.ts b/packages/foundation/platform-node/src/driver.ts similarity index 100% rename from packages/platform-node/src/driver.ts rename to packages/foundation/platform-node/src/driver.ts diff --git a/packages/platform-node/src/index.ts b/packages/foundation/platform-node/src/index.ts similarity index 100% rename from packages/platform-node/src/index.ts rename to packages/foundation/platform-node/src/index.ts diff --git a/packages/platform-node/src/loader.ts b/packages/foundation/platform-node/src/loader.ts similarity index 100% rename from packages/platform-node/src/loader.ts rename to packages/foundation/platform-node/src/loader.ts diff --git a/packages/platform-node/src/plugin.ts b/packages/foundation/platform-node/src/plugin.ts similarity index 100% rename from packages/platform-node/src/plugin.ts rename to packages/foundation/platform-node/src/plugin.ts diff --git a/packages/platform-node/test/dynamic.test.ts b/packages/foundation/platform-node/test/dynamic.test.ts similarity index 100% rename from packages/platform-node/test/dynamic.test.ts rename to packages/foundation/platform-node/test/dynamic.test.ts diff --git a/packages/platform-node/test/fixtures/project-with-validation.object.yml b/packages/foundation/platform-node/test/fixtures/project-with-validation.object.yml similarity index 100% rename from packages/platform-node/test/fixtures/project-with-validation.object.yml rename to packages/foundation/platform-node/test/fixtures/project-with-validation.object.yml diff --git a/packages/platform-node/test/fixtures/project.action.js b/packages/foundation/platform-node/test/fixtures/project.action.js similarity index 100% rename from packages/platform-node/test/fixtures/project.action.js rename to packages/foundation/platform-node/test/fixtures/project.action.js diff --git a/packages/platform-node/test/fixtures/project.object.yml b/packages/foundation/platform-node/test/fixtures/project.object.yml similarity index 100% rename from packages/platform-node/test/fixtures/project.object.yml rename to packages/foundation/platform-node/test/fixtures/project.object.yml diff --git a/packages/platform-node/test/fixtures/test_dashboard.page.yml b/packages/foundation/platform-node/test/fixtures/test_dashboard.page.yml similarity index 100% rename from packages/platform-node/test/fixtures/test_dashboard.page.yml rename to packages/foundation/platform-node/test/fixtures/test_dashboard.page.yml diff --git a/packages/platform-node/test/fixtures/test_page.page.yml b/packages/foundation/platform-node/test/fixtures/test_page.page.yml similarity index 100% rename from packages/platform-node/test/fixtures/test_page.page.yml rename to packages/foundation/platform-node/test/fixtures/test_page.page.yml diff --git a/packages/platform-node/test/fixtures/test_responsive.page.yml b/packages/foundation/platform-node/test/fixtures/test_responsive.page.yml similarity index 100% rename from packages/platform-node/test/fixtures/test_responsive.page.yml rename to packages/foundation/platform-node/test/fixtures/test_responsive.page.yml diff --git a/packages/platform-node/test/fixtures/test_sections.page.yml b/packages/foundation/platform-node/test/fixtures/test_sections.page.yml similarity index 100% rename from packages/platform-node/test/fixtures/test_sections.page.yml rename to packages/foundation/platform-node/test/fixtures/test_sections.page.yml diff --git a/packages/platform-node/test/loader.test.ts b/packages/foundation/platform-node/test/loader.test.ts similarity index 100% rename from packages/platform-node/test/loader.test.ts rename to packages/foundation/platform-node/test/loader.test.ts diff --git a/packages/platform-node/test/metadata.test.ts b/packages/foundation/platform-node/test/metadata.test.ts similarity index 100% rename from packages/platform-node/test/metadata.test.ts rename to packages/foundation/platform-node/test/metadata.test.ts diff --git a/packages/platform-node/test/page.test.ts b/packages/foundation/platform-node/test/page.test.ts similarity index 100% rename from packages/platform-node/test/page.test.ts rename to packages/foundation/platform-node/test/page.test.ts diff --git a/packages/platform-node/test/validation.test.ts b/packages/foundation/platform-node/test/validation.test.ts similarity index 100% rename from packages/platform-node/test/validation.test.ts rename to packages/foundation/platform-node/test/validation.test.ts diff --git a/packages/platform-node/tsconfig.json b/packages/foundation/platform-node/tsconfig.json similarity index 60% rename from packages/platform-node/tsconfig.json rename to packages/foundation/platform-node/tsconfig.json index 5d3cf0cb..01ee6951 100644 --- a/packages/platform-node/tsconfig.json +++ b/packages/foundation/platform-node/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", "rootDir": "src" @@ -8,7 +8,7 @@ "references": [ { "path": "../types" }, { "path": "../core" }, - { "path": "../driver-sql" }, - { "path": "../driver-mongo" } + { "path": "../../drivers/sql" }, + { "path": "../../drivers/mongo" } ] } diff --git a/packages/types/CHANGELOG.md b/packages/foundation/types/CHANGELOG.md similarity index 100% rename from packages/types/CHANGELOG.md rename to packages/foundation/types/CHANGELOG.md diff --git a/packages/types/README.md b/packages/foundation/types/README.md similarity index 100% rename from packages/types/README.md rename to packages/foundation/types/README.md diff --git a/packages/types/jest.config.js b/packages/foundation/types/jest.config.js similarity index 100% rename from packages/types/jest.config.js rename to packages/foundation/types/jest.config.js diff --git a/packages/types/package.json b/packages/foundation/types/package.json similarity index 100% rename from packages/types/package.json rename to packages/foundation/types/package.json diff --git a/packages/types/src/action.ts b/packages/foundation/types/src/action.ts similarity index 100% rename from packages/types/src/action.ts rename to packages/foundation/types/src/action.ts diff --git a/packages/types/src/app.ts b/packages/foundation/types/src/app.ts similarity index 100% rename from packages/types/src/app.ts rename to packages/foundation/types/src/app.ts diff --git a/packages/types/src/application.ts b/packages/foundation/types/src/application.ts similarity index 100% rename from packages/types/src/application.ts rename to packages/foundation/types/src/application.ts diff --git a/packages/types/src/config.ts b/packages/foundation/types/src/config.ts similarity index 100% rename from packages/types/src/config.ts rename to packages/foundation/types/src/config.ts diff --git a/packages/types/src/context.ts b/packages/foundation/types/src/context.ts similarity index 100% rename from packages/types/src/context.ts rename to packages/foundation/types/src/context.ts diff --git a/packages/types/src/driver.ts b/packages/foundation/types/src/driver.ts similarity index 100% rename from packages/types/src/driver.ts rename to packages/foundation/types/src/driver.ts diff --git a/packages/types/src/field.ts b/packages/foundation/types/src/field.ts similarity index 100% rename from packages/types/src/field.ts rename to packages/foundation/types/src/field.ts diff --git a/packages/types/src/hook.ts b/packages/foundation/types/src/hook.ts similarity index 100% rename from packages/types/src/hook.ts rename to packages/foundation/types/src/hook.ts diff --git a/packages/types/src/index.ts b/packages/foundation/types/src/index.ts similarity index 100% rename from packages/types/src/index.ts rename to packages/foundation/types/src/index.ts diff --git a/packages/types/src/loader.ts b/packages/foundation/types/src/loader.ts similarity index 100% rename from packages/types/src/loader.ts rename to packages/foundation/types/src/loader.ts diff --git a/packages/types/src/menu.ts b/packages/foundation/types/src/menu.ts similarity index 100% rename from packages/types/src/menu.ts rename to packages/foundation/types/src/menu.ts diff --git a/packages/types/src/object.ts b/packages/foundation/types/src/object.ts similarity index 100% rename from packages/types/src/object.ts rename to packages/foundation/types/src/object.ts diff --git a/packages/types/src/page.ts b/packages/foundation/types/src/page.ts similarity index 100% rename from packages/types/src/page.ts rename to packages/foundation/types/src/page.ts diff --git a/packages/types/src/permission.ts b/packages/foundation/types/src/permission.ts similarity index 100% rename from packages/types/src/permission.ts rename to packages/foundation/types/src/permission.ts diff --git a/packages/types/src/plugin.ts b/packages/foundation/types/src/plugin.ts similarity index 100% rename from packages/types/src/plugin.ts rename to packages/foundation/types/src/plugin.ts diff --git a/packages/types/src/query.ts b/packages/foundation/types/src/query.ts similarity index 100% rename from packages/types/src/query.ts rename to packages/foundation/types/src/query.ts diff --git a/packages/types/src/registry.ts b/packages/foundation/types/src/registry.ts similarity index 100% rename from packages/types/src/registry.ts rename to packages/foundation/types/src/registry.ts diff --git a/packages/types/src/repository.ts b/packages/foundation/types/src/repository.ts similarity index 100% rename from packages/types/src/repository.ts rename to packages/foundation/types/src/repository.ts diff --git a/packages/types/src/validation.ts b/packages/foundation/types/src/validation.ts similarity index 100% rename from packages/types/src/validation.ts rename to packages/foundation/types/src/validation.ts diff --git a/packages/types/tsconfig.json b/packages/foundation/types/tsconfig.json similarity index 73% rename from packages/types/tsconfig.json rename to packages/foundation/types/tsconfig.json index 76e65dcf..5caba7d1 100644 --- a/packages/types/tsconfig.json +++ b/packages/foundation/types/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "rootDir": "./src" diff --git a/packages/server/CHANGELOG.md b/packages/runtime/server/CHANGELOG.md similarity index 100% rename from packages/server/CHANGELOG.md rename to packages/runtime/server/CHANGELOG.md diff --git a/packages/server/README.md b/packages/runtime/server/README.md similarity index 100% rename from packages/server/README.md rename to packages/runtime/server/README.md diff --git a/packages/runtime/server/jest.config.js b/packages/runtime/server/jest.config.js new file mode 100644 index 00000000..e0abf1df --- /dev/null +++ b/packages/runtime/server/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/*.test.ts'], + moduleNameMapper: { + '^@objectql/types$': '/../../foundation/types/src', + '^@objectql/core$': '/../../foundation/core/src', + '^@objectql/driver-sql$': '/../../drivers/sql/src', + '^@objectql/driver-mongo$': '/../../drivers/mongo/src' + } +}; diff --git a/packages/server/package.json b/packages/runtime/server/package.json similarity index 100% rename from packages/server/package.json rename to packages/runtime/server/package.json diff --git a/packages/server/src/adapters/node.ts b/packages/runtime/server/src/adapters/node.ts similarity index 100% rename from packages/server/src/adapters/node.ts rename to packages/runtime/server/src/adapters/node.ts diff --git a/packages/server/src/adapters/rest.ts b/packages/runtime/server/src/adapters/rest.ts similarity index 100% rename from packages/server/src/adapters/rest.ts rename to packages/runtime/server/src/adapters/rest.ts diff --git a/packages/server/src/index.ts b/packages/runtime/server/src/index.ts similarity index 100% rename from packages/server/src/index.ts rename to packages/runtime/server/src/index.ts diff --git a/packages/server/src/metadata.ts b/packages/runtime/server/src/metadata.ts similarity index 100% rename from packages/server/src/metadata.ts rename to packages/runtime/server/src/metadata.ts diff --git a/packages/server/src/openapi.ts b/packages/runtime/server/src/openapi.ts similarity index 100% rename from packages/server/src/openapi.ts rename to packages/runtime/server/src/openapi.ts diff --git a/packages/server/src/server.ts b/packages/runtime/server/src/server.ts similarity index 100% rename from packages/server/src/server.ts rename to packages/runtime/server/src/server.ts diff --git a/packages/server/src/studio.ts b/packages/runtime/server/src/studio.ts similarity index 100% rename from packages/server/src/studio.ts rename to packages/runtime/server/src/studio.ts diff --git a/packages/server/src/types.ts b/packages/runtime/server/src/types.ts similarity index 100% rename from packages/server/src/types.ts rename to packages/runtime/server/src/types.ts diff --git a/packages/server/test/node.test.ts b/packages/runtime/server/test/node.test.ts similarity index 100% rename from packages/server/test/node.test.ts rename to packages/runtime/server/test/node.test.ts diff --git a/packages/server/test/rest.test.ts b/packages/runtime/server/test/rest.test.ts similarity index 100% rename from packages/server/test/rest.test.ts rename to packages/runtime/server/test/rest.test.ts diff --git a/packages/server/tsconfig.json b/packages/runtime/server/tsconfig.json similarity index 53% rename from packages/server/tsconfig.json rename to packages/runtime/server/tsconfig.json index 4a6ae5fc..86704a90 100644 --- a/packages/server/tsconfig.json +++ b/packages/runtime/server/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "dist", "rootDir": "src", @@ -7,7 +7,7 @@ }, "include": ["src/**/*"], "references": [ - { "path": "../types" }, - { "path": "../core" } + { "path": "../../foundation/types" }, + { "path": "../../foundation/core" } ] } diff --git a/packages/server/jest.config.js b/packages/server/jest.config.js deleted file mode 100644 index 04db4171..00000000 --- a/packages/server/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - testMatch: ['**/*.test.ts'], - moduleNameMapper: { - '^@objectql/(.*)$': '/../$1/src' - } -}; diff --git a/packages/cli/CHANGELOG.md b/packages/tools/cli/CHANGELOG.md similarity index 100% rename from packages/cli/CHANGELOG.md rename to packages/tools/cli/CHANGELOG.md diff --git a/packages/cli/README.md b/packages/tools/cli/README.md similarity index 100% rename from packages/cli/README.md rename to packages/tools/cli/README.md diff --git a/packages/cli/bin/objectql b/packages/tools/cli/bin/objectql similarity index 100% rename from packages/cli/bin/objectql rename to packages/tools/cli/bin/objectql diff --git a/packages/cli/package.json b/packages/tools/cli/package.json similarity index 100% rename from packages/cli/package.json rename to packages/tools/cli/package.json diff --git a/packages/cli/src/commands/generate.ts b/packages/tools/cli/src/commands/generate.ts similarity index 100% rename from packages/cli/src/commands/generate.ts rename to packages/tools/cli/src/commands/generate.ts diff --git a/packages/cli/src/commands/repl.ts b/packages/tools/cli/src/commands/repl.ts similarity index 100% rename from packages/cli/src/commands/repl.ts rename to packages/tools/cli/src/commands/repl.ts diff --git a/packages/cli/src/commands/serve.ts b/packages/tools/cli/src/commands/serve.ts similarity index 100% rename from packages/cli/src/commands/serve.ts rename to packages/tools/cli/src/commands/serve.ts diff --git a/packages/cli/src/commands/studio.ts b/packages/tools/cli/src/commands/studio.ts similarity index 100% rename from packages/cli/src/commands/studio.ts rename to packages/tools/cli/src/commands/studio.ts diff --git a/packages/cli/src/index.ts b/packages/tools/cli/src/index.ts similarity index 100% rename from packages/cli/src/index.ts rename to packages/tools/cli/src/index.ts diff --git a/packages/tools/cli/tsconfig.json b/packages/tools/cli/tsconfig.json new file mode 100644 index 00000000..a5ff5513 --- /dev/null +++ b/packages/tools/cli/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src"], + "references": [ + { "path": "../../foundation/types" }, + { "path": "../../foundation/core" }, + { "path": "../../runtime/server" }, + { "path": "../../foundation/platform-node" }, + { "path": "../../drivers/sql" } + ] +} diff --git a/packages/studio/CHANGELOG.md b/packages/tools/studio/CHANGELOG.md similarity index 100% rename from packages/studio/CHANGELOG.md rename to packages/tools/studio/CHANGELOG.md diff --git a/packages/studio/README.md b/packages/tools/studio/README.md similarity index 100% rename from packages/studio/README.md rename to packages/tools/studio/README.md diff --git a/packages/studio/index.html b/packages/tools/studio/index.html similarity index 100% rename from packages/studio/index.html rename to packages/tools/studio/index.html diff --git a/packages/studio/package.json b/packages/tools/studio/package.json similarity index 100% rename from packages/studio/package.json rename to packages/tools/studio/package.json diff --git a/packages/studio/postcss.config.cjs b/packages/tools/studio/postcss.config.cjs similarity index 100% rename from packages/studio/postcss.config.cjs rename to packages/tools/studio/postcss.config.cjs diff --git a/packages/studio/src/App.css b/packages/tools/studio/src/App.css similarity index 100% rename from packages/studio/src/App.css rename to packages/tools/studio/src/App.css diff --git a/packages/studio/src/App.tsx b/packages/tools/studio/src/App.tsx similarity index 100% rename from packages/studio/src/App.tsx rename to packages/tools/studio/src/App.tsx diff --git a/packages/studio/src/components/DataGrid.tsx b/packages/tools/studio/src/components/DataGrid.tsx similarity index 100% rename from packages/studio/src/components/DataGrid.tsx rename to packages/tools/studio/src/components/DataGrid.tsx diff --git a/packages/studio/src/components/FileEditor.tsx b/packages/tools/studio/src/components/FileEditor.tsx similarity index 100% rename from packages/studio/src/components/FileEditor.tsx rename to packages/tools/studio/src/components/FileEditor.tsx diff --git a/packages/studio/src/components/ObjectList.tsx b/packages/tools/studio/src/components/ObjectList.tsx similarity index 100% rename from packages/studio/src/components/ObjectList.tsx rename to packages/tools/studio/src/components/ObjectList.tsx diff --git a/packages/studio/src/components/RecordDetail.tsx b/packages/tools/studio/src/components/RecordDetail.tsx similarity index 100% rename from packages/studio/src/components/RecordDetail.tsx rename to packages/tools/studio/src/components/RecordDetail.tsx diff --git a/packages/studio/src/components/SchemaInspector.tsx b/packages/tools/studio/src/components/SchemaInspector.tsx similarity index 100% rename from packages/studio/src/components/SchemaInspector.tsx rename to packages/tools/studio/src/components/SchemaInspector.tsx diff --git a/packages/studio/src/components/Sidebar.tsx b/packages/tools/studio/src/components/Sidebar.tsx similarity index 100% rename from packages/studio/src/components/Sidebar.tsx rename to packages/tools/studio/src/components/Sidebar.tsx diff --git a/packages/studio/src/components/ui/button.tsx b/packages/tools/studio/src/components/ui/button.tsx similarity index 100% rename from packages/studio/src/components/ui/button.tsx rename to packages/tools/studio/src/components/ui/button.tsx diff --git a/packages/studio/src/components/ui/card.tsx b/packages/tools/studio/src/components/ui/card.tsx similarity index 100% rename from packages/studio/src/components/ui/card.tsx rename to packages/tools/studio/src/components/ui/card.tsx diff --git a/packages/studio/src/hooks/use-metadata.ts b/packages/tools/studio/src/hooks/use-metadata.ts similarity index 100% rename from packages/studio/src/hooks/use-metadata.ts rename to packages/tools/studio/src/hooks/use-metadata.ts diff --git a/packages/studio/src/index.css b/packages/tools/studio/src/index.css similarity index 100% rename from packages/studio/src/index.css rename to packages/tools/studio/src/index.css diff --git a/packages/studio/src/lib/utils.ts b/packages/tools/studio/src/lib/utils.ts similarity index 100% rename from packages/studio/src/lib/utils.ts rename to packages/tools/studio/src/lib/utils.ts diff --git a/packages/studio/src/main.tsx b/packages/tools/studio/src/main.tsx similarity index 100% rename from packages/studio/src/main.tsx rename to packages/tools/studio/src/main.tsx diff --git a/packages/studio/src/pages/Dashboard.tsx b/packages/tools/studio/src/pages/Dashboard.tsx similarity index 100% rename from packages/studio/src/pages/Dashboard.tsx rename to packages/tools/studio/src/pages/Dashboard.tsx diff --git a/packages/studio/src/pages/MetadataBrowser.tsx b/packages/tools/studio/src/pages/MetadataBrowser.tsx similarity index 100% rename from packages/studio/src/pages/MetadataBrowser.tsx rename to packages/tools/studio/src/pages/MetadataBrowser.tsx diff --git a/packages/studio/src/pages/ObjectView.tsx b/packages/tools/studio/src/pages/ObjectView.tsx similarity index 100% rename from packages/studio/src/pages/ObjectView.tsx rename to packages/tools/studio/src/pages/ObjectView.tsx diff --git a/packages/studio/src/pages/SchemaEditor.tsx b/packages/tools/studio/src/pages/SchemaEditor.tsx similarity index 100% rename from packages/studio/src/pages/SchemaEditor.tsx rename to packages/tools/studio/src/pages/SchemaEditor.tsx diff --git a/packages/studio/tailwind.config.cjs b/packages/tools/studio/tailwind.config.cjs similarity index 100% rename from packages/studio/tailwind.config.cjs rename to packages/tools/studio/tailwind.config.cjs diff --git a/packages/studio/tsconfig.json b/packages/tools/studio/tsconfig.json similarity index 92% rename from packages/studio/tsconfig.json rename to packages/tools/studio/tsconfig.json index 811b99ec..841ca8af 100644 --- a/packages/studio/tsconfig.json +++ b/packages/tools/studio/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, diff --git a/packages/studio/vite.config.ts b/packages/tools/studio/vite.config.ts similarity index 100% rename from packages/studio/vite.config.ts rename to packages/tools/studio/vite.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d5156da..06c947db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,19 +57,19 @@ importers: devDependencies: '@objectql/cli': specifier: workspace:* - version: link:../../../packages/cli + version: link:../../../packages/tools/cli '@objectql/core': specifier: workspace:* - version: link:../../../packages/core + version: link:../../../packages/foundation/core '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-sql + version: link:../../../packages/drivers/sql '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/platform-node + version: link:../../../packages/foundation/platform-node '@objectql/types': specifier: workspace:* - version: link:../../../packages/types + version: link:../../../packages/foundation/types typescript: specifier: ^5.3.0 version: 5.9.3 @@ -78,19 +78,19 @@ importers: devDependencies: '@objectql/cli': specifier: workspace:* - version: link:../../../packages/cli + version: link:../../../packages/tools/cli '@objectql/core': specifier: workspace:* - version: link:../../../packages/core + version: link:../../../packages/foundation/core '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-sql + version: link:../../../packages/drivers/sql '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/platform-node + version: link:../../../packages/foundation/platform-node '@objectql/types': specifier: workspace:* - version: link:../../../packages/types + version: link:../../../packages/foundation/types typescript: specifier: ^5.3.0 version: 5.9.3 @@ -100,25 +100,25 @@ importers: '@example/audit-log': specifier: workspace:* version: link:../../plugins/audit-log - '@example/basic-script': + '@objectql/starter-basic-script': specifier: workspace:* version: link:../../starters/basic-script devDependencies: '@objectql/cli': specifier: workspace:* - version: link:../../../packages/cli + version: link:../../../packages/tools/cli '@objectql/core': specifier: workspace:* - version: link:../../../packages/core + version: link:../../../packages/foundation/core '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-sql + version: link:../../../packages/drivers/sql '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/platform-node + version: link:../../../packages/foundation/platform-node '@objectql/types': specifier: workspace:* - version: link:../../../packages/types + version: link:../../../packages/foundation/types sqlite3: specifier: ^5.1.7 version: 5.1.7 @@ -130,13 +130,13 @@ importers: devDependencies: '@objectql/cli': specifier: workspace:* - version: link:../../../packages/cli + version: link:../../../packages/tools/cli '@objectql/core': specifier: workspace:* - version: link:../../../packages/core + version: link:../../../packages/foundation/core '@objectql/types': specifier: workspace:* - version: link:../../../packages/types + version: link:../../../packages/foundation/types typescript: specifier: ^5.3.0 version: 5.9.3 @@ -145,19 +145,19 @@ importers: dependencies: '@objectql/core': specifier: workspace:* - version: link:../../../packages/core + version: link:../../../packages/foundation/core '@objectql/driver-sql': specifier: workspace:* - version: link:../../../packages/driver-sql + version: link:../../../packages/drivers/sql '@objectql/platform-node': specifier: workspace:* - version: link:../../../packages/platform-node + version: link:../../../packages/foundation/platform-node '@objectql/server': specifier: workspace:* - version: link:../../../packages/server + version: link:../../../packages/runtime/server '@objectql/types': specifier: workspace:* - version: link:../../../packages/types + version: link:../../../packages/foundation/types express: specifier: ^4.18.2 version: 4.22.1 @@ -172,82 +172,30 @@ importers: specifier: ^5.0.0 version: 5.9.3 - packages/cli: + packages/drivers/mongo: dependencies: - '@objectql/core': - specifier: workspace:* - version: link:../core - '@objectql/driver-sql': - specifier: workspace:* - version: link:../driver-sql - '@objectql/platform-node': - specifier: workspace:* - version: link:../platform-node - '@objectql/server': - specifier: workspace:* - version: link:../server '@objectql/types': specifier: workspace:* - version: link:../types - chalk: - specifier: ^4.1.2 - version: 4.1.2 - commander: - specifier: ^11.0.0 - version: 11.1.0 - fast-glob: - specifier: ^3.3.0 - version: 3.3.3 - js-yaml: - specifier: ^4.1.0 - version: 4.1.1 - prettier: - specifier: ^3.0.0 - version: 3.7.4 - sqlite3: - specifier: ^5.1.7 - version: 5.1.7 - ts-node: - specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.28)(typescript@5.9.3) - devDependencies: - '@types/js-yaml': - specifier: ^4.0.5 - version: 4.0.9 - '@types/node': - specifier: ^20.0.0 - version: 20.19.28 - typescript: - specifier: ^5.0.0 - version: 5.9.3 + version: link:../../foundation/types + mongodb: + specifier: ^5.9.2 + version: 5.9.2 - packages/core: + packages/drivers/sdk: dependencies: - '@objectql/sdk': - specifier: workspace:* - version: link:../sdk '@objectql/types': specifier: workspace:* - version: link:../types + version: link:../../foundation/types devDependencies: typescript: specifier: ^5.3.0 version: 5.9.3 - packages/driver-mongo: - dependencies: - '@objectql/types': - specifier: workspace:* - version: link:../types - mongodb: - specifier: ^5.9.2 - version: 5.9.2 - - packages/driver-sql: + packages/drivers/sql: dependencies: '@objectql/types': specifier: workspace:* - version: link:../types + version: link:../../foundation/types knex: specifier: ^3.1.0 version: 3.1.0(sqlite3@5.1.7) @@ -256,7 +204,17 @@ importers: specifier: ^5.1.7 version: 5.1.7 - packages/platform-node: + packages/foundation/core: + dependencies: + '@objectql/types': + specifier: workspace:* + version: link:../types + devDependencies: + typescript: + specifier: ^5.3.0 + version: 5.9.3 + + packages/foundation/platform-node: dependencies: '@objectql/core': specifier: workspace:* @@ -275,39 +233,80 @@ importers: specifier: ^5.3.0 version: 5.9.3 - packages/sdk: + packages/foundation/types: {} + + packages/runtime/server: dependencies: + '@objectql/core': + specifier: workspace:* + version: link:../../foundation/core '@objectql/types': specifier: workspace:* - version: link:../types + version: link:../../foundation/types + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 devDependencies: + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 + '@types/node': + specifier: ^20.10.0 + version: 20.19.28 typescript: specifier: ^5.3.0 version: 5.9.3 - packages/server: + packages/tools/cli: dependencies: '@objectql/core': specifier: workspace:* - version: link:../core + version: link:../../foundation/core + '@objectql/driver-sql': + specifier: workspace:* + version: link:../../drivers/sql + '@objectql/platform-node': + specifier: workspace:* + version: link:../../foundation/platform-node + '@objectql/server': + specifier: workspace:* + version: link:../../runtime/server '@objectql/types': specifier: workspace:* - version: link:../types + version: link:../../foundation/types + chalk: + specifier: ^4.1.2 + version: 4.1.2 + commander: + specifier: ^11.0.0 + version: 11.1.0 + fast-glob: + specifier: ^3.3.0 + version: 3.3.3 js-yaml: - specifier: ^4.1.1 + specifier: ^4.1.0 version: 4.1.1 + prettier: + specifier: ^3.0.0 + version: 3.7.4 + sqlite3: + specifier: ^5.1.7 + version: 5.1.7 + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@20.19.28)(typescript@5.9.3) devDependencies: '@types/js-yaml': - specifier: ^4.0.9 + specifier: ^4.0.5 version: 4.0.9 '@types/node': - specifier: ^20.10.0 + specifier: ^20.0.0 version: 20.19.28 typescript: - specifier: ^5.3.0 + specifier: ^5.0.0 version: 5.9.3 - packages/studio: + packages/tools/studio: dependencies: ag-grid-community: specifier: ^31.0.0 @@ -368,8 +367,6 @@ importers: specifier: ^5.0.8 version: 5.4.21(@types/node@20.19.28) - packages/types: {} - packages: '@algolia/abtesting@1.12.2': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ad1d7984..6d67b9a1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,8 @@ packages: - - packages/* + - packages/foundation/* + - packages/drivers/* + - packages/runtime/* + - packages/tools/* - examples/starters/* - examples/scenarios/* - examples/plugins/* diff --git a/tsconfig.json b/tsconfig.json index 932e00e0..3896592b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,19 @@ { "files": [], "references": [ - { "path": "./packages/types" }, - { "path": "./packages/core" }, - { "path": "./packages/driver-sql" }, - { "path": "./packages/sdk" }, - { "path": "./packages/platform-node" }, - { "path": "./packages/server" }, - { "path": "./packages/cli" } + { "path": "./packages/foundation/types" }, + { "path": "./packages/foundation/core" }, + { "path": "./packages/drivers/mongo" }, + { "path": "./packages/drivers/sql" }, + { "path": "./packages/drivers/sdk" }, + { "path": "./packages/foundation/platform-node" }, + { "path": "./packages/runtime/server" }, + { "path": "./packages/tools/cli" }, + { "path": "./packages/tools/studio" }, + { "path": "./examples/starters/express-api" }, + { "path": "./examples/starters/basic-script" }, + { "path": "./examples/scenarios/enterprise-structure" }, + { "path": "./examples/plugins/audit-log" }, + { "path": "./examples/scenarios/preset-usage" } ] } From 0f63234b3c7fb6e1451ce9918e25dfe671f58beb Mon Sep 17 00:00:00 2001 From: Jack Zhuang <50353452+hotlong@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:02:15 +0800 Subject: [PATCH 15/15] feat: Add auto-generated TypeScript interfaces for various entities in the enterprise starter package - Created interfaces for Attachment, CrmAccount, CrmContact, CrmLead, CrmOpportunity, FinanceBudget, FinanceExpense, FinanceInvoice, FinancePayment, HrDepartment, HrEmployee, HrPosition, HrTimesheet, Organization, ProjectMilestone, ProjectProject, ProjectTask, ProjectTimesheetEntry, and User. - Updated index.ts to export new types. - Added TypeScript configuration files for enterprise and express-api starters. - Implemented a sample Express API with ObjectQL integration, including example data and metadata loading. - Created object definitions and views for User and Task entities in the express-api starter. --- examples/scenarios/preset-usage/package.json | 2 +- .../starters/basic}/CHANGELOG.md | 0 .../starters/basic}/HOOKS_ACTIONS_GUIDE.md | 0 .../starters/basic}/PERMISSIONS_GUIDE.md | 0 .../starters/basic}/README.md | 0 .../__tests__/projects-hooks-actions.test.ts | 0 .../starters/basic}/objectql.config.ts | 0 .../starters/basic}/package.json | 6 +- .../starters/basic}/src/README.pages.md | 0 .../starters/basic}/src/demo.app.yml | 0 .../basic}/src/i18n/zh-CN/projects.json | 0 .../starters/basic}/src/index.ts | 0 .../starters/basic}/src/main.menu.yml | 0 .../kitchen-sink/kitchen_sink.data.yml | 0 .../kitchen-sink/kitchen_sink.object.yml | 0 .../pages/create_project_wizard.page.yml | 0 .../projects/pages/project_detail.page.yml | 0 .../projects/project_approval.workflow.yml | 0 .../projects/project_status.report.yml | 0 .../src/modules/projects/projects.action.ts | 0 .../src/modules/projects/projects.data.yml | 0 .../src/modules/projects/projects.form.yml | 0 .../src/modules/projects/projects.hook.ts | 0 .../src/modules/projects/projects.object.yml | 0 .../modules/projects/projects.permission.yml | 0 .../modules/projects/projects.validation.yml | 0 .../src/modules/projects/projects.view.yml | 0 .../basic}/src/modules/tasks/tasks.data.yml | 0 .../basic}/src/modules/tasks/tasks.object.yml | 0 .../src/modules/tasks/tasks.permission.yml | 0 .../basic}/src/pages/dashboard.page.yml | 0 .../basic}/src/pages/landing.page.yml | 0 .../starters/basic}/src/types/index.ts | 0 .../starters/basic}/src/types/kitchen_sink.ts | 0 .../starters/basic}/src/types/projects.ts | 0 .../starters/basic}/src/types/tasks.ts | 0 .../starters/basic}/tsconfig.json | 0 .../starters/enterprise}/CHANGELOG.md | 0 .../starters/enterprise}/README.md | 0 .../starters/enterprise}/package.json | 2 +- .../starters/enterprise}/src/apps/erp.app.yml | 0 .../src/core/attachment.object.yml | 0 .../enterprise}/src/core/i18n/en/core.json | 0 .../enterprise}/src/core/i18n/zh-CN/core.json | 0 .../starters/enterprise}/src/core/index.ts | 0 .../src/core/organization.object.yml | 0 .../enterprise}/src/core/user.object.yml | 0 .../enterprise}/src/extensions/README.md | 0 .../src/extensions/user.extension.object.yml | 0 .../enterprise}/src/extensions/user.ts | 0 .../starters/enterprise}/src/index.ts | 0 .../enterprise}/src/menus/erp.menu.yml | 0 .../enterprise}/src/modules/crm/README.md | 0 .../src/modules/crm/crm_account.object.yml | 0 .../src/modules/crm/crm_contact.object.yml | 0 .../src/modules/crm/crm_lead.object.yml | 0 .../modules/crm/crm_opportunity.object.yml | 0 .../src/modules/crm/i18n/en/crm.json | 0 .../src/modules/crm/i18n/zh-CN/crm.json | 0 .../enterprise}/src/modules/crm/index.ts | 0 .../enterprise}/src/modules/finance/README.md | 0 .../modules/finance/finance_budget.object.yml | 0 .../finance/finance_expense.object.yml | 0 .../finance/finance_invoice.object.yml | 0 .../finance/finance_payment.object.yml | 0 .../enterprise}/src/modules/finance/index.ts | 0 .../enterprise}/src/modules/hr/README.md | 0 .../src/modules/hr/hr_department.object.yml | 0 .../src/modules/hr/hr_employee.object.yml | 0 .../src/modules/hr/hr_position.object.yml | 0 .../src/modules/hr/hr_timesheet.object.yml | 0 .../enterprise}/src/modules/hr/index.ts | 0 .../enterprise}/src/modules/project/README.md | 0 .../enterprise}/src/modules/project/index.ts | 0 .../project/project_milestone.object.yml | 0 .../project/project_project.object.yml | 0 .../modules/project/project_task.object.yml | 0 .../project_timesheet_entry.object.yml | 0 .../enterprise}/src/shared/constants.ts | 0 .../starters/enterprise}/src/shared/utils.ts | 0 .../enterprise}/src/shared/validators.ts | 0 .../enterprise}/src/types/attachment.ts | 0 .../enterprise}/src/types/crm_account.ts | 0 .../enterprise}/src/types/crm_contact.ts | 0 .../enterprise}/src/types/crm_lead.ts | 0 .../enterprise}/src/types/crm_opportunity.ts | 0 .../enterprise}/src/types/finance_budget.ts | 0 .../enterprise}/src/types/finance_expense.ts | 0 .../enterprise}/src/types/finance_invoice.ts | 0 .../enterprise}/src/types/finance_payment.ts | 0 .../enterprise}/src/types/hr_department.ts | 0 .../enterprise}/src/types/hr_employee.ts | 0 .../enterprise}/src/types/hr_position.ts | 0 .../enterprise}/src/types/hr_timesheet.ts | 0 .../starters/enterprise}/src/types/index.ts | 0 .../enterprise}/src/types/organization.ts | 0 .../src/types/project_milestone.ts | 0 .../enterprise}/src/types/project_project.ts | 0 .../enterprise}/src/types/project_task.ts | 0 .../src/types/project_timesheet_entry.ts | 0 .../starters/enterprise}/src/types/user.ts | 0 .../starters/enterprise}/tsconfig.json | 0 .../starters/express-api/CHANGELOG.md | 0 .../starters/express-api/README.md | 0 .../starters/express-api/package.json | 4 +- .../starters/express-api/src/index.ts | 0 .../starters/express-api/src/task.object.yml | 0 .../starters/express-api/src/test.view.yml | 0 .../starters/express-api/src/user.object.yml | 0 .../starters/express-api/tsconfig.json | 0 pnpm-lock.yaml | 138 +++++++++--------- pnpm-workspace.yaml | 2 +- tsconfig.json | 6 +- 113 files changed, 80 insertions(+), 80 deletions(-) rename {examples/starters/basic-script => packages/starters/basic}/CHANGELOG.md (100%) rename {examples/starters/basic-script => packages/starters/basic}/HOOKS_ACTIONS_GUIDE.md (100%) rename {examples/starters/basic-script => packages/starters/basic}/PERMISSIONS_GUIDE.md (100%) rename {examples/starters/basic-script => packages/starters/basic}/README.md (100%) rename {examples/starters/basic-script => packages/starters/basic}/__tests__/projects-hooks-actions.test.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/objectql.config.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/package.json (88%) rename {examples/starters/basic-script => packages/starters/basic}/src/README.pages.md (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/demo.app.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/i18n/zh-CN/projects.json (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/index.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/main.menu.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/kitchen-sink/kitchen_sink.data.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/kitchen-sink/kitchen_sink.object.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/pages/create_project_wizard.page.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/pages/project_detail.page.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/project_approval.workflow.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/project_status.report.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.action.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.data.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.form.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.hook.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.object.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.permission.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.validation.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/projects/projects.view.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/tasks/tasks.data.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/tasks/tasks.object.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/modules/tasks/tasks.permission.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/pages/dashboard.page.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/pages/landing.page.yml (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/types/index.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/types/kitchen_sink.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/types/projects.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/src/types/tasks.ts (100%) rename {examples/starters/basic-script => packages/starters/basic}/tsconfig.json (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/CHANGELOG.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/package.json (94%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/apps/erp.app.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/attachment.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/i18n/en/core.json (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/i18n/zh-CN/core.json (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/organization.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/core/user.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/extensions/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/extensions/user.extension.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/extensions/user.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/menus/erp.menu.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/crm_account.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/crm_contact.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/crm_lead.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/crm_opportunity.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/i18n/en/crm.json (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/i18n/zh-CN/crm.json (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/crm/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/finance_budget.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/finance_expense.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/finance_invoice.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/finance_payment.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/finance/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/hr_department.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/hr_employee.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/hr_position.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/hr_timesheet.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/hr/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/README.md (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/project_milestone.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/project_project.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/project_task.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/modules/project/project_timesheet_entry.object.yml (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/shared/constants.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/shared/utils.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/shared/validators.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/attachment.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/crm_account.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/crm_contact.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/crm_lead.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/crm_opportunity.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/finance_budget.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/finance_expense.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/finance_invoice.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/finance_payment.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/hr_department.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/hr_employee.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/hr_position.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/hr_timesheet.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/index.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/organization.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/project_milestone.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/project_project.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/project_task.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/project_timesheet_entry.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/src/types/user.ts (100%) rename {examples/scenarios/enterprise-structure => packages/starters/enterprise}/tsconfig.json (100%) rename {examples => packages}/starters/express-api/CHANGELOG.md (100%) rename {examples => packages}/starters/express-api/README.md (100%) rename {examples => packages}/starters/express-api/package.json (90%) rename {examples => packages}/starters/express-api/src/index.ts (100%) rename {examples => packages}/starters/express-api/src/task.object.yml (100%) rename {examples => packages}/starters/express-api/src/test.view.yml (100%) rename {examples => packages}/starters/express-api/src/user.object.yml (100%) rename {examples => packages}/starters/express-api/tsconfig.json (100%) diff --git a/examples/scenarios/preset-usage/package.json b/examples/scenarios/preset-usage/package.json index 0a5737e1..aadf30af 100644 --- a/examples/scenarios/preset-usage/package.json +++ b/examples/scenarios/preset-usage/package.json @@ -16,7 +16,7 @@ "repl": "objectql repl" }, "dependencies": { - "@objectql/starter-basic-script": "workspace:*", + "@objectql/starter-basic": "workspace:*", "@example/audit-log": "workspace:*" }, "devDependencies": { diff --git a/examples/starters/basic-script/CHANGELOG.md b/packages/starters/basic/CHANGELOG.md similarity index 100% rename from examples/starters/basic-script/CHANGELOG.md rename to packages/starters/basic/CHANGELOG.md diff --git a/examples/starters/basic-script/HOOKS_ACTIONS_GUIDE.md b/packages/starters/basic/HOOKS_ACTIONS_GUIDE.md similarity index 100% rename from examples/starters/basic-script/HOOKS_ACTIONS_GUIDE.md rename to packages/starters/basic/HOOKS_ACTIONS_GUIDE.md diff --git a/examples/starters/basic-script/PERMISSIONS_GUIDE.md b/packages/starters/basic/PERMISSIONS_GUIDE.md similarity index 100% rename from examples/starters/basic-script/PERMISSIONS_GUIDE.md rename to packages/starters/basic/PERMISSIONS_GUIDE.md diff --git a/examples/starters/basic-script/README.md b/packages/starters/basic/README.md similarity index 100% rename from examples/starters/basic-script/README.md rename to packages/starters/basic/README.md diff --git a/examples/starters/basic-script/__tests__/projects-hooks-actions.test.ts b/packages/starters/basic/__tests__/projects-hooks-actions.test.ts similarity index 100% rename from examples/starters/basic-script/__tests__/projects-hooks-actions.test.ts rename to packages/starters/basic/__tests__/projects-hooks-actions.test.ts diff --git a/examples/starters/basic-script/objectql.config.ts b/packages/starters/basic/objectql.config.ts similarity index 100% rename from examples/starters/basic-script/objectql.config.ts rename to packages/starters/basic/objectql.config.ts diff --git a/examples/starters/basic-script/package.json b/packages/starters/basic/package.json similarity index 88% rename from examples/starters/basic-script/package.json rename to packages/starters/basic/package.json index 688fca5d..b6ced220 100644 --- a/examples/starters/basic-script/package.json +++ b/packages/starters/basic/package.json @@ -1,14 +1,14 @@ { - "name": "@objectql/starter-basic-script", + "name": "@objectql/starter-basic", "version": "6.0.0", "license": "MIT", "author": "ObjectQL Contributors", "repository": { "type": "git", "url": "https://github.com/objectql/objectql.git", - "directory": "examples/starters/basic-script" + "directory": "packages/starters/basic" }, - "private": true, + "private": false, "main": "dist/index.js", "types": "dist/index.d.ts", "files": [ diff --git a/examples/starters/basic-script/src/README.pages.md b/packages/starters/basic/src/README.pages.md similarity index 100% rename from examples/starters/basic-script/src/README.pages.md rename to packages/starters/basic/src/README.pages.md diff --git a/examples/starters/basic-script/src/demo.app.yml b/packages/starters/basic/src/demo.app.yml similarity index 100% rename from examples/starters/basic-script/src/demo.app.yml rename to packages/starters/basic/src/demo.app.yml diff --git a/examples/starters/basic-script/src/i18n/zh-CN/projects.json b/packages/starters/basic/src/i18n/zh-CN/projects.json similarity index 100% rename from examples/starters/basic-script/src/i18n/zh-CN/projects.json rename to packages/starters/basic/src/i18n/zh-CN/projects.json diff --git a/examples/starters/basic-script/src/index.ts b/packages/starters/basic/src/index.ts similarity index 100% rename from examples/starters/basic-script/src/index.ts rename to packages/starters/basic/src/index.ts diff --git a/examples/starters/basic-script/src/main.menu.yml b/packages/starters/basic/src/main.menu.yml similarity index 100% rename from examples/starters/basic-script/src/main.menu.yml rename to packages/starters/basic/src/main.menu.yml diff --git a/examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.data.yml b/packages/starters/basic/src/modules/kitchen-sink/kitchen_sink.data.yml similarity index 100% rename from examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.data.yml rename to packages/starters/basic/src/modules/kitchen-sink/kitchen_sink.data.yml diff --git a/examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.object.yml b/packages/starters/basic/src/modules/kitchen-sink/kitchen_sink.object.yml similarity index 100% rename from examples/starters/basic-script/src/modules/kitchen-sink/kitchen_sink.object.yml rename to packages/starters/basic/src/modules/kitchen-sink/kitchen_sink.object.yml diff --git a/examples/starters/basic-script/src/modules/projects/pages/create_project_wizard.page.yml b/packages/starters/basic/src/modules/projects/pages/create_project_wizard.page.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/pages/create_project_wizard.page.yml rename to packages/starters/basic/src/modules/projects/pages/create_project_wizard.page.yml diff --git a/examples/starters/basic-script/src/modules/projects/pages/project_detail.page.yml b/packages/starters/basic/src/modules/projects/pages/project_detail.page.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/pages/project_detail.page.yml rename to packages/starters/basic/src/modules/projects/pages/project_detail.page.yml diff --git a/examples/starters/basic-script/src/modules/projects/project_approval.workflow.yml b/packages/starters/basic/src/modules/projects/project_approval.workflow.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/project_approval.workflow.yml rename to packages/starters/basic/src/modules/projects/project_approval.workflow.yml diff --git a/examples/starters/basic-script/src/modules/projects/project_status.report.yml b/packages/starters/basic/src/modules/projects/project_status.report.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/project_status.report.yml rename to packages/starters/basic/src/modules/projects/project_status.report.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.action.ts b/packages/starters/basic/src/modules/projects/projects.action.ts similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.action.ts rename to packages/starters/basic/src/modules/projects/projects.action.ts diff --git a/examples/starters/basic-script/src/modules/projects/projects.data.yml b/packages/starters/basic/src/modules/projects/projects.data.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.data.yml rename to packages/starters/basic/src/modules/projects/projects.data.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.form.yml b/packages/starters/basic/src/modules/projects/projects.form.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.form.yml rename to packages/starters/basic/src/modules/projects/projects.form.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.hook.ts b/packages/starters/basic/src/modules/projects/projects.hook.ts similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.hook.ts rename to packages/starters/basic/src/modules/projects/projects.hook.ts diff --git a/examples/starters/basic-script/src/modules/projects/projects.object.yml b/packages/starters/basic/src/modules/projects/projects.object.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.object.yml rename to packages/starters/basic/src/modules/projects/projects.object.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.permission.yml b/packages/starters/basic/src/modules/projects/projects.permission.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.permission.yml rename to packages/starters/basic/src/modules/projects/projects.permission.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.validation.yml b/packages/starters/basic/src/modules/projects/projects.validation.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.validation.yml rename to packages/starters/basic/src/modules/projects/projects.validation.yml diff --git a/examples/starters/basic-script/src/modules/projects/projects.view.yml b/packages/starters/basic/src/modules/projects/projects.view.yml similarity index 100% rename from examples/starters/basic-script/src/modules/projects/projects.view.yml rename to packages/starters/basic/src/modules/projects/projects.view.yml diff --git a/examples/starters/basic-script/src/modules/tasks/tasks.data.yml b/packages/starters/basic/src/modules/tasks/tasks.data.yml similarity index 100% rename from examples/starters/basic-script/src/modules/tasks/tasks.data.yml rename to packages/starters/basic/src/modules/tasks/tasks.data.yml diff --git a/examples/starters/basic-script/src/modules/tasks/tasks.object.yml b/packages/starters/basic/src/modules/tasks/tasks.object.yml similarity index 100% rename from examples/starters/basic-script/src/modules/tasks/tasks.object.yml rename to packages/starters/basic/src/modules/tasks/tasks.object.yml diff --git a/examples/starters/basic-script/src/modules/tasks/tasks.permission.yml b/packages/starters/basic/src/modules/tasks/tasks.permission.yml similarity index 100% rename from examples/starters/basic-script/src/modules/tasks/tasks.permission.yml rename to packages/starters/basic/src/modules/tasks/tasks.permission.yml diff --git a/examples/starters/basic-script/src/pages/dashboard.page.yml b/packages/starters/basic/src/pages/dashboard.page.yml similarity index 100% rename from examples/starters/basic-script/src/pages/dashboard.page.yml rename to packages/starters/basic/src/pages/dashboard.page.yml diff --git a/examples/starters/basic-script/src/pages/landing.page.yml b/packages/starters/basic/src/pages/landing.page.yml similarity index 100% rename from examples/starters/basic-script/src/pages/landing.page.yml rename to packages/starters/basic/src/pages/landing.page.yml diff --git a/examples/starters/basic-script/src/types/index.ts b/packages/starters/basic/src/types/index.ts similarity index 100% rename from examples/starters/basic-script/src/types/index.ts rename to packages/starters/basic/src/types/index.ts diff --git a/examples/starters/basic-script/src/types/kitchen_sink.ts b/packages/starters/basic/src/types/kitchen_sink.ts similarity index 100% rename from examples/starters/basic-script/src/types/kitchen_sink.ts rename to packages/starters/basic/src/types/kitchen_sink.ts diff --git a/examples/starters/basic-script/src/types/projects.ts b/packages/starters/basic/src/types/projects.ts similarity index 100% rename from examples/starters/basic-script/src/types/projects.ts rename to packages/starters/basic/src/types/projects.ts diff --git a/examples/starters/basic-script/src/types/tasks.ts b/packages/starters/basic/src/types/tasks.ts similarity index 100% rename from examples/starters/basic-script/src/types/tasks.ts rename to packages/starters/basic/src/types/tasks.ts diff --git a/examples/starters/basic-script/tsconfig.json b/packages/starters/basic/tsconfig.json similarity index 100% rename from examples/starters/basic-script/tsconfig.json rename to packages/starters/basic/tsconfig.json diff --git a/examples/scenarios/enterprise-structure/CHANGELOG.md b/packages/starters/enterprise/CHANGELOG.md similarity index 100% rename from examples/scenarios/enterprise-structure/CHANGELOG.md rename to packages/starters/enterprise/CHANGELOG.md diff --git a/examples/scenarios/enterprise-structure/README.md b/packages/starters/enterprise/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/README.md rename to packages/starters/enterprise/README.md diff --git a/examples/scenarios/enterprise-structure/package.json b/packages/starters/enterprise/package.json similarity index 94% rename from examples/scenarios/enterprise-structure/package.json rename to packages/starters/enterprise/package.json index febf5e7f..fdf30254 100644 --- a/examples/scenarios/enterprise-structure/package.json +++ b/packages/starters/enterprise/package.json @@ -6,7 +6,7 @@ "repository": { "type": "git", "url": "https://github.com/objectql/objectql.git", - "directory": "examples/scenarios/enterprise-structure" + "directory": "packages/starters/enterprise" }, "private": false, "description": "Enterprise-scale metadata organization example for ObjectQL", diff --git a/examples/scenarios/enterprise-structure/src/apps/erp.app.yml b/packages/starters/enterprise/src/apps/erp.app.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/apps/erp.app.yml rename to packages/starters/enterprise/src/apps/erp.app.yml diff --git a/examples/scenarios/enterprise-structure/src/core/attachment.object.yml b/packages/starters/enterprise/src/core/attachment.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/attachment.object.yml rename to packages/starters/enterprise/src/core/attachment.object.yml diff --git a/examples/scenarios/enterprise-structure/src/core/i18n/en/core.json b/packages/starters/enterprise/src/core/i18n/en/core.json similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/i18n/en/core.json rename to packages/starters/enterprise/src/core/i18n/en/core.json diff --git a/examples/scenarios/enterprise-structure/src/core/i18n/zh-CN/core.json b/packages/starters/enterprise/src/core/i18n/zh-CN/core.json similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/i18n/zh-CN/core.json rename to packages/starters/enterprise/src/core/i18n/zh-CN/core.json diff --git a/examples/scenarios/enterprise-structure/src/core/index.ts b/packages/starters/enterprise/src/core/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/index.ts rename to packages/starters/enterprise/src/core/index.ts diff --git a/examples/scenarios/enterprise-structure/src/core/organization.object.yml b/packages/starters/enterprise/src/core/organization.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/organization.object.yml rename to packages/starters/enterprise/src/core/organization.object.yml diff --git a/examples/scenarios/enterprise-structure/src/core/user.object.yml b/packages/starters/enterprise/src/core/user.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/core/user.object.yml rename to packages/starters/enterprise/src/core/user.object.yml diff --git a/examples/scenarios/enterprise-structure/src/extensions/README.md b/packages/starters/enterprise/src/extensions/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/src/extensions/README.md rename to packages/starters/enterprise/src/extensions/README.md diff --git a/examples/scenarios/enterprise-structure/src/extensions/user.extension.object.yml b/packages/starters/enterprise/src/extensions/user.extension.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/extensions/user.extension.object.yml rename to packages/starters/enterprise/src/extensions/user.extension.object.yml diff --git a/examples/scenarios/enterprise-structure/src/extensions/user.ts b/packages/starters/enterprise/src/extensions/user.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/extensions/user.ts rename to packages/starters/enterprise/src/extensions/user.ts diff --git a/examples/scenarios/enterprise-structure/src/index.ts b/packages/starters/enterprise/src/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/index.ts rename to packages/starters/enterprise/src/index.ts diff --git a/examples/scenarios/enterprise-structure/src/menus/erp.menu.yml b/packages/starters/enterprise/src/menus/erp.menu.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/menus/erp.menu.yml rename to packages/starters/enterprise/src/menus/erp.menu.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/README.md b/packages/starters/enterprise/src/modules/crm/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/README.md rename to packages/starters/enterprise/src/modules/crm/README.md diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/crm_account.object.yml b/packages/starters/enterprise/src/modules/crm/crm_account.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/crm_account.object.yml rename to packages/starters/enterprise/src/modules/crm/crm_account.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/crm_contact.object.yml b/packages/starters/enterprise/src/modules/crm/crm_contact.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/crm_contact.object.yml rename to packages/starters/enterprise/src/modules/crm/crm_contact.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/crm_lead.object.yml b/packages/starters/enterprise/src/modules/crm/crm_lead.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/crm_lead.object.yml rename to packages/starters/enterprise/src/modules/crm/crm_lead.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/crm_opportunity.object.yml b/packages/starters/enterprise/src/modules/crm/crm_opportunity.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/crm_opportunity.object.yml rename to packages/starters/enterprise/src/modules/crm/crm_opportunity.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/i18n/en/crm.json b/packages/starters/enterprise/src/modules/crm/i18n/en/crm.json similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/i18n/en/crm.json rename to packages/starters/enterprise/src/modules/crm/i18n/en/crm.json diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/i18n/zh-CN/crm.json b/packages/starters/enterprise/src/modules/crm/i18n/zh-CN/crm.json similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/i18n/zh-CN/crm.json rename to packages/starters/enterprise/src/modules/crm/i18n/zh-CN/crm.json diff --git a/examples/scenarios/enterprise-structure/src/modules/crm/index.ts b/packages/starters/enterprise/src/modules/crm/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/crm/index.ts rename to packages/starters/enterprise/src/modules/crm/index.ts diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/README.md b/packages/starters/enterprise/src/modules/finance/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/README.md rename to packages/starters/enterprise/src/modules/finance/README.md diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/finance_budget.object.yml b/packages/starters/enterprise/src/modules/finance/finance_budget.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/finance_budget.object.yml rename to packages/starters/enterprise/src/modules/finance/finance_budget.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/finance_expense.object.yml b/packages/starters/enterprise/src/modules/finance/finance_expense.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/finance_expense.object.yml rename to packages/starters/enterprise/src/modules/finance/finance_expense.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/finance_invoice.object.yml b/packages/starters/enterprise/src/modules/finance/finance_invoice.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/finance_invoice.object.yml rename to packages/starters/enterprise/src/modules/finance/finance_invoice.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/finance_payment.object.yml b/packages/starters/enterprise/src/modules/finance/finance_payment.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/finance_payment.object.yml rename to packages/starters/enterprise/src/modules/finance/finance_payment.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/finance/index.ts b/packages/starters/enterprise/src/modules/finance/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/finance/index.ts rename to packages/starters/enterprise/src/modules/finance/index.ts diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/README.md b/packages/starters/enterprise/src/modules/hr/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/README.md rename to packages/starters/enterprise/src/modules/hr/README.md diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/hr_department.object.yml b/packages/starters/enterprise/src/modules/hr/hr_department.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/hr_department.object.yml rename to packages/starters/enterprise/src/modules/hr/hr_department.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/hr_employee.object.yml b/packages/starters/enterprise/src/modules/hr/hr_employee.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/hr_employee.object.yml rename to packages/starters/enterprise/src/modules/hr/hr_employee.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/hr_position.object.yml b/packages/starters/enterprise/src/modules/hr/hr_position.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/hr_position.object.yml rename to packages/starters/enterprise/src/modules/hr/hr_position.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/hr_timesheet.object.yml b/packages/starters/enterprise/src/modules/hr/hr_timesheet.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/hr_timesheet.object.yml rename to packages/starters/enterprise/src/modules/hr/hr_timesheet.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/hr/index.ts b/packages/starters/enterprise/src/modules/hr/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/hr/index.ts rename to packages/starters/enterprise/src/modules/hr/index.ts diff --git a/examples/scenarios/enterprise-structure/src/modules/project/README.md b/packages/starters/enterprise/src/modules/project/README.md similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/README.md rename to packages/starters/enterprise/src/modules/project/README.md diff --git a/examples/scenarios/enterprise-structure/src/modules/project/index.ts b/packages/starters/enterprise/src/modules/project/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/index.ts rename to packages/starters/enterprise/src/modules/project/index.ts diff --git a/examples/scenarios/enterprise-structure/src/modules/project/project_milestone.object.yml b/packages/starters/enterprise/src/modules/project/project_milestone.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/project_milestone.object.yml rename to packages/starters/enterprise/src/modules/project/project_milestone.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/project_project.object.yml b/packages/starters/enterprise/src/modules/project/project_project.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/project_project.object.yml rename to packages/starters/enterprise/src/modules/project/project_project.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/project_task.object.yml b/packages/starters/enterprise/src/modules/project/project_task.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/project_task.object.yml rename to packages/starters/enterprise/src/modules/project/project_task.object.yml diff --git a/examples/scenarios/enterprise-structure/src/modules/project/project_timesheet_entry.object.yml b/packages/starters/enterprise/src/modules/project/project_timesheet_entry.object.yml similarity index 100% rename from examples/scenarios/enterprise-structure/src/modules/project/project_timesheet_entry.object.yml rename to packages/starters/enterprise/src/modules/project/project_timesheet_entry.object.yml diff --git a/examples/scenarios/enterprise-structure/src/shared/constants.ts b/packages/starters/enterprise/src/shared/constants.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/shared/constants.ts rename to packages/starters/enterprise/src/shared/constants.ts diff --git a/examples/scenarios/enterprise-structure/src/shared/utils.ts b/packages/starters/enterprise/src/shared/utils.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/shared/utils.ts rename to packages/starters/enterprise/src/shared/utils.ts diff --git a/examples/scenarios/enterprise-structure/src/shared/validators.ts b/packages/starters/enterprise/src/shared/validators.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/shared/validators.ts rename to packages/starters/enterprise/src/shared/validators.ts diff --git a/examples/scenarios/enterprise-structure/src/types/attachment.ts b/packages/starters/enterprise/src/types/attachment.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/attachment.ts rename to packages/starters/enterprise/src/types/attachment.ts diff --git a/examples/scenarios/enterprise-structure/src/types/crm_account.ts b/packages/starters/enterprise/src/types/crm_account.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/crm_account.ts rename to packages/starters/enterprise/src/types/crm_account.ts diff --git a/examples/scenarios/enterprise-structure/src/types/crm_contact.ts b/packages/starters/enterprise/src/types/crm_contact.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/crm_contact.ts rename to packages/starters/enterprise/src/types/crm_contact.ts diff --git a/examples/scenarios/enterprise-structure/src/types/crm_lead.ts b/packages/starters/enterprise/src/types/crm_lead.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/crm_lead.ts rename to packages/starters/enterprise/src/types/crm_lead.ts diff --git a/examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts b/packages/starters/enterprise/src/types/crm_opportunity.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/crm_opportunity.ts rename to packages/starters/enterprise/src/types/crm_opportunity.ts diff --git a/examples/scenarios/enterprise-structure/src/types/finance_budget.ts b/packages/starters/enterprise/src/types/finance_budget.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/finance_budget.ts rename to packages/starters/enterprise/src/types/finance_budget.ts diff --git a/examples/scenarios/enterprise-structure/src/types/finance_expense.ts b/packages/starters/enterprise/src/types/finance_expense.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/finance_expense.ts rename to packages/starters/enterprise/src/types/finance_expense.ts diff --git a/examples/scenarios/enterprise-structure/src/types/finance_invoice.ts b/packages/starters/enterprise/src/types/finance_invoice.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/finance_invoice.ts rename to packages/starters/enterprise/src/types/finance_invoice.ts diff --git a/examples/scenarios/enterprise-structure/src/types/finance_payment.ts b/packages/starters/enterprise/src/types/finance_payment.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/finance_payment.ts rename to packages/starters/enterprise/src/types/finance_payment.ts diff --git a/examples/scenarios/enterprise-structure/src/types/hr_department.ts b/packages/starters/enterprise/src/types/hr_department.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/hr_department.ts rename to packages/starters/enterprise/src/types/hr_department.ts diff --git a/examples/scenarios/enterprise-structure/src/types/hr_employee.ts b/packages/starters/enterprise/src/types/hr_employee.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/hr_employee.ts rename to packages/starters/enterprise/src/types/hr_employee.ts diff --git a/examples/scenarios/enterprise-structure/src/types/hr_position.ts b/packages/starters/enterprise/src/types/hr_position.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/hr_position.ts rename to packages/starters/enterprise/src/types/hr_position.ts diff --git a/examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts b/packages/starters/enterprise/src/types/hr_timesheet.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/hr_timesheet.ts rename to packages/starters/enterprise/src/types/hr_timesheet.ts diff --git a/examples/scenarios/enterprise-structure/src/types/index.ts b/packages/starters/enterprise/src/types/index.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/index.ts rename to packages/starters/enterprise/src/types/index.ts diff --git a/examples/scenarios/enterprise-structure/src/types/organization.ts b/packages/starters/enterprise/src/types/organization.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/organization.ts rename to packages/starters/enterprise/src/types/organization.ts diff --git a/examples/scenarios/enterprise-structure/src/types/project_milestone.ts b/packages/starters/enterprise/src/types/project_milestone.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/project_milestone.ts rename to packages/starters/enterprise/src/types/project_milestone.ts diff --git a/examples/scenarios/enterprise-structure/src/types/project_project.ts b/packages/starters/enterprise/src/types/project_project.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/project_project.ts rename to packages/starters/enterprise/src/types/project_project.ts diff --git a/examples/scenarios/enterprise-structure/src/types/project_task.ts b/packages/starters/enterprise/src/types/project_task.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/project_task.ts rename to packages/starters/enterprise/src/types/project_task.ts diff --git a/examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts b/packages/starters/enterprise/src/types/project_timesheet_entry.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/project_timesheet_entry.ts rename to packages/starters/enterprise/src/types/project_timesheet_entry.ts diff --git a/examples/scenarios/enterprise-structure/src/types/user.ts b/packages/starters/enterprise/src/types/user.ts similarity index 100% rename from examples/scenarios/enterprise-structure/src/types/user.ts rename to packages/starters/enterprise/src/types/user.ts diff --git a/examples/scenarios/enterprise-structure/tsconfig.json b/packages/starters/enterprise/tsconfig.json similarity index 100% rename from examples/scenarios/enterprise-structure/tsconfig.json rename to packages/starters/enterprise/tsconfig.json diff --git a/examples/starters/express-api/CHANGELOG.md b/packages/starters/express-api/CHANGELOG.md similarity index 100% rename from examples/starters/express-api/CHANGELOG.md rename to packages/starters/express-api/CHANGELOG.md diff --git a/examples/starters/express-api/README.md b/packages/starters/express-api/README.md similarity index 100% rename from examples/starters/express-api/README.md rename to packages/starters/express-api/README.md diff --git a/examples/starters/express-api/package.json b/packages/starters/express-api/package.json similarity index 90% rename from examples/starters/express-api/package.json rename to packages/starters/express-api/package.json index e408b83e..e49b1448 100644 --- a/examples/starters/express-api/package.json +++ b/packages/starters/express-api/package.json @@ -6,9 +6,9 @@ "repository": { "type": "git", "url": "https://github.com/objectql/objectql.git", - "directory": "examples/starters/express-api" + "directory": "packages/starters/express-api" }, - "private": true, + "private": false, "scripts": { "build": "tsc && cp src/*.yml dist/ || true", "start": "node dist/index.js" diff --git a/examples/starters/express-api/src/index.ts b/packages/starters/express-api/src/index.ts similarity index 100% rename from examples/starters/express-api/src/index.ts rename to packages/starters/express-api/src/index.ts diff --git a/examples/starters/express-api/src/task.object.yml b/packages/starters/express-api/src/task.object.yml similarity index 100% rename from examples/starters/express-api/src/task.object.yml rename to packages/starters/express-api/src/task.object.yml diff --git a/examples/starters/express-api/src/test.view.yml b/packages/starters/express-api/src/test.view.yml similarity index 100% rename from examples/starters/express-api/src/test.view.yml rename to packages/starters/express-api/src/test.view.yml diff --git a/examples/starters/express-api/src/user.object.yml b/packages/starters/express-api/src/user.object.yml similarity index 100% rename from examples/starters/express-api/src/user.object.yml rename to packages/starters/express-api/src/user.object.yml diff --git a/examples/starters/express-api/tsconfig.json b/packages/starters/express-api/tsconfig.json similarity index 100% rename from examples/starters/express-api/tsconfig.json rename to packages/starters/express-api/tsconfig.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 06c947db..69394b89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,35 +74,14 @@ importers: specifier: ^5.3.0 version: 5.9.3 - examples/scenarios/enterprise-structure: - devDependencies: - '@objectql/cli': - specifier: workspace:* - version: link:../../../packages/tools/cli - '@objectql/core': - specifier: workspace:* - version: link:../../../packages/foundation/core - '@objectql/driver-sql': - specifier: workspace:* - version: link:../../../packages/drivers/sql - '@objectql/platform-node': - specifier: workspace:* - version: link:../../../packages/foundation/platform-node - '@objectql/types': - specifier: workspace:* - version: link:../../../packages/foundation/types - typescript: - specifier: ^5.3.0 - version: 5.9.3 - examples/scenarios/preset-usage: dependencies: '@example/audit-log': specifier: workspace:* version: link:../../plugins/audit-log - '@objectql/starter-basic-script': + '@objectql/starter-basic': specifier: workspace:* - version: link:../../starters/basic-script + version: link:../../../packages/starters/basic devDependencies: '@objectql/cli': specifier: workspace:* @@ -126,52 +105,6 @@ importers: specifier: ^5.3.0 version: 5.9.3 - examples/starters/basic-script: - devDependencies: - '@objectql/cli': - specifier: workspace:* - version: link:../../../packages/tools/cli - '@objectql/core': - specifier: workspace:* - version: link:../../../packages/foundation/core - '@objectql/types': - specifier: workspace:* - version: link:../../../packages/foundation/types - typescript: - specifier: ^5.3.0 - version: 5.9.3 - - examples/starters/express-api: - dependencies: - '@objectql/core': - specifier: workspace:* - version: link:../../../packages/foundation/core - '@objectql/driver-sql': - specifier: workspace:* - version: link:../../../packages/drivers/sql - '@objectql/platform-node': - specifier: workspace:* - version: link:../../../packages/foundation/platform-node - '@objectql/server': - specifier: workspace:* - version: link:../../../packages/runtime/server - '@objectql/types': - specifier: workspace:* - version: link:../../../packages/foundation/types - express: - specifier: ^4.18.2 - version: 4.22.1 - sqlite3: - specifier: ^5.1.7 - version: 5.1.7 - devDependencies: - '@types/express': - specifier: ^4.17.21 - version: 4.17.25 - typescript: - specifier: ^5.0.0 - version: 5.9.3 - packages/drivers/mongo: dependencies: '@objectql/types': @@ -257,6 +190,73 @@ importers: specifier: ^5.3.0 version: 5.9.3 + packages/starters/basic: + devDependencies: + '@objectql/cli': + specifier: workspace:* + version: link:../../tools/cli + '@objectql/core': + specifier: workspace:* + version: link:../../foundation/core + '@objectql/types': + specifier: workspace:* + version: link:../../foundation/types + typescript: + specifier: ^5.3.0 + version: 5.9.3 + + packages/starters/enterprise: + devDependencies: + '@objectql/cli': + specifier: workspace:* + version: link:../../tools/cli + '@objectql/core': + specifier: workspace:* + version: link:../../foundation/core + '@objectql/driver-sql': + specifier: workspace:* + version: link:../../drivers/sql + '@objectql/platform-node': + specifier: workspace:* + version: link:../../foundation/platform-node + '@objectql/types': + specifier: workspace:* + version: link:../../foundation/types + typescript: + specifier: ^5.3.0 + version: 5.9.3 + + packages/starters/express-api: + dependencies: + '@objectql/core': + specifier: workspace:* + version: link:../../foundation/core + '@objectql/driver-sql': + specifier: workspace:* + version: link:../../drivers/sql + '@objectql/platform-node': + specifier: workspace:* + version: link:../../foundation/platform-node + '@objectql/server': + specifier: workspace:* + version: link:../../runtime/server + '@objectql/types': + specifier: workspace:* + version: link:../../foundation/types + express: + specifier: ^4.18.2 + version: 4.22.1 + sqlite3: + specifier: ^5.1.7 + version: 5.1.7 + devDependencies: + '@types/express': + specifier: ^4.17.21 + version: 4.17.25 + typescript: + specifier: ^5.0.0 + version: 5.9.3 + packages/tools/cli: dependencies: '@objectql/core': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6d67b9a1..4abff102 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,7 @@ packages: - packages/drivers/* - packages/runtime/* - packages/tools/* - - examples/starters/* + - packages/starters/* - examples/scenarios/* - examples/plugins/* diff --git a/tsconfig.json b/tsconfig.json index 3896592b..d7c712f5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,9 +10,9 @@ { "path": "./packages/runtime/server" }, { "path": "./packages/tools/cli" }, { "path": "./packages/tools/studio" }, - { "path": "./examples/starters/express-api" }, - { "path": "./examples/starters/basic-script" }, - { "path": "./examples/scenarios/enterprise-structure" }, + { "path": "./packages/starters/express-api" }, + { "path": "./packages/starters/basic" }, + { "path": "./packages/starters/enterprise" }, { "path": "./examples/plugins/audit-log" }, { "path": "./examples/scenarios/preset-usage" } ]