@ricsam/formula-engine 0.0.22 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cjs/core/engine.cjs +3 -3
  2. package/dist/cjs/core/engine.cjs.map +3 -3
  3. package/dist/cjs/core/managers/schema-manager.cjs +58 -1
  4. package/dist/cjs/core/managers/schema-manager.cjs.map +3 -3
  5. package/dist/cjs/core/schema/cell-orm.cjs +8 -22
  6. package/dist/cjs/core/schema/cell-orm.cjs.map +3 -3
  7. package/dist/cjs/core/schema/grid-orm.cjs +115 -0
  8. package/dist/cjs/core/schema/grid-orm.cjs.map +10 -0
  9. package/dist/cjs/core/schema/schema-builder.cjs +9 -2
  10. package/dist/cjs/core/schema/schema-builder.cjs.map +3 -3
  11. package/dist/cjs/core/schema/schema-helpers.cjs +8 -9
  12. package/dist/cjs/core/schema/schema-helpers.cjs.map +3 -3
  13. package/dist/cjs/core/schema/schema.cjs +24 -4
  14. package/dist/cjs/core/schema/schema.cjs.map +3 -3
  15. package/dist/cjs/core/schema/table-orm.cjs +11 -3
  16. package/dist/cjs/core/schema/table-orm.cjs.map +3 -3
  17. package/dist/cjs/package.json +1 -1
  18. package/dist/mjs/core/engine.mjs +3 -3
  19. package/dist/mjs/core/engine.mjs.map +3 -3
  20. package/dist/mjs/core/managers/schema-manager.mjs +58 -1
  21. package/dist/mjs/core/managers/schema-manager.mjs.map +3 -3
  22. package/dist/mjs/core/schema/cell-orm.mjs +8 -22
  23. package/dist/mjs/core/schema/cell-orm.mjs.map +3 -3
  24. package/dist/mjs/core/schema/grid-orm.mjs +84 -0
  25. package/dist/mjs/core/schema/grid-orm.mjs.map +10 -0
  26. package/dist/mjs/core/schema/schema-builder.mjs +9 -2
  27. package/dist/mjs/core/schema/schema-builder.mjs.map +3 -3
  28. package/dist/mjs/core/schema/schema-helpers.mjs +8 -9
  29. package/dist/mjs/core/schema/schema-helpers.mjs.map +3 -3
  30. package/dist/mjs/core/schema/schema.mjs +24 -4
  31. package/dist/mjs/core/schema/schema.mjs.map +3 -3
  32. package/dist/mjs/core/schema/table-orm.mjs +11 -3
  33. package/dist/mjs/core/schema/table-orm.mjs.map +3 -3
  34. package/dist/mjs/package.json +1 -1
  35. package/dist/types/core/engine.d.ts +4 -1
  36. package/dist/types/core/managers/schema-manager.d.ts +20 -3
  37. package/dist/types/core/schema/cell-orm.d.ts +8 -4
  38. package/dist/types/core/schema/grid-orm.d.ts +63 -0
  39. package/dist/types/core/schema/schema-builder.d.ts +1 -1
  40. package/dist/types/core/schema/schema-helpers.d.ts +15 -3
  41. package/dist/types/core/schema/schema.d.ts +91 -14
  42. package/package.json +1 -1
@@ -10,7 +10,7 @@ import type { SchemaManager } from "../managers/schema-manager";
10
10
  /**
11
11
  * Build the working schema surface from declarations
12
12
  *
13
- * This creates TableOrm and CellOrm instances for each declared schema
13
+ * This creates TableOrm, CellOrm, and GridOrm instances for each declared schema
14
14
  * and returns them directly.
15
15
  */
16
16
  export declare function buildSchemaFromDeclaration(engine: FormulaEngine<any, any>, declaration: SchemaDeclaration, schemaManager: SchemaManager): Schema;
@@ -3,9 +3,14 @@
3
3
  */
4
4
  import type { CellAddress, SerializedCellValue, TableDefinition } from "../types";
5
5
  import type { FormulaEngine } from "../engine";
6
- export type ParseFunction<TCellMetadata = unknown> = (value: unknown, metadata: TCellMetadata) => unknown;
6
+ export type ParseFunction<TCellMetadata = unknown> = (value: SerializedCellValue, metadata: TCellMetadata) => unknown;
7
+ export type WriteFunction<TCellMetadata = unknown> = (value: unknown) => {
8
+ value: SerializedCellValue;
9
+ metadata?: TCellMetadata;
10
+ };
7
11
  export type TableSchemaHeaders<TCellMetadata = unknown> = Record<string, {
8
12
  parse: ParseFunction<TCellMetadata>;
13
+ write: WriteFunction<TCellMetadata>;
9
14
  index: number;
10
15
  }>;
11
16
  /**
@@ -13,9 +18,16 @@ export type TableSchemaHeaders<TCellMetadata = unknown> = Record<string, {
13
18
  */
14
19
  export declare function rowToObject<TItem extends Record<string, unknown>>(engine: FormulaEngine<any, any>, table: TableDefinition, rowIndex: number, headers: TableSchemaHeaders, getCellMetadata?: (cell: CellAddress) => unknown): TItem;
15
20
  /**
16
- * Convert a typed object to cell values based on headers
21
+ * Result from objectToRowValues including both values and optional metadata
17
22
  */
18
- export declare function objectToRowValues<TItem extends Record<string, unknown>>(obj: TItem, headers: TableSchemaHeaders): Map<number, SerializedCellValue>;
23
+ export type RowValuesResult<TCellMetadata = unknown> = {
24
+ values: Map<number, SerializedCellValue>;
25
+ metadata: Map<number, TCellMetadata>;
26
+ };
27
+ /**
28
+ * Convert a typed object to cell values based on headers using write functions
29
+ */
30
+ export declare function objectToRowValues<TItem extends Record<string, unknown>, TCellMetadata = unknown>(obj: TItem, headers: TableSchemaHeaders<TCellMetadata>): RowValuesResult<TCellMetadata>;
19
31
  /**
20
32
  * Check if an object matches a filter predicate
21
33
  */
@@ -1,4 +1,4 @@
1
- import type { CellAddress } from "../types";
1
+ import type { CellAddress, FiniteSpreadsheetRange, SerializedCellValue } from "../types";
2
2
  /**
3
3
  * Define a schema for the FormulaEngine.
4
4
  *
@@ -21,8 +21,7 @@ import type { CellAddress } from "../types";
21
21
  * mySchema.schema.users.findWhere({ id: 1 }); // Error: schema is undefined at runtime
22
22
  * ```
23
23
  */
24
- export declare function defineSchema<TCellMetadata = unknown, TCurrentSchema extends Record<string, object> = Record<string, object>, TCurrentDeclaration extends Record<string, TableSchemaDefinition | CellSchemaDefinition> = Record<string, TableSchemaDefinition | CellSchemaDefinition>>(): CreateSchema<TCellMetadata, TCurrentSchema, TCurrentDeclaration>;
25
- type ParseFunction<TCellMetadata> = (value: unknown, metadata: TCellMetadata) => unknown;
24
+ export declare function defineSchema<TCellMetadata = unknown, TCurrentSchema extends Record<string, object> = Record<string, object>, TCurrentDeclaration extends Record<string, TableSchemaDefinition | CellSchemaDefinition | GridSchemaDefinition> = Record<string, TableSchemaDefinition | CellSchemaDefinition | GridSchemaDefinition>>(): CreateSchema<TCellMetadata, TCurrentSchema, TCurrentDeclaration>;
26
25
  export interface TableSchemaDefinition {
27
26
  type: "table";
28
27
  headers: Headers<unknown>;
@@ -33,9 +32,28 @@ export interface CellSchemaDefinition {
33
32
  type: "cell";
34
33
  cellAddress: CellAddress;
35
34
  parse: (value: unknown, metadata: unknown) => unknown;
35
+ write: (value: unknown) => {
36
+ value: SerializedCellValue;
37
+ metadata?: unknown;
38
+ };
39
+ }
40
+ export interface GridSchemaDefinition {
41
+ type: "grid";
42
+ workbookName: string;
43
+ sheetName: string;
44
+ range: FiniteSpreadsheetRange;
45
+ parse: (value: unknown, metadata: unknown) => unknown;
46
+ write: (value: unknown) => {
47
+ value: SerializedCellValue;
48
+ metadata?: unknown;
49
+ };
36
50
  }
37
51
  type Headers<TCellMetadata> = Record<string, {
38
- parse: ParseFunction<TCellMetadata>;
52
+ parse: (value: SerializedCellValue, metadata: TCellMetadata) => unknown;
53
+ write: (value: any) => {
54
+ value: SerializedCellValue;
55
+ metadata?: TCellMetadata;
56
+ };
39
57
  index: number;
40
58
  }>;
41
59
  /**
@@ -57,8 +75,53 @@ export type CellOrmSchema<TValue> = {
57
75
  write(value: TValue): void;
58
76
  getAddress(): CellAddress;
59
77
  };
60
- export type SchemaDeclaration = Record<string, TableSchemaDefinition | CellSchemaDefinition>;
78
+ /**
79
+ * Type representing the GridOrm methods exposed on the schema
80
+ */
81
+ export type GridOrmSchema<TValue> = {
82
+ columns: readonly TValue[][];
83
+ rows: readonly TValue[][];
84
+ setValue(value: TValue, position: {
85
+ col: number;
86
+ row: number;
87
+ }): void;
88
+ getValue(position: {
89
+ col: number;
90
+ row: number;
91
+ }): TValue;
92
+ };
93
+ export type SchemaDeclaration = Record<string, TableSchemaDefinition | CellSchemaDefinition | GridSchemaDefinition>;
61
94
  export type Schema = Record<string, object>;
95
+ /**
96
+ * Write function type for converting parsed values back to serializable form
97
+ */
98
+ type WriteFunction<TValue, TCellMetadata> = (value: TValue) => {
99
+ value: SerializedCellValue;
100
+ metadata?: TCellMetadata;
101
+ };
102
+ /**
103
+ * Helper type to create the return type for addCellSchema/addGridSchema
104
+ */
105
+ type AddCellSchemaResult<TCellMetadata, TCurrentSchema extends Schema, TCurrentDeclaration extends SchemaDeclaration, T extends string, TValue> = CreateSchema<TCellMetadata, TCurrentSchema & {
106
+ [K in T]: CellOrmSchema<TValue>;
107
+ }, TCurrentDeclaration & {
108
+ [K in T]: {
109
+ type: "cell";
110
+ cellAddress: CellAddress;
111
+ parse: (value: unknown, metadata: unknown) => unknown;
112
+ };
113
+ }>;
114
+ type AddGridSchemaResult<TCellMetadata, TCurrentSchema extends Schema, TCurrentDeclaration extends SchemaDeclaration, T extends string, TValue> = CreateSchema<TCellMetadata, TCurrentSchema & {
115
+ [K in T]: GridOrmSchema<TValue>;
116
+ }, TCurrentDeclaration & {
117
+ [K in T]: {
118
+ type: "grid";
119
+ workbookName: string;
120
+ sheetName: string;
121
+ range: FiniteSpreadsheetRange;
122
+ parse: (value: unknown, metadata: unknown) => unknown;
123
+ };
124
+ }>;
62
125
  export type CreateSchema<TCellMetadata, TCurrentSchema extends Schema, TCurrentDeclaration extends SchemaDeclaration> = {
63
126
  addTableSchema<T extends string, THeaders extends Headers<TCellMetadata>>(namespace: T, address: {
64
127
  workbookName: string;
@@ -75,16 +138,30 @@ export type CreateSchema<TCellMetadata, TCurrentSchema extends Schema, TCurrentD
75
138
  headers: THeaders;
76
139
  };
77
140
  }>;
78
- addCellSchema<T extends string, TValue>(namespace: T, cellAddress: CellAddress, parse: (value: unknown, metadata: TCellMetadata) => TValue): CreateSchema<TCellMetadata, TCurrentSchema & {
79
- [K in T]: CellOrmSchema<TValue>;
80
- }, TCurrentDeclaration & {
81
- [K in T]: {
82
- type: "cell";
83
- cellAddress: CellAddress;
84
- parse: (value: unknown, metadata: unknown) => unknown;
85
- };
86
- }>;
141
+ addCellSchema<T extends string, TValue>(namespace: T, cellAddress: CellAddress, parse: (value: unknown, metadata: TCellMetadata) => TValue, write: WriteFunction<TValue, TCellMetadata>): AddCellSchemaResult<TCellMetadata, TCurrentSchema, TCurrentDeclaration, T, TValue>;
142
+ addCellSchema<T extends string, TValue extends SerializedCellValue>(namespace: T, cellAddress: CellAddress, parse: (value: unknown, metadata: TCellMetadata) => TValue, write?: WriteFunction<TValue, TCellMetadata>): AddCellSchemaResult<TCellMetadata, TCurrentSchema, TCurrentDeclaration, T, TValue>;
143
+ addGridSchema<T extends string, TValue>(namespace: T, address: {
144
+ workbookName: string;
145
+ sheetName: string;
146
+ }, range: FiniteSpreadsheetRange, parse: (value: unknown, metadata: TCellMetadata) => TValue, write: WriteFunction<TValue, TCellMetadata>): AddGridSchemaResult<TCellMetadata, TCurrentSchema, TCurrentDeclaration, T, TValue>;
147
+ addGridSchema<T extends string, TValue extends SerializedCellValue>(namespace: T, address: {
148
+ workbookName: string;
149
+ sheetName: string;
150
+ }, range: FiniteSpreadsheetRange, parse: (value: unknown, metadata: TCellMetadata) => TValue, write?: WriteFunction<TValue, TCellMetadata>): AddGridSchemaResult<TCellMetadata, TCurrentSchema, TCurrentDeclaration, T, TValue>;
87
151
  schema: TCurrentSchema;
88
152
  declaration: TCurrentDeclaration;
89
153
  };
154
+ export declare const createHeader: <TValue, TMetadata>(index: number, parse: (value: SerializedCellValue, metadata: TMetadata) => TValue, write?: (value: TValue) => {
155
+ value: SerializedCellValue;
156
+ metadata?: TMetadata;
157
+ }) => {
158
+ parse: (value: SerializedCellValue, metadata: TMetadata) => TValue;
159
+ write: ((value: TValue) => {
160
+ value: SerializedCellValue;
161
+ metadata?: TMetadata;
162
+ }) | ((value: TValue) => {
163
+ value: TValue;
164
+ });
165
+ index: number;
166
+ };
90
167
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ricsam/formula-engine",
3
- "version": "0.0.22",
3
+ "version": "0.1.0",
4
4
  "module": "./dist/mjs/lib.mjs",
5
5
  "scripts": {
6
6
  "test": "bun test",