@hapiboo/flux 1.0.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.
@@ -0,0 +1,10 @@
1
+ import { FluxDBFilterOperator, FluxDBFilterLogic, FluxDBFilterOperatorValues, FluxDBFilterOperatorCollection } from './types';
2
+ import { IFluxDBCondition, IFluxDBSubCondition } from './interfaces';
3
+ export declare namespace conditionBuilder {
4
+ function createSimpleBooleanCondition(column: string, operator: FluxDBFilterOperator, value: boolean): IFluxDBCondition;
5
+ function createSimpleStringOrNumberCondition(column: string, operator: FluxDBFilterOperator, value: string | number | undefined): IFluxDBCondition;
6
+ function createSimpleNumberCondition(column: string, operator: FluxDBFilterOperatorValues, value: number): IFluxDBCondition;
7
+ function createSimpleNumberCollectionCondition(column: string, operator: FluxDBFilterOperatorCollection, value: number[]): IFluxDBCondition;
8
+ function createSimpleStringCollectionCondition(column: string, operator: FluxDBFilterOperatorCollection, value: string[]): IFluxDBCondition;
9
+ function createSubCondition(logic: FluxDBFilterLogic, conditions: IFluxDBCondition[]): IFluxDBSubCondition;
10
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.conditionBuilder = void 0;
4
+ var conditionBuilder;
5
+ (function (conditionBuilder) {
6
+ function createSimpleBooleanCondition(column, operator, value) {
7
+ return { column, operator, value };
8
+ }
9
+ conditionBuilder.createSimpleBooleanCondition = createSimpleBooleanCondition;
10
+ function createSimpleStringOrNumberCondition(column, operator, value) {
11
+ return { column, operator, value };
12
+ }
13
+ conditionBuilder.createSimpleStringOrNumberCondition = createSimpleStringOrNumberCondition;
14
+ function createSimpleNumberCondition(column, operator, value) {
15
+ return { column, operator, value };
16
+ }
17
+ conditionBuilder.createSimpleNumberCondition = createSimpleNumberCondition;
18
+ function createSimpleNumberCollectionCondition(column, operator, value) {
19
+ return { column, operator, value };
20
+ }
21
+ conditionBuilder.createSimpleNumberCollectionCondition = createSimpleNumberCollectionCondition;
22
+ function createSimpleStringCollectionCondition(column, operator, value) {
23
+ return { column, operator, value };
24
+ }
25
+ conditionBuilder.createSimpleStringCollectionCondition = createSimpleStringCollectionCondition;
26
+ function createSubCondition(logic, conditions) {
27
+ return { logic, conditions };
28
+ }
29
+ conditionBuilder.createSubCondition = createSubCondition;
30
+ })(conditionBuilder || (exports.conditionBuilder = conditionBuilder = {}));
@@ -0,0 +1,20 @@
1
+ import 'reflect-metadata';
2
+ import { FluxColumnPrimary, FluxObjectCreator } from './types';
3
+ import { IFluxColumnInfo } from './interfaces';
4
+ export declare function FluxTable(name: string): ClassDecorator;
5
+ export declare function FluxIdentifier(): PropertyDecorator;
6
+ export declare function FluxExposedColumn(name: string, type?: FluxColumnPrimary): PropertyDecorator;
7
+ export declare function FluxIndex(name: string, key: string, sort: string | undefined): ClassDecorator;
8
+ export declare namespace hapibooDecorators {
9
+ function getTableName(target: FluxObjectCreator): string;
10
+ function getIdentifierProperty(target: FluxObjectCreator): string;
11
+ function getIndexesInfo(target: FluxObjectCreator): {
12
+ name: string;
13
+ key: string;
14
+ sort: string | undefined;
15
+ }[];
16
+ function getColumnsInfo(target: FluxObjectCreator): {
17
+ info: IFluxColumnInfo;
18
+ propertyKey: string | symbol;
19
+ }[];
20
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hapibooDecorators = void 0;
4
+ exports.FluxTable = FluxTable;
5
+ exports.FluxIdentifier = FluxIdentifier;
6
+ exports.FluxExposedColumn = FluxExposedColumn;
7
+ exports.FluxIndex = FluxIndex;
8
+ require("reflect-metadata");
9
+ const types_1 = require("./types");
10
+ const META_TABLE = Symbol('meta:class:table');
11
+ const META_INDEX = Symbol('meta:class:index');
12
+ const META_IDENTIFIER = Symbol('meta:field:id');
13
+ const META_COLUMN = Symbol('meta:field:column');
14
+ function FluxTable(name) {
15
+ return target => {
16
+ Reflect.defineMetadata(META_TABLE, { name }, target);
17
+ };
18
+ }
19
+ function FluxIdentifier() {
20
+ return (target, key) => {
21
+ Reflect.defineMetadata(META_IDENTIFIER, { propertyKey: key }, target.constructor);
22
+ };
23
+ }
24
+ function FluxExposedColumn(name, type = types_1.FluxColumnPrimary.String) {
25
+ return (target, key) => {
26
+ const fields = Reflect.getMetadata(META_COLUMN, target.constructor) || [];
27
+ fields.push({ propertyKey: key, info: { name, type } });
28
+ Reflect.defineMetadata(META_COLUMN, fields, target.constructor);
29
+ };
30
+ }
31
+ function FluxIndex(name, key, sort) {
32
+ return target => {
33
+ const indexes = Reflect.getMetadata(META_INDEX, target) || [];
34
+ indexes.push({ name, key, sort });
35
+ Reflect.defineMetadata(META_INDEX, indexes, target);
36
+ };
37
+ }
38
+ var hapibooDecorators;
39
+ (function (hapibooDecorators) {
40
+ function getTableName(target) {
41
+ const metadata = Reflect.getMetadata(META_TABLE, target);
42
+ return metadata ? metadata.name : 'storage_table';
43
+ }
44
+ hapibooDecorators.getTableName = getTableName;
45
+ function getIdentifierProperty(target) {
46
+ const metadata = Reflect.getMetadata(META_IDENTIFIER, target);
47
+ return metadata ? metadata.propertyKey : 'id';
48
+ }
49
+ hapibooDecorators.getIdentifierProperty = getIdentifierProperty;
50
+ function getIndexesInfo(target) {
51
+ const metadata = Reflect.getMetadata(META_INDEX, target);
52
+ return metadata ? metadata : [];
53
+ }
54
+ hapibooDecorators.getIndexesInfo = getIndexesInfo;
55
+ function getColumnsInfo(target) {
56
+ const metadata = Reflect.getMetadata(META_COLUMN, target);
57
+ return metadata ? metadata : [];
58
+ }
59
+ hapibooDecorators.getColumnsInfo = getColumnsInfo;
60
+ })(hapibooDecorators || (exports.hapibooDecorators = hapibooDecorators = {}));
@@ -0,0 +1,15 @@
1
+ import { IFluxIndexInfo, IFluxColumnInfo, IFluxIndexData, IFluxDataModel, IFluxDataModelDefinition, IFluxDataModelWriter, IFluxDataModelReader, IFluxDBFilter, IFluxDBCondition, IFluxDBSubCondition, IFluxObject, IFluxModule, IDBProviderFlux } from './interfaces';
2
+ import { FluxColumn, FluxColumnPrimary, FluxDBFilterLogic, FluxDBFilterOperator, FluxDBFilterOperatorValues, FluxDBFilterOperatorCollection } from './types';
3
+ import { FluxTable, FluxIndex, FluxExposedColumn, FluxIdentifier } from './decorators';
4
+ import { fluxApplication } from './module';
5
+ import { conditionBuilder } from './conditions';
6
+ export { FluxColumn, FluxColumnPrimary };
7
+ export { IFluxIndexInfo, IFluxColumnInfo, IFluxIndexData };
8
+ export { IFluxDataModel, IFluxDataModelDefinition, IFluxDataModelWriter, IFluxDataModelReader };
9
+ export { IFluxDBFilter, IFluxDBCondition, IFluxDBSubCondition };
10
+ export { FluxDBFilterLogic, FluxDBFilterOperator, FluxDBFilterOperatorValues, FluxDBFilterOperatorCollection };
11
+ export { IFluxObject, IFluxModule };
12
+ export { IDBProviderFlux };
13
+ export { conditionBuilder };
14
+ export { fluxApplication };
15
+ export { FluxTable, FluxIndex, FluxExposedColumn, FluxIdentifier };
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FluxIdentifier = exports.FluxExposedColumn = exports.FluxIndex = exports.FluxTable = exports.fluxApplication = exports.conditionBuilder = exports.FluxColumnPrimary = exports.FluxColumn = void 0;
4
+ const types_1 = require("./types");
5
+ Object.defineProperty(exports, "FluxColumn", { enumerable: true, get: function () { return types_1.FluxColumn; } });
6
+ Object.defineProperty(exports, "FluxColumnPrimary", { enumerable: true, get: function () { return types_1.FluxColumnPrimary; } });
7
+ const decorators_1 = require("./decorators");
8
+ Object.defineProperty(exports, "FluxTable", { enumerable: true, get: function () { return decorators_1.FluxTable; } });
9
+ Object.defineProperty(exports, "FluxIndex", { enumerable: true, get: function () { return decorators_1.FluxIndex; } });
10
+ Object.defineProperty(exports, "FluxExposedColumn", { enumerable: true, get: function () { return decorators_1.FluxExposedColumn; } });
11
+ Object.defineProperty(exports, "FluxIdentifier", { enumerable: true, get: function () { return decorators_1.FluxIdentifier; } });
12
+ const module_1 = require("./module");
13
+ Object.defineProperty(exports, "fluxApplication", { enumerable: true, get: function () { return module_1.fluxApplication; } });
14
+ const conditions_1 = require("./conditions");
15
+ Object.defineProperty(exports, "conditionBuilder", { enumerable: true, get: function () { return conditions_1.conditionBuilder; } });
@@ -0,0 +1,59 @@
1
+ import { Dictionary, IResponsePromise, IResponsePromiseVoid } from '@hapiboo/core';
2
+ import { FluxColumnPrimary, FluxDBFilterLogic, FluxDBFilterOperator, FluxDBFilterOperatorCollection, FluxDBFilterOperatorValues, FluxObjectCreator } from './types';
3
+ export interface IFluxColumnInfo {
4
+ name: string;
5
+ type: FluxColumnPrimary;
6
+ }
7
+ export interface IFluxIndexInfo {
8
+ name: string;
9
+ key: IFluxColumnInfo;
10
+ sort: IFluxColumnInfo | undefined;
11
+ }
12
+ export interface IFluxIndexData {
13
+ key: string | number;
14
+ sort: string | number | undefined;
15
+ }
16
+ export interface IFluxDataModel {
17
+ table: string;
18
+ id: string;
19
+ }
20
+ export interface IFluxDataModelDefinition extends IFluxDataModel {
21
+ indexes: IFluxIndexInfo[];
22
+ }
23
+ export interface IFluxDataModelWriter extends IFluxDataModel {
24
+ columns: IFluxColumnInfo[];
25
+ values: Dictionary<string, string | number | boolean | Buffer | object[] | object>;
26
+ }
27
+ export interface IFluxDataModelReader<T> extends IFluxDataModel {
28
+ clone(model: T): T;
29
+ }
30
+ export interface IFluxDBCondition {
31
+ column: string;
32
+ operator: FluxDBFilterOperator | FluxDBFilterOperatorValues | FluxDBFilterOperatorCollection;
33
+ value: string | number | boolean | string[] | number[] | undefined;
34
+ }
35
+ export interface IFluxDBSubCondition {
36
+ conditions: (IFluxDBCondition | IFluxDBSubCondition)[];
37
+ logic: FluxDBFilterLogic;
38
+ }
39
+ export interface IFluxDBFilter {
40
+ condition: IFluxDBCondition | IFluxDBSubCondition;
41
+ }
42
+ export interface IDBProviderFlux {
43
+ init(model: IFluxDataModelDefinition): IResponsePromiseVoid;
44
+ read<T extends IFluxObject>(creator: IFluxDataModelReader<T>): IResponsePromise<T>;
45
+ array<T extends IFluxObject>(creator: IFluxDataModelReader<T>, filter: IFluxDBFilter | undefined, queryLimit: number | undefined): IResponsePromise<T[]>;
46
+ query<T extends IFluxObject>(creator: IFluxDataModelReader<T>, info: IFluxIndexInfo, data: IFluxIndexData, filter: IFluxDBFilter | undefined, queryLimit: number | undefined): IResponsePromise<T[]>;
47
+ create<T extends IFluxObject>(model: IFluxDataModelWriter, item: T): IResponsePromise<T>;
48
+ update<T extends IFluxObject>(model: IFluxDataModelWriter, item: T): IResponsePromise<T>;
49
+ delete(model: IFluxDataModel): IResponsePromiseVoid;
50
+ }
51
+ export interface IFluxObject {
52
+ clone(model: this): this;
53
+ }
54
+ export interface IFluxModule {
55
+ name: string;
56
+ models: FluxObjectCreator[];
57
+ initialize(): void;
58
+ start?: () => IResponsePromiseVoid;
59
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { IResponsePromiseVoid, IResponsePromise } from '@hapiboo/core';
2
+ import { IDBProviderFlux, IFluxModule, IFluxObject, IFluxDBFilter, IFluxIndexData } from './interfaces';
3
+ import { FluxObjectCreator } from './types';
4
+ export declare namespace fluxApplication {
5
+ function registerModule(module: IFluxModule): void;
6
+ function initialize(dbProvider: IDBProviderFlux): void;
7
+ function start(): IResponsePromiseVoid;
8
+ namespace repository {
9
+ function initializeModels(): IResponsePromiseVoid;
10
+ function deleteModel(source: FluxObjectCreator, identifier: string): IResponsePromiseVoid;
11
+ function createModel<T extends IFluxObject>(source: FluxObjectCreator, item: T): IResponsePromise<T>;
12
+ function updateModel<T extends IFluxObject>(source: FluxObjectCreator, item: T): IResponsePromise<T>;
13
+ function readModel<T extends IFluxObject>(source: FluxObjectCreator, identifier: string): IResponsePromise<T>;
14
+ function readArray<T extends IFluxObject>(source: FluxObjectCreator, filter: IFluxDBFilter | undefined, queryLimit: number | undefined): IResponsePromise<T[]>;
15
+ function queryArray<T extends IFluxObject>(source: FluxObjectCreator, index: string, data: IFluxIndexData, filter: IFluxDBFilter | undefined, queryLimit: number | undefined): IResponsePromise<T[]>;
16
+ }
17
+ }
package/dist/module.js ADDED
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fluxApplication = void 0;
4
+ const core_1 = require("@hapiboo/core");
5
+ const decorators_1 = require("./decorators");
6
+ var fluxApplication;
7
+ (function (fluxApplication) {
8
+ const models = [];
9
+ const modules = [];
10
+ let _dbProvider;
11
+ function registerModule(module) {
12
+ modules.push(module);
13
+ console.info(`Registering module: ${module.name} with ${module.models.length} models.`);
14
+ module.models.forEach((model) => {
15
+ models.push(model);
16
+ objects.bootstrap(model);
17
+ });
18
+ }
19
+ fluxApplication.registerModule = registerModule;
20
+ function initialize(dbProvider) {
21
+ _dbProvider = dbProvider;
22
+ console.info(`Initializing application with ${modules.length} modules and ${models.length} models.`);
23
+ modules.forEach((module) => {
24
+ module.initialize();
25
+ });
26
+ }
27
+ fluxApplication.initialize = initialize;
28
+ function start() {
29
+ return core_1.promise.createDelayedVoidPromise((resolve, reject) => {
30
+ console.info('Starting application...');
31
+ core_1.promise.checkVoid(repository.initializeModels(), reject)
32
+ .then(() => {
33
+ core_1.promise.resolveVoid(startModule([...modules]), resolve, reject);
34
+ });
35
+ });
36
+ }
37
+ fluxApplication.start = start;
38
+ function startModule(modules) {
39
+ return core_1.promise.createDelayedVoidPromise((resolve, reject) => {
40
+ if (modules.length === 0) {
41
+ resolve();
42
+ }
43
+ else {
44
+ const module = modules.pop();
45
+ if (module.start) {
46
+ console.info(`Starting module: ${module.name}...`);
47
+ core_1.promise.checkVoid(module.start(), reject)
48
+ .then(() => {
49
+ core_1.promise.resolveVoid(startModule(modules), resolve, reject);
50
+ });
51
+ }
52
+ else {
53
+ core_1.promise.resolveVoid(startModule(modules), resolve, reject);
54
+ }
55
+ }
56
+ });
57
+ }
58
+ let objects;
59
+ (function (objects) {
60
+ const modelCache = new Map();
61
+ const columnCache = new Map();
62
+ const idCache = new Map();
63
+ const indexesCache = new Map();
64
+ function getValue(source, propertyKey) {
65
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
+ return source[propertyKey];
67
+ }
68
+ function getModel(source) {
69
+ const model = modelCache.get(source);
70
+ if (!model) {
71
+ throw new Error(`Model definition for ${source.name} not found.`);
72
+ }
73
+ return model;
74
+ }
75
+ objects.getModel = getModel;
76
+ function bootstrap(source) {
77
+ //table+indexes TABLE
78
+ //table+clone READ/QUERY ARRAY
79
+ //table+id+columns+values x2 CREATE/UPDATE
80
+ //table+id+clone READ ONE
81
+ //table+id DELETE
82
+ if (modelCache.has(source))
83
+ return;
84
+ const tableName = decorators_1.hapibooDecorators.getTableName(source);
85
+ const columnsInfo = decorators_1.hapibooDecorators.getColumnsInfo(source);
86
+ const identifierKey = decorators_1.hapibooDecorators.getIdentifierProperty(source);
87
+ const indexesInfo = decorators_1.hapibooDecorators.getIndexesInfo(source);
88
+ const indexes = indexesInfo.map((index) => {
89
+ const kCol = columnsInfo.find(col => col.info.name === index.key);
90
+ const sCOl = index.sort ? columnsInfo.find(col => col.info.name === index.sort) : undefined;
91
+ if (!kCol) {
92
+ throw new Error(`Index key column '${index.key}' not found in model '${source.name}'.`);
93
+ }
94
+ if (index.sort && !sCOl) {
95
+ throw new Error(`Index sort column '${index.sort}' not found in model '${source.name}'.`);
96
+ }
97
+ return {
98
+ name: index.name,
99
+ key: kCol.info,
100
+ sort: sCOl?.info
101
+ };
102
+ });
103
+ modelCache.set(source, { table: tableName, id: '' });
104
+ columnCache.set(source, columnsInfo);
105
+ idCache.set(source, identifierKey);
106
+ indexesCache.set(source, indexes);
107
+ }
108
+ objects.bootstrap = bootstrap;
109
+ function getModelDefinition(source) {
110
+ const model = getModel(source);
111
+ return {
112
+ table: model.table,
113
+ id: model.id,
114
+ indexes: indexesCache.get(source) || []
115
+ };
116
+ }
117
+ objects.getModelDefinition = getModelDefinition;
118
+ function getModelWriter(source, item) {
119
+ const model = getModel(source);
120
+ const columns = columnCache.get(source) || [];
121
+ const identifierKey = idCache.get(source) || 'id';
122
+ const values = new core_1.Dictionary();
123
+ columns.forEach((col) => {
124
+ const value = getValue(item, col.propertyKey);
125
+ if (value !== undefined) {
126
+ values.push(col.info.name, value);
127
+ }
128
+ });
129
+ return {
130
+ table: model.table,
131
+ id: getValue(item, identifierKey),
132
+ columns: columns.map(col => col.info),
133
+ values: values
134
+ };
135
+ }
136
+ objects.getModelWriter = getModelWriter;
137
+ function getModelReader(source, identifier) {
138
+ const model = getModel(source);
139
+ return {
140
+ table: model.table,
141
+ id: identifier,
142
+ clone: (m) => source.prototype.clone.call(new source(), m)
143
+ };
144
+ }
145
+ objects.getModelReader = getModelReader;
146
+ function getIndexInfo(source, index) {
147
+ const indexes = indexesCache.get(source);
148
+ if (!indexes) {
149
+ throw new Error(`Indexes for model '${source.name}' not found.`);
150
+ }
151
+ const idx = indexes.find(idx => idx.name === index);
152
+ if (!idx) {
153
+ throw new Error(`Index '${index}' for model '${source.name}' not found.`);
154
+ }
155
+ return idx;
156
+ }
157
+ objects.getIndexInfo = getIndexInfo;
158
+ })(objects || (objects = {}));
159
+ let repository;
160
+ (function (repository) {
161
+ function initializeModels() {
162
+ return core_1.promise.createDelayedVoidPromise((resolve, reject) => {
163
+ const initPromises = [];
164
+ core_1.promise.tryMethod(() => {
165
+ for (const provider of models) {
166
+ const modelDef = objects.getModelDefinition(provider);
167
+ initPromises.push(_dbProvider.init(modelDef));
168
+ }
169
+ }, reject).then(() => {
170
+ core_1.promise.resolveVoid(core_1.promise.all(initPromises), resolve, reject);
171
+ });
172
+ });
173
+ }
174
+ repository.initializeModels = initializeModels;
175
+ function deleteModel(source, identifier) {
176
+ return core_1.promise.createDelayedVoidPromise((resolve, reject) => {
177
+ core_1.promise.tryMethod(() => {
178
+ return objects.getModel(source);
179
+ }, reject).then((model) => {
180
+ core_1.promise.resolveVoid(_dbProvider.delete({ table: model.table, id: identifier }), resolve, reject);
181
+ });
182
+ });
183
+ }
184
+ repository.deleteModel = deleteModel;
185
+ function createModel(source, item) {
186
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
187
+ core_1.promise.tryMethod(() => {
188
+ const model = objects.getModelWriter(source, item);
189
+ return model;
190
+ }, reject).then((model) => {
191
+ core_1.promise.resolve(_dbProvider.create(model, item), resolve, reject);
192
+ });
193
+ });
194
+ }
195
+ repository.createModel = createModel;
196
+ function updateModel(source, item) {
197
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
198
+ core_1.promise.tryMethod(() => {
199
+ const model = objects.getModelWriter(source, item);
200
+ return model;
201
+ }, reject).then((model) => {
202
+ core_1.promise.resolve(_dbProvider.update(model, item), resolve, reject);
203
+ });
204
+ });
205
+ }
206
+ repository.updateModel = updateModel;
207
+ function readModel(source, identifier) {
208
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
209
+ core_1.promise.tryMethod(() => {
210
+ return objects.getModelReader(source, identifier);
211
+ }, reject).then((reader) => {
212
+ core_1.promise.resolve(_dbProvider.read(reader), resolve, reject);
213
+ });
214
+ });
215
+ }
216
+ repository.readModel = readModel;
217
+ function readArray(source, filter, queryLimit) {
218
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
219
+ core_1.promise.tryMethod(() => {
220
+ return objects.getModelReader(source, '');
221
+ }, reject).then((reader) => {
222
+ core_1.promise.resolve(_dbProvider.array(reader, filter, queryLimit), resolve, reject);
223
+ });
224
+ });
225
+ }
226
+ repository.readArray = readArray;
227
+ function queryArray(source, index, data, filter, queryLimit) {
228
+ return core_1.promise.createDelayedPromise((resolve, reject) => {
229
+ core_1.promise.tryMethod(() => {
230
+ return { reader: objects.getModelReader(source, ''), info: objects.getIndexInfo(source, index) };
231
+ }, reject).then((information) => {
232
+ core_1.promise.resolve(_dbProvider.query(information.reader, information.info, data, filter, queryLimit), resolve, reject);
233
+ });
234
+ });
235
+ }
236
+ repository.queryArray = queryArray;
237
+ })(repository = fluxApplication.repository || (fluxApplication.repository = {}));
238
+ })(fluxApplication || (exports.fluxApplication = fluxApplication = {}));
@@ -0,0 +1,20 @@
1
+ import { IFluxObject } from './interfaces';
2
+ export declare const FluxColumnPrimary: {
3
+ readonly String: "S";
4
+ readonly Number: "N";
5
+ };
6
+ export declare const FluxColumn: {
7
+ readonly String: "S";
8
+ readonly Number: "N";
9
+ readonly Boolean: "BOOL";
10
+ readonly Binary: "B";
11
+ readonly List: "L";
12
+ readonly Object: "M";
13
+ };
14
+ export type FluxColumnPrimary = typeof FluxColumnPrimary[keyof typeof FluxColumnPrimary];
15
+ export type FluxColumn = typeof FluxColumn[keyof typeof FluxColumn];
16
+ export type FluxDBFilterOperator = '=' | '<>' | 'EXISTS' | 'NOT EXISTS';
17
+ export type FluxDBFilterOperatorValues = '<' | '<=' | '>' | '>=';
18
+ export type FluxDBFilterOperatorCollection = 'IN';
19
+ export type FluxDBFilterLogic = 'AND' | 'OR';
20
+ export type FluxObjectCreator<T extends IFluxObject = IFluxObject> = new () => T;
package/dist/types.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FluxColumn = exports.FluxColumnPrimary = void 0;
4
+ exports.FluxColumnPrimary = {
5
+ String: 'S',
6
+ Number: 'N',
7
+ };
8
+ exports.FluxColumn = {
9
+ String: 'S',
10
+ Number: 'N',
11
+ Boolean: 'BOOL',
12
+ Binary: 'B',
13
+ List: 'L',
14
+ Object: 'M',
15
+ };
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@hapiboo/flux",
3
+ "version": "1.0.0",
4
+ "description": "MK13 Studio Hapiboo Flux - Modular Application Services",
5
+ "author": "MK13 Studio",
6
+ "license": "ISC",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "dependencies": {
16
+ "@hapiboo/core": "^3.0.1",
17
+ "reflect-metadata": "^0.2.2"
18
+ },
19
+ "devDependencies": {
20
+ "@typescript-eslint/eslint-plugin": "^8.51.0",
21
+ "@typescript-eslint/parser": "^8.51.0",
22
+ "eslint": "^9.39.2",
23
+ "typescript": "^5.9.3",
24
+ "typescript-eslint": "^8.51.0"
25
+ },
26
+ "scripts": {
27
+ "publish-check": "bash ../../scripts/publish.sh ./",
28
+ "ci:publish-prepare": "rm -f pnpm-lock.yaml && rm -rf node_modules dist && pnpm install --ignore-workspace --no-frozen-lockfile && eslint 'src/*.ts' && echo \"Linter OK\" && tsc && echo \"Build OK\"",
29
+ "ci:publish": "pnpm ci:publish-prepare && pnpm publish-check"
30
+ }
31
+ }