json-fs-query 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.
- package/.browserslistrc +1 -0
- package/.nvmrc +1 -0
- package/LICENSE +674 -0
- package/MAIN.md +15 -0
- package/README.md +63 -0
- package/babel.config.js +3 -0
- package/build-tools.config.json +30 -0
- package/dist/data/introspect/create.d.ts +11 -0
- package/dist/data/introspect/create.js +45 -0
- package/dist/data/introspect/create.min.js +1 -0
- package/dist/data/introspect/definitions/field.d.ts +28 -0
- package/dist/data/introspect/definitions/field.js +36 -0
- package/dist/data/introspect/definitions/field.min.js +1 -0
- package/dist/data/introspect/definitions/key.d.ts +26 -0
- package/dist/data/introspect/definitions/key.js +53 -0
- package/dist/data/introspect/definitions/key.min.js +1 -0
- package/dist/data/introspect/definitions/keyReference.d.ts +18 -0
- package/dist/data/introspect/definitions/keyReference.js +20 -0
- package/dist/data/introspect/definitions/keyReference.min.js +1 -0
- package/dist/data/introspect/definitions/record.d.ts +26 -0
- package/dist/data/introspect/definitions/record.js +32 -0
- package/dist/data/introspect/definitions/record.min.js +1 -0
- package/dist/data/introspect/describe.d.ts +2 -0
- package/dist/data/introspect/describe.js +15 -0
- package/dist/data/introspect/describe.min.js +1 -0
- package/dist/data/introspect/drop.d.ts +2 -0
- package/dist/data/introspect/drop.js +37 -0
- package/dist/data/introspect/drop.min.js +1 -0
- package/dist/data/introspect/index.d.ts +8 -0
- package/dist/data/introspect/index.js +30 -0
- package/dist/data/introspect/index.min.js +1 -0
- package/dist/data/introspect/policies/foreignKeyExists.d.ts +9 -0
- package/dist/data/introspect/policies/foreignKeyExists.js +25 -0
- package/dist/data/introspect/policies/foreignKeyExists.min.js +1 -0
- package/dist/data/introspect/policies/keyGenerate.d.ts +2 -0
- package/dist/data/introspect/policies/keyGenerate.js +17 -0
- package/dist/data/introspect/policies/keyGenerate.min.js +1 -0
- package/dist/data/introspect/policies/keyUnique.d.ts +2 -0
- package/dist/data/introspect/policies/keyUnique.js +21 -0
- package/dist/data/introspect/policies/keyUnique.min.js +1 -0
- package/dist/data/introspect/policies/typeCheck.d.ts +12 -0
- package/dist/data/introspect/policies/typeCheck.js +57 -0
- package/dist/data/introspect/policies/typeCheck.min.js +1 -0
- package/dist/data/introspect/policies/typeEnum.d.ts +2 -0
- package/dist/data/introspect/policies/typeEnum.js +14 -0
- package/dist/data/introspect/policies/typeEnum.min.js +1 -0
- package/dist/data/introspect/policies/useDefault.d.ts +2 -0
- package/dist/data/introspect/policies/useDefault.js +13 -0
- package/dist/data/introspect/policies/useDefault.min.js +1 -0
- package/dist/data/queries/deleteEntity.d.ts +2 -0
- package/dist/data/queries/deleteEntity.js +79 -0
- package/dist/data/queries/deleteEntity.min.js +1 -0
- package/dist/data/queries/groupBy.d.ts +2 -0
- package/dist/data/queries/groupBy.js +22 -0
- package/dist/data/queries/groupBy.min.js +1 -0
- package/dist/data/queries/insertEntity.d.ts +2 -0
- package/dist/data/queries/insertEntity.js +115 -0
- package/dist/data/queries/insertEntity.min.js +1 -0
- package/dist/data/queries/joinEntity.d.ts +2 -0
- package/dist/data/queries/joinEntity.js +27 -0
- package/dist/data/queries/joinEntity.min.js +1 -0
- package/dist/data/queries/mergeJoins.d.ts +2 -0
- package/dist/data/queries/mergeJoins.js +19 -0
- package/dist/data/queries/mergeJoins.min.js +1 -0
- package/dist/data/queries/parser.d.ts +2 -0
- package/dist/data/queries/parser.js +30 -0
- package/dist/data/queries/parser.min.js +1 -0
- package/dist/data/queries/query.d.ts +2 -0
- package/dist/data/queries/query.js +18 -0
- package/dist/data/queries/query.min.js +1 -0
- package/dist/data/queries/readEntity.d.ts +2 -0
- package/dist/data/queries/readEntity.js +14 -0
- package/dist/data/queries/readEntity.min.js +1 -0
- package/dist/data/queries/sortBy.d.ts +2 -0
- package/dist/data/queries/sortBy.js +25 -0
- package/dist/data/queries/sortBy.min.js +1 -0
- package/dist/data/queries/updateEntity.d.ts +2 -0
- package/dist/data/queries/updateEntity.js +164 -0
- package/dist/data/queries/updateEntity.min.js +1 -0
- package/dist/data/queries/where.d.ts +7 -0
- package/dist/data/queries/where.js +56 -0
- package/dist/data/queries/where.min.js +1 -0
- package/dist/data/utilities/deregisterRecord.d.ts +8 -0
- package/dist/data/utilities/deregisterRecord.js +34 -0
- package/dist/data/utilities/deregisterRecord.min.js +1 -0
- package/dist/data/utilities/getConditionIndexedList.d.ts +3 -0
- package/dist/data/utilities/getConditionIndexedList.js +47 -0
- package/dist/data/utilities/getConditionIndexedList.min.js +1 -0
- package/dist/data/utilities/getJoinIndexedList.d.ts +3 -0
- package/dist/data/utilities/getJoinIndexedList.js +59 -0
- package/dist/data/utilities/getJoinIndexedList.min.js +1 -0
- package/dist/data/utilities/getMatchingIndexes.d.ts +2 -0
- package/dist/data/utilities/getMatchingIndexes.js +28 -0
- package/dist/data/utilities/getMatchingIndexes.min.js +1 -0
- package/dist/data/utilities/matchIndexedJoins.d.ts +2 -0
- package/dist/data/utilities/matchIndexedJoins.js +61 -0
- package/dist/data/utilities/matchIndexedJoins.min.js +1 -0
- package/dist/data/utilities/mergeJoin.d.ts +2 -0
- package/dist/data/utilities/mergeJoin.js +44 -0
- package/dist/data/utilities/mergeJoin.min.js +1 -0
- package/dist/data/utilities/parsers/findCommand.d.ts +10 -0
- package/dist/data/utilities/parsers/findCommand.js +25 -0
- package/dist/data/utilities/parsers/findCommand.min.js +1 -0
- package/dist/data/utilities/parsers/findConditions.d.ts +15 -0
- package/dist/data/utilities/parsers/findConditions.js +28 -0
- package/dist/data/utilities/parsers/findConditions.min.js +1 -0
- package/dist/data/utilities/parsers/findGroupBy.d.ts +9 -0
- package/dist/data/utilities/parsers/findGroupBy.js +22 -0
- package/dist/data/utilities/parsers/findGroupBy.min.js +1 -0
- package/dist/data/utilities/parsers/findInsertValues.d.ts +13 -0
- package/dist/data/utilities/parsers/findInsertValues.js +34 -0
- package/dist/data/utilities/parsers/findInsertValues.min.js +1 -0
- package/dist/data/utilities/parsers/findJoinClauses.d.ts +13 -0
- package/dist/data/utilities/parsers/findJoinClauses.js +27 -0
- package/dist/data/utilities/parsers/findJoinClauses.min.js +1 -0
- package/dist/data/utilities/parsers/findJoinEntity.d.ts +9 -0
- package/dist/data/utilities/parsers/findJoinEntity.js +22 -0
- package/dist/data/utilities/parsers/findJoinEntity.min.js +1 -0
- package/dist/data/utilities/parsers/findLimit.d.ts +9 -0
- package/dist/data/utilities/parsers/findLimit.js +22 -0
- package/dist/data/utilities/parsers/findLimit.min.js +1 -0
- package/dist/data/utilities/parsers/findMergeJoins.d.ts +12 -0
- package/dist/data/utilities/parsers/findMergeJoins.js +26 -0
- package/dist/data/utilities/parsers/findMergeJoins.min.js +1 -0
- package/dist/data/utilities/parsers/findOffset.d.ts +9 -0
- package/dist/data/utilities/parsers/findOffset.js +22 -0
- package/dist/data/utilities/parsers/findOffset.min.js +1 -0
- package/dist/data/utilities/parsers/findSelects.d.ts +12 -0
- package/dist/data/utilities/parsers/findSelects.js +30 -0
- package/dist/data/utilities/parsers/findSelects.min.js +1 -0
- package/dist/data/utilities/parsers/findSortClauses.d.ts +12 -0
- package/dist/data/utilities/parsers/findSortClauses.js +30 -0
- package/dist/data/utilities/parsers/findSortClauses.min.js +1 -0
- package/dist/data/utilities/parsers/findUpdateValues.d.ts +15 -0
- package/dist/data/utilities/parsers/findUpdateValues.js +34 -0
- package/dist/data/utilities/parsers/findUpdateValues.min.js +1 -0
- package/dist/data/utilities/parsers/isEntityProperty.d.ts +2 -0
- package/dist/data/utilities/parsers/isEntityProperty.js +8 -0
- package/dist/data/utilities/parsers/isEntityProperty.min.js +1 -0
- package/dist/data/utilities/parsers/parseLiteralValue.d.ts +12 -0
- package/dist/data/utilities/parsers/parseLiteralValue.js +34 -0
- package/dist/data/utilities/parsers/parseLiteralValue.min.js +1 -0
- package/dist/data/utilities/parsers/parseQuery.d.ts +33 -0
- package/dist/data/utilities/parsers/parseQuery.js +51 -0
- package/dist/data/utilities/parsers/parseQuery.min.js +1 -0
- package/dist/data/utilities/parsers/removeFromQuery.d.ts +2 -0
- package/dist/data/utilities/parsers/removeFromQuery.js +8 -0
- package/dist/data/utilities/parsers/removeFromQuery.min.js +1 -0
- package/dist/data/utilities/parsers/splitEntityProperty.d.ts +5 -0
- package/dist/data/utilities/parsers/splitEntityProperty.js +23 -0
- package/dist/data/utilities/parsers/splitEntityProperty.min.js +1 -0
- package/dist/data/utilities/parsers/splitQueries.d.ts +2 -0
- package/dist/data/utilities/parsers/splitQueries.js +11 -0
- package/dist/data/utilities/parsers/splitQueries.min.js +1 -0
- package/dist/data/utilities/reconcileJoin.d.ts +2 -0
- package/dist/data/utilities/reconcileJoin.js +26 -0
- package/dist/data/utilities/reconcileJoin.min.js +1 -0
- package/dist/data/utilities/reconcileJoins.d.ts +2 -0
- package/dist/data/utilities/reconcileJoins.js +27 -0
- package/dist/data/utilities/reconcileJoins.min.js +1 -0
- package/dist/data/utilities/registerRecord.d.ts +8 -0
- package/dist/data/utilities/registerRecord.js +67 -0
- package/dist/data/utilities/registerRecord.min.js +1 -0
- package/dist/data/utilities/removeFromIndex.d.ts +14 -0
- package/dist/data/utilities/removeFromIndex.js +46 -0
- package/dist/data/utilities/removeFromIndex.min.js +1 -0
- package/dist/data/utilities/restrictIndexedList.d.ts +2 -0
- package/dist/data/utilities/restrictIndexedList.js +45 -0
- package/dist/data/utilities/restrictIndexedList.min.js +1 -0
- package/dist/data/utilities/retrieveFile.d.ts +2 -0
- package/dist/data/utilities/retrieveFile.js +28 -0
- package/dist/data/utilities/retrieveFile.min.js +1 -0
- package/dist/data/utilities/retrieveIndexes.d.ts +2 -0
- package/dist/data/utilities/retrieveIndexes.js +24 -0
- package/dist/data/utilities/retrieveIndexes.min.js +1 -0
- package/dist/data/utilities/retrieveRecord.d.ts +2 -0
- package/dist/data/utilities/retrieveRecord.js +9 -0
- package/dist/data/utilities/retrieveRecord.min.js +1 -0
- package/dist/data/utilities/retrieveRecords.d.ts +2 -0
- package/dist/data/utilities/retrieveRecords.js +21 -0
- package/dist/data/utilities/retrieveRecords.min.js +1 -0
- package/dist/data/utilities/runQuery.d.ts +2 -0
- package/dist/data/utilities/runQuery.js +72 -0
- package/dist/data/utilities/runQuery.min.js +1 -0
- package/dist/data/utilities/updateIndex.d.ts +17 -0
- package/dist/data/utilities/updateIndex.js +56 -0
- package/dist/data/utilities/updateIndex.min.js +1 -0
- package/dist/data/utilities/useJoinClause.d.ts +6 -0
- package/dist/data/utilities/useJoinClause.js +51 -0
- package/dist/data/utilities/useJoinClause.min.js +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +35 -0
- package/dist/index.min.js +1 -0
- package/gulpfile.mjs +15 -0
- package/package.json +44 -0
- package/src/data/introspect/create.test.js +67 -0
- package/src/data/introspect/create.ts +29 -0
- package/src/data/introspect/definitions/field.test.js +23 -0
- package/src/data/introspect/definitions/field.ts +48 -0
- package/src/data/introspect/definitions/key.test.js +100 -0
- package/src/data/introspect/definitions/key.ts +64 -0
- package/src/data/introspect/definitions/keyReference.test.js +8 -0
- package/src/data/introspect/definitions/keyReference.ts +23 -0
- package/src/data/introspect/definitions/record.ts +42 -0
- package/src/data/introspect/describe.test.js +36 -0
- package/src/data/introspect/describe.ts +9 -0
- package/src/data/introspect/drop.test.js +77 -0
- package/src/data/introspect/drop.ts +20 -0
- package/src/data/introspect/index.ts +8 -0
- package/src/data/introspect/policies/foreignKeyExists.test.js +44 -0
- package/src/data/introspect/policies/foreignKeyExists.ts +15 -0
- package/src/data/introspect/policies/keyGenerate.ts +11 -0
- package/src/data/introspect/policies/keyUnique.ts +11 -0
- package/src/data/introspect/policies/typeCheck.test.js +84 -0
- package/src/data/introspect/policies/typeCheck.ts +49 -0
- package/src/data/introspect/policies/typeEnum.ts +6 -0
- package/src/data/introspect/policies/useDefault.ts +6 -0
- package/src/data/queries/deleteEntity.test.js +86 -0
- package/src/data/queries/deleteEntity.ts +56 -0
- package/src/data/queries/groupBy.test.js +135 -0
- package/src/data/queries/groupBy.ts +16 -0
- package/src/data/queries/insertEntity.test.js +156 -0
- package/src/data/queries/insertEntity.ts +113 -0
- package/src/data/queries/joinEntity.test.js +109 -0
- package/src/data/queries/joinEntity.ts +20 -0
- package/src/data/queries/mergeJoins.test.js +174 -0
- package/src/data/queries/mergeJoins.ts +13 -0
- package/src/data/queries/parser.test.js +343 -0
- package/src/data/queries/parser.ts +24 -0
- package/src/data/queries/query.test.js +233 -0
- package/src/data/queries/query.ts +12 -0
- package/src/data/queries/readEntity.test.js +85 -0
- package/src/data/queries/readEntity.ts +8 -0
- package/src/data/queries/sortBy.test.js +131 -0
- package/src/data/queries/sortBy.ts +18 -0
- package/src/data/queries/updateEntity.test.js +228 -0
- package/src/data/queries/updateEntity.ts +162 -0
- package/src/data/queries/where.test.js +129 -0
- package/src/data/queries/where.ts +54 -0
- package/src/data/utilities/deregisterRecord.test.js +26 -0
- package/src/data/utilities/deregisterRecord.ts +24 -0
- package/src/data/utilities/getConditionIndexedList.ts +43 -0
- package/src/data/utilities/getJoinIndexedList.ts +53 -0
- package/src/data/utilities/getMatchingIndexes.ts +21 -0
- package/src/data/utilities/matchIndexedJoins.ts +45 -0
- package/src/data/utilities/mergeJoin.test.js +102 -0
- package/src/data/utilities/mergeJoin.ts +28 -0
- package/src/data/utilities/parsers/findCommand.ts +25 -0
- package/src/data/utilities/parsers/findConditions.test.js +38 -0
- package/src/data/utilities/parsers/findConditions.ts +32 -0
- package/src/data/utilities/parsers/findGroupBy.ts +20 -0
- package/src/data/utilities/parsers/findInsertValues.test.js +26 -0
- package/src/data/utilities/parsers/findInsertValues.ts +32 -0
- package/src/data/utilities/parsers/findJoinClauses.ts +29 -0
- package/src/data/utilities/parsers/findJoinEntity.ts +20 -0
- package/src/data/utilities/parsers/findLimit.ts +20 -0
- package/src/data/utilities/parsers/findMergeJoins.ts +27 -0
- package/src/data/utilities/parsers/findOffset.ts +20 -0
- package/src/data/utilities/parsers/findSelects.ts +31 -0
- package/src/data/utilities/parsers/findSortClauses.ts +31 -0
- package/src/data/utilities/parsers/findUpdateValues.test.js +37 -0
- package/src/data/utilities/parsers/findUpdateValues.ts +32 -0
- package/src/data/utilities/parsers/isEntityProperty.ts +1 -0
- package/src/data/utilities/parsers/parseLiteralValue.test.js +41 -0
- package/src/data/utilities/parsers/parseLiteralValue.ts +29 -0
- package/src/data/utilities/parsers/parseQuery.ts +73 -0
- package/src/data/utilities/parsers/removeFromQuery.ts +1 -0
- package/src/data/utilities/parsers/splitEntityProperty.test.js +8 -0
- package/src/data/utilities/parsers/splitEntityProperty.ts +17 -0
- package/src/data/utilities/parsers/splitQueries.test.js +33 -0
- package/src/data/utilities/parsers/splitQueries.ts +4 -0
- package/src/data/utilities/reconcileJoin.test.js +38 -0
- package/src/data/utilities/reconcileJoin.ts +23 -0
- package/src/data/utilities/reconcileJoins.test.js +160 -0
- package/src/data/utilities/reconcileJoins.ts +15 -0
- package/src/data/utilities/registerRecord.test.js +44 -0
- package/src/data/utilities/registerRecord.ts +44 -0
- package/src/data/utilities/removeFromIndex.test.js +44 -0
- package/src/data/utilities/removeFromIndex.ts +34 -0
- package/src/data/utilities/restrictIndexedList.ts +38 -0
- package/src/data/utilities/retrieveFile.test.js +49 -0
- package/src/data/utilities/retrieveFile.ts +19 -0
- package/src/data/utilities/retrieveIndexes.ts +17 -0
- package/src/data/utilities/retrieveRecord.ts +3 -0
- package/src/data/utilities/retrieveRecords.test.js +223 -0
- package/src/data/utilities/retrieveRecords.ts +16 -0
- package/src/data/utilities/runQuery.test.js +88 -0
- package/src/data/utilities/runQuery.ts +75 -0
- package/src/data/utilities/updateIndex.test.js +44 -0
- package/src/data/utilities/updateIndex.ts +45 -0
- package/src/data/utilities/useJoinClause.test.js +94 -0
- package/src/data/utilities/useJoinClause.ts +44 -0
- package/src/global.d.ts +1 -0
- package/src/index.test.js +52 -0
- package/src/index.ts +17 -0
- package/test-data/__RECORDS.json +32 -0
- package/test-data/__indexes/exercise_muscle/fk_exercise_id.json +14 -0
- package/test-data/__indexes/exercise_muscle/fk_muscle_id.json +14 -0
- package/test-data/__indexes/exercise_muscle/pk__id.json +14 -0
- package/test-data/__indexes/exercises/pk__id.json +14 -0
- package/test-data/__indexes/muscles/pk__id.json +58 -0
- package/test-data/__indexes/workouts/fk_exercise_id.json +23 -0
- package/test-data/__indexes/workouts/index_date.json +18 -0
- package/test-data/__indexes/workouts/pk__id.json +26 -0
- package/test-data/copyDatabase.ts +64 -0
- package/test-data/exercise_muscle/bench_press_pectorals.json +6 -0
- package/test-data/exercise_muscle/deadlift_hamstrings.json +6 -0
- package/test-data/exercise_muscle/squat_quadriceps.json +6 -0
- package/test-data/exercise_muscle.json +69 -0
- package/test-data/exercises/bench_press.json +5 -0
- package/test-data/exercises/deadlift.json +5 -0
- package/test-data/exercises/squat.json +5 -0
- package/test-data/exercises.json +34 -0
- package/test-data/muscles/abdominal.json +6 -0
- package/test-data/muscles/biceps.json +6 -0
- package/test-data/muscles/calves.json +6 -0
- package/test-data/muscles/deltoids.json +6 -0
- package/test-data/muscles/erector_spinae.json +6 -0
- package/test-data/muscles/forearms.json +6 -0
- package/test-data/muscles/gluteus_maximus.json +6 -0
- package/test-data/muscles/hamstrings.json +6 -0
- package/test-data/muscles/latissimus_dorsi.json +6 -0
- package/test-data/muscles/obliques.json +6 -0
- package/test-data/muscles/pectorals.json +6 -0
- package/test-data/muscles/quadriceps.json +6 -0
- package/test-data/muscles/trapezius.json +6 -0
- package/test-data/muscles/triceps.json +6 -0
- package/test-data/muscles.json +50 -0
- package/test-data/workouts/2024-06-02-001.json +10 -0
- package/test-data/workouts/2024-06-02-002.json +10 -0
- package/test-data/workouts/2024-06-02-003.json +10 -0
- package/test-data/workouts/2024-06-05-001.json +10 -0
- package/test-data/workouts/2024-06-05-002.json +10 -0
- package/test-data/workouts/2024-06-05-003.json +10 -0
- package/test-data/workouts.json +84 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate (and where sensible, coerce) a value against a field's declared type. Runs only
|
|
3
|
+
* against values being written by insertEntity/updateEntity - it never re-validates data already
|
|
4
|
+
* on disk, so a field whose declared type doesn't match its already-stored values (which can
|
|
5
|
+
* happen, since nothing enforced this before) is left alone until something actually updates it.
|
|
6
|
+
* An unrecognized type name is treated as unconstrained rather than rejected, so a typo in a
|
|
7
|
+
* schema's field type can't silently block every write to that field.
|
|
8
|
+
* @param type
|
|
9
|
+
* @param value
|
|
10
|
+
*/
|
|
11
|
+
export declare const typeCheck: (type?: string, value?: any) => any;
|
|
12
|
+
//# sourceMappingURL=typeCheck.d.ts.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.typeCheck = void 0
|
|
7
|
+
/**
|
|
8
|
+
* Validate (and where sensible, coerce) a value against a field's declared type. Runs only
|
|
9
|
+
* against values being written by insertEntity/updateEntity - it never re-validates data already
|
|
10
|
+
* on disk, so a field whose declared type doesn't match its already-stored values (which can
|
|
11
|
+
* happen, since nothing enforced this before) is left alone until something actually updates it.
|
|
12
|
+
* An unrecognized type name is treated as unconstrained rather than rejected, so a typo in a
|
|
13
|
+
* schema's field type can't silently block every write to that field.
|
|
14
|
+
* @param type
|
|
15
|
+
* @param value
|
|
16
|
+
*/
|
|
17
|
+
const typeCheck = (type = 'string', value = undefined) => {
|
|
18
|
+
if (typeof value === 'undefined') {
|
|
19
|
+
return value
|
|
20
|
+
}
|
|
21
|
+
switch (type) {
|
|
22
|
+
case 'string':
|
|
23
|
+
return typeof value === 'string' ? value : String(value)
|
|
24
|
+
case 'int':
|
|
25
|
+
{
|
|
26
|
+
const coerced = Number(value)
|
|
27
|
+
if (Number.isNaN(coerced) || !Number.isInteger(coerced)) {
|
|
28
|
+
throw new Error(`Value "${value}" is not a valid int`)
|
|
29
|
+
}
|
|
30
|
+
return coerced
|
|
31
|
+
}
|
|
32
|
+
case 'boolean':
|
|
33
|
+
if (typeof value === 'boolean') {
|
|
34
|
+
return value
|
|
35
|
+
}
|
|
36
|
+
if (value === 'true') {
|
|
37
|
+
return true
|
|
38
|
+
}
|
|
39
|
+
if (value === 'false') {
|
|
40
|
+
return false
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`Value "${value}" is not a valid boolean`)
|
|
43
|
+
case 'object':
|
|
44
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
45
|
+
throw new Error(`Value "${value}" is not a valid object`)
|
|
46
|
+
}
|
|
47
|
+
return value
|
|
48
|
+
case 'array':
|
|
49
|
+
if (!Array.isArray(value)) {
|
|
50
|
+
throw new Error(`Value "${value}" is not a valid array`)
|
|
51
|
+
}
|
|
52
|
+
return value
|
|
53
|
+
default:
|
|
54
|
+
return value
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.typeCheck = typeCheck
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeCheck=void 0;const typeCheck=(r="string",e=void 0)=>{if(void 0===e)return e;switch(r){case"string":return"string"==typeof e?e:String(e);case"int":{const r=Number(e);if(Number.isNaN(r)||!Number.isInteger(r))throw new Error(`Value "${e}" is not a valid int`);return r}case"boolean":if("boolean"==typeof e)return e;if("true"===e)return!0;if("false"===e)return!1;throw new Error(`Value "${e}" is not a valid boolean`);case"object":if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(`Value "${e}" is not a valid object`);return e;case"array":if(!Array.isArray(e))throw new Error(`Value "${e}" is not a valid array`);return e;default:return e}};exports.typeCheck=typeCheck;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.typeEnum = void 0
|
|
7
|
+
require('core-js/modules/es.array.includes.js')
|
|
8
|
+
const typeEnum = (values = [], value = '', optional = false) => {
|
|
9
|
+
if (values.includes(value)) {
|
|
10
|
+
return true
|
|
11
|
+
}
|
|
12
|
+
return typeof value === 'undefined' && optional
|
|
13
|
+
}
|
|
14
|
+
exports.typeEnum = typeEnum
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeEnum=void 0,require("core-js/modules/es.array.includes.js");const typeEnum=(e=[],s="",t=!1)=>!!e.includes(s)||void 0===s&&t;exports.typeEnum=typeEnum;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.useDefault = void 0
|
|
7
|
+
const useDefault = (defaultValue = '', value = undefined) => {
|
|
8
|
+
if (typeof value === 'undefined') {
|
|
9
|
+
return defaultValue
|
|
10
|
+
}
|
|
11
|
+
return value
|
|
12
|
+
}
|
|
13
|
+
exports.useDefault = useDefault
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useDefault=void 0;const useDefault=(e="",t=void 0)=>void 0===t?e:t;exports.useDefault=useDefault;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.deleteEntity = void 0
|
|
7
|
+
require('core-js/modules/es.json.stringify.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
9
|
+
require('core-js/modules/esnext.iterator.find.js')
|
|
10
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
11
|
+
require('core-js/modules/esnext.set.add-all.js')
|
|
12
|
+
require('core-js/modules/esnext.set.delete-all.js')
|
|
13
|
+
require('core-js/modules/esnext.set.difference.js')
|
|
14
|
+
require('core-js/modules/esnext.set.every.js')
|
|
15
|
+
require('core-js/modules/esnext.set.filter.js')
|
|
16
|
+
require('core-js/modules/esnext.set.find.js')
|
|
17
|
+
require('core-js/modules/esnext.set.intersection.js')
|
|
18
|
+
require('core-js/modules/esnext.set.is-disjoint-from.js')
|
|
19
|
+
require('core-js/modules/esnext.set.is-subset-of.js')
|
|
20
|
+
require('core-js/modules/esnext.set.is-superset-of.js')
|
|
21
|
+
require('core-js/modules/esnext.set.join.js')
|
|
22
|
+
require('core-js/modules/esnext.set.map.js')
|
|
23
|
+
require('core-js/modules/esnext.set.reduce.js')
|
|
24
|
+
require('core-js/modules/esnext.set.some.js')
|
|
25
|
+
require('core-js/modules/esnext.set.symmetric-difference.js')
|
|
26
|
+
require('core-js/modules/esnext.set.union.js')
|
|
27
|
+
const _retrieveRecord = require('../utilities/retrieveRecord')
|
|
28
|
+
const _retrieveFile = require('../utilities/retrieveFile')
|
|
29
|
+
const _removeFromIndex = require('../utilities/removeFromIndex')
|
|
30
|
+
const gulpConfig = require('js-build-tools/gulp.config')
|
|
31
|
+
const {
|
|
32
|
+
rm,
|
|
33
|
+
writeFile
|
|
34
|
+
} = require('fs/promises')
|
|
35
|
+
/**
|
|
36
|
+
* A record object carries no memory of which entry file it was read from, and files are not
|
|
37
|
+
* guaranteed to be named after any field's value, so the only reliable way to find a record's
|
|
38
|
+
* file is to re-scan every entry and match it by its primary key value.
|
|
39
|
+
* @param entity
|
|
40
|
+
* @param record
|
|
41
|
+
* @param primaryField
|
|
42
|
+
* @param deletedValues
|
|
43
|
+
*/
|
|
44
|
+
const removeMatchingEntries = async (entity, record, primaryField, deletedValues) => {
|
|
45
|
+
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
46
|
+
const remainingEntries = []
|
|
47
|
+
for (const fileName of record.entries) {
|
|
48
|
+
const data = await (0, _retrieveFile.retrieveFile)(`${record.path}/${fileName}`)
|
|
49
|
+
if (!deletedValues.has(data[primaryField])) {
|
|
50
|
+
remainingEntries.push(fileName)
|
|
51
|
+
continue
|
|
52
|
+
}
|
|
53
|
+
await rm(`${databasePath}${record.path}/${fileName}`)
|
|
54
|
+
for (const key of record.keys) {
|
|
55
|
+
if (key.fields.length === 1) {
|
|
56
|
+
await (0, _removeFromIndex.removeFromIndex)(record.path, key, data[key.fields[0]], fileName)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return remainingEntries
|
|
61
|
+
}
|
|
62
|
+
const deleteEntity = async (entity = '', dataSet = {}) => {
|
|
63
|
+
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
64
|
+
const record = await (0, _retrieveRecord.retrieveRecord)(entity)
|
|
65
|
+
const primaryKey = record.keys.find(key => key.type === 'primary' && key.fields.length === 1)
|
|
66
|
+
if (!primaryKey) {
|
|
67
|
+
throw new Error(`Cannot delete from "${entity}" without a single-field primary key`)
|
|
68
|
+
}
|
|
69
|
+
const primaryField = primaryKey.fields[0]
|
|
70
|
+
const toDelete = dataSet[entity] || []
|
|
71
|
+
if (!toDelete.length) {
|
|
72
|
+
return dataSet
|
|
73
|
+
}
|
|
74
|
+
const deletedValues = new Set(toDelete.map(row => row[primaryField]))
|
|
75
|
+
record.entries = await removeMatchingEntries(entity, record, primaryField, deletedValues)
|
|
76
|
+
await writeFile(`${databasePath}${record.path}.json`, JSON.stringify(record, null, 2))
|
|
77
|
+
return dataSet
|
|
78
|
+
}
|
|
79
|
+
exports.deleteEntity = deleteEntity
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deleteEntity=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.set.add-all.js"),require("core-js/modules/esnext.set.delete-all.js"),require("core-js/modules/esnext.set.difference.js"),require("core-js/modules/esnext.set.every.js"),require("core-js/modules/esnext.set.filter.js"),require("core-js/modules/esnext.set.find.js"),require("core-js/modules/esnext.set.intersection.js"),require("core-js/modules/esnext.set.is-disjoint-from.js"),require("core-js/modules/esnext.set.is-subset-of.js"),require("core-js/modules/esnext.set.is-superset-of.js"),require("core-js/modules/esnext.set.join.js"),require("core-js/modules/esnext.set.map.js"),require("core-js/modules/esnext.set.reduce.js"),require("core-js/modules/esnext.set.some.js"),require("core-js/modules/esnext.set.symmetric-difference.js"),require("core-js/modules/esnext.set.union.js");var _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_removeFromIndex=require("../utilities/removeFromIndex");const gulpConfig=require("js-build-tools/gulp.config"),{rm:rm,writeFile:writeFile}=require("fs/promises"),removeMatchingEntries=async(e,r,s,t)=>{const i=gulpConfig.get("databasePath","database/"),o=[];for(const e of r.entries){const n=await(0,_retrieveFile.retrieveFile)(`${r.path}/${e}`);if(t.has(n[s])){await rm(`${i}${r.path}/${e}`);for(const s of r.keys)1===s.fields.length&&await(0,_removeFromIndex.removeFromIndex)(r.path,s,n[s.fields[0]],e)}else o.push(e)}return o},deleteEntity=async(e="",r={})=>{const s=gulpConfig.get("databasePath","database/"),t=await(0,_retrieveRecord.retrieveRecord)(e),i=t.keys.find((e=>"primary"===e.type&&1===e.fields.length));if(!i)throw new Error(`Cannot delete from "${e}" without a single-field primary key`);const o=i.fields[0],n=r[e]||[];if(!n.length)return r;const u=new Set(n.map((e=>e[o])));return t.entries=await removeMatchingEntries(0,t,o,u),await writeFile(`${s}${t.path}.json`,JSON.stringify(t,null,2)),r};exports.deleteEntity=deleteEntity;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.groupBy = void 0
|
|
7
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.reduce.js')
|
|
9
|
+
const groupBy = (dataSet = [], groupProperty = '') => {
|
|
10
|
+
if (!groupProperty) {
|
|
11
|
+
return dataSet
|
|
12
|
+
}
|
|
13
|
+
return dataSet.reduce((groupedData, data) => {
|
|
14
|
+
const property = data[groupProperty]
|
|
15
|
+
if (!groupedData.hasOwnProperty(property)) {
|
|
16
|
+
groupedData[property] = []
|
|
17
|
+
}
|
|
18
|
+
groupedData[property].push(data)
|
|
19
|
+
return groupedData
|
|
20
|
+
}, {})
|
|
21
|
+
}
|
|
22
|
+
exports.groupBy = groupBy
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.groupBy=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");const groupBy=(e=[],r="")=>r?e.reduce(((e,o)=>{const s=o[r];return e.hasOwnProperty(s)||(e[s]=[]),e[s].push(o),e}),{}):e;exports.groupBy=groupBy;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.insertEntity = void 0
|
|
7
|
+
require('core-js/modules/es.json.stringify.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
9
|
+
require('core-js/modules/esnext.iterator.find.js')
|
|
10
|
+
const _retrieveRecord = require('../utilities/retrieveRecord')
|
|
11
|
+
const _updateIndex = require('../utilities/updateIndex')
|
|
12
|
+
const _keyGenerate = require('../introspect/policies/keyGenerate')
|
|
13
|
+
const _keyUnique = require('../introspect/policies/keyUnique')
|
|
14
|
+
const _useDefault = require('../introspect/policies/useDefault')
|
|
15
|
+
const _typeCheck = require('../introspect/policies/typeCheck')
|
|
16
|
+
const _foreignKeyExists = require('../introspect/policies/foreignKeyExists')
|
|
17
|
+
const _splitEntityProperty = require('../utilities/parsers/splitEntityProperty')
|
|
18
|
+
const gulpConfig = require('js-build-tools/gulp.config')
|
|
19
|
+
const {
|
|
20
|
+
writeFile
|
|
21
|
+
} = require('fs/promises')
|
|
22
|
+
/**
|
|
23
|
+
* Build one entity's stored values from the raw input values, generating any autoGenerate
|
|
24
|
+
* fields and applying field defaults, then throw if a required field still has no value.
|
|
25
|
+
* @param entity
|
|
26
|
+
* @param record
|
|
27
|
+
* @param rowValues
|
|
28
|
+
*/
|
|
29
|
+
const buildEntityValues = async (entity, record, rowValues = {}) => {
|
|
30
|
+
const entityValues = {}
|
|
31
|
+
for (const field of record.definition) {
|
|
32
|
+
let value = rowValues[field.name]
|
|
33
|
+
if (field.autoGenerate) {
|
|
34
|
+
value = await (0, _keyGenerate.keyGenerate)(entity, [field.name])
|
|
35
|
+
} else if (field.hasOwnProperty('default')) {
|
|
36
|
+
value = (0, _useDefault.useDefault)(field.default, value)
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === 'undefined') {
|
|
39
|
+
if (!field.optional) {
|
|
40
|
+
throw new Error(`Missing required field "${field.name}" for ${entity}`)
|
|
41
|
+
}
|
|
42
|
+
continue
|
|
43
|
+
}
|
|
44
|
+
entityValues[field.name] = (0, _typeCheck.typeCheck)(field.type, value)
|
|
45
|
+
}
|
|
46
|
+
return entityValues
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reject the insert if it collides with an existing primary or unique single-field key value.
|
|
50
|
+
* @param entity
|
|
51
|
+
* @param record
|
|
52
|
+
* @param entityValues
|
|
53
|
+
*/
|
|
54
|
+
const assertUnique = async (entity, record, entityValues) => {
|
|
55
|
+
for (const key of record.keys) {
|
|
56
|
+
if (key.type !== 'primary' && key.type !== 'unique' || key.fields.length !== 1) {
|
|
57
|
+
continue
|
|
58
|
+
}
|
|
59
|
+
const isUnique = await (0, _keyUnique.keyUnique)(entity, key.fields, entityValues[key.fields[0]])
|
|
60
|
+
if (!isUnique) {
|
|
61
|
+
throw new Error(`Duplicate value for ${key.type} key "${key.fields[0]}" on ${entity}`)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Reject the insert if a single-field foreign key's value doesn't exist in the record it
|
|
67
|
+
* references.
|
|
68
|
+
* @param entity
|
|
69
|
+
* @param record
|
|
70
|
+
* @param entityValues
|
|
71
|
+
*/
|
|
72
|
+
const assertForeignKeys = async (entity, record, entityValues) => {
|
|
73
|
+
for (const key of record.keys) {
|
|
74
|
+
if (key.type !== 'foreign' || key.fields.length !== 1 || !key.references || key.references.length !== 1) {
|
|
75
|
+
continue
|
|
76
|
+
}
|
|
77
|
+
const field = key.fields[0]
|
|
78
|
+
if (!entityValues.hasOwnProperty(field)) {
|
|
79
|
+
continue
|
|
80
|
+
}
|
|
81
|
+
const {
|
|
82
|
+
entity: refEntity,
|
|
83
|
+
property: refProperty
|
|
84
|
+
} = (0, _splitEntityProperty.splitEntityProperty)(key.references[0].fields[0])
|
|
85
|
+
const exists = await (0, _foreignKeyExists.foreignKeyExists)(refEntity, refProperty, entityValues[field])
|
|
86
|
+
if (!exists) {
|
|
87
|
+
throw new Error(`Foreign key "${field}" on ${entity} references a nonexistent ${refEntity}.${refProperty} = ${entityValues[field]}`)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const insertEntity = async (entity = '', values = [], dataSet = {}) => {
|
|
92
|
+
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
93
|
+
const record = await (0, _retrieveRecord.retrieveRecord)(entity)
|
|
94
|
+
const primaryKey = record.keys.find(key => key.type === 'primary' && key.fields.length === 1)
|
|
95
|
+
if (!dataSet.hasOwnProperty(entity)) {
|
|
96
|
+
dataSet[entity] = []
|
|
97
|
+
}
|
|
98
|
+
for (const rowValues of values) {
|
|
99
|
+
const entityValues = await buildEntityValues(entity, record, rowValues)
|
|
100
|
+
await assertUnique(entity, record, entityValues)
|
|
101
|
+
await assertForeignKeys(entity, record, entityValues)
|
|
102
|
+
const fileName = `${primaryKey ? entityValues[primaryKey.fields[0]] : crypto.randomUUID()}.json`
|
|
103
|
+
await writeFile(`${databasePath}${record.path}/${fileName}`, JSON.stringify(entityValues, null, 2))
|
|
104
|
+
record.entries.push(fileName)
|
|
105
|
+
await writeFile(`${databasePath}${record.path}.json`, JSON.stringify(record, null, 2))
|
|
106
|
+
for (const key of record.keys) {
|
|
107
|
+
if (key.fields.length === 1) {
|
|
108
|
+
await (0, _updateIndex.updateIndex)(record.path, key, entityValues[key.fields[0]], fileName)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
dataSet[entity].push(entityValues)
|
|
112
|
+
}
|
|
113
|
+
return dataSet
|
|
114
|
+
}
|
|
115
|
+
exports.insertEntity = insertEntity
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.insertEntity=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js");var _retrieveRecord=require("../utilities/retrieveRecord"),_updateIndex=require("../utilities/updateIndex"),_keyGenerate=require("../introspect/policies/keyGenerate"),_keyUnique=require("../introspect/policies/keyUnique"),_useDefault=require("../introspect/policies/useDefault"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty");const gulpConfig=require("js-build-tools/gulp.config"),{writeFile:writeFile}=require("fs/promises"),buildEntityValues=async(e,t,i={})=>{const r={};for(const s of t.definition){let t=i[s.name];if(s.autoGenerate?t=await(0,_keyGenerate.keyGenerate)(e,[s.name]):s.hasOwnProperty("default")&&(t=(0,_useDefault.useDefault)(s.default,t)),void 0!==t)r[s.name]=(0,_typeCheck.typeCheck)(s.type,t);else if(!s.optional)throw new Error(`Missing required field "${s.name}" for ${e}`)}return r},assertUnique=async(e,t,i)=>{for(const r of t.keys){if("primary"!==r.type&&"unique"!==r.type||1!==r.fields.length)continue;if(!await(0,_keyUnique.keyUnique)(e,r.fields,i[r.fields[0]]))throw new Error(`Duplicate value for ${r.type} key "${r.fields[0]}" on ${e}`)}},assertForeignKeys=async(e,t,i)=>{for(const r of t.keys){if("foreign"!==r.type||1!==r.fields.length||!r.references||1!==r.references.length)continue;const t=r.fields[0];if(!i.hasOwnProperty(t))continue;const{entity:s,property:n}=(0,_splitEntityProperty.splitEntityProperty)(r.references[0].fields[0]);if(!await(0,_foreignKeyExists.foreignKeyExists)(s,n,i[t]))throw new Error(`Foreign key "${t}" on ${e} references a nonexistent ${s}.${n} = ${i[t]}`)}},insertEntity=async(e="",t=[],i={})=>{const r=gulpConfig.get("databasePath","database/"),s=await(0,_retrieveRecord.retrieveRecord)(e),n=s.keys.find((e=>"primary"===e.type&&1===e.fields.length));i.hasOwnProperty(e)||(i[e]=[]);for(const o of t){const t=await buildEntityValues(e,s,o);await assertUnique(e,s,t),await assertForeignKeys(e,s,t);const a=`${n?t[n.fields[0]]:crypto.randomUUID()}.json`;await writeFile(`${r}${s.path}/${a}`,JSON.stringify(t,null,2)),s.entries.push(a),await writeFile(`${r}${s.path}.json`,JSON.stringify(s,null,2));for(const e of s.keys)1===e.fields.length&&await(0,_updateIndex.updateIndex)(s.path,e,t[e.fields[0]],a);i[e].push(t)}return i};exports.insertEntity=insertEntity;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.joinEntity = void 0
|
|
7
|
+
const _siFunciona = _interopRequireDefault(require('si-funciona'))
|
|
8
|
+
const _readEntity = require('./readEntity')
|
|
9
|
+
const _useJoinClause = require('../utilities/useJoinClause')
|
|
10
|
+
function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
|
|
11
|
+
const joinEntity = async (entity, joinEntity, dataSets = {}, joinClauses = []) => {
|
|
12
|
+
dataSets = await (0, _readEntity.readEntity)(entity, dataSets)
|
|
13
|
+
if (!joinClauses.length) {
|
|
14
|
+
return dataSets
|
|
15
|
+
}
|
|
16
|
+
dataSets = await (0, _readEntity.readEntity)(joinEntity, dataSets)
|
|
17
|
+
for (const anEntity in dataSets[entity]) {
|
|
18
|
+
let filterJoins = _siFunciona.default.cloneObject(dataSets)
|
|
19
|
+
filterJoins[entity] = [dataSets[entity][anEntity]]
|
|
20
|
+
for (const joinClause of joinClauses) {
|
|
21
|
+
filterJoins = await (0, _useJoinClause.useJoinClause)(joinClause, dataSets, filterJoins)
|
|
22
|
+
}
|
|
23
|
+
dataSets[entity][anEntity][joinEntity] = filterJoins[joinEntity]
|
|
24
|
+
}
|
|
25
|
+
return dataSets
|
|
26
|
+
}
|
|
27
|
+
exports.joinEntity = joinEntity
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinEntity=void 0;var _siFunciona=_interopRequireDefault(require("si-funciona")),_readEntity=require("./readEntity"),_useJoinClause=require("../utilities/useJoinClause");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const joinEntity=async(e,t,i={},n=[])=>{if(i=await(0,_readEntity.readEntity)(e,i),!n.length)return i;i=await(0,_readEntity.readEntity)(t,i);for(const r in i[e]){let u=_siFunciona.default.cloneObject(i);u[e]=[i[e][r]];for(let e of n)u=await(0,_useJoinClause.useJoinClause)(e,i,u);i[e][r][t]=u[t]}return i};exports.joinEntity=joinEntity;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.mergeJoins = void 0
|
|
7
|
+
const _mergeJoin = require('../utilities/mergeJoin')
|
|
8
|
+
const _reconcileJoins = require('../utilities/reconcileJoins')
|
|
9
|
+
const mergeJoins = async (dataSet = {}, merges = []) => {
|
|
10
|
+
if (!merges.length) {
|
|
11
|
+
return dataSet
|
|
12
|
+
}
|
|
13
|
+
for (const merge of merges) {
|
|
14
|
+
dataSet = await (0, _mergeJoin.mergeJoin)(merge.propertyA, merge.propertyB, dataSet)
|
|
15
|
+
dataSet = (0, _reconcileJoins.reconcileJoins)(merge.propertyA, merge.propertyB, dataSet)
|
|
16
|
+
}
|
|
17
|
+
return dataSet
|
|
18
|
+
}
|
|
19
|
+
exports.mergeJoins = mergeJoins
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeJoins=void 0;var _mergeJoin=require("../utilities/mergeJoin"),_reconcileJoins=require("../utilities/reconcileJoins");const mergeJoins=async(e={},r=[])=>{if(!r.length)return e;for(let i of r)e=await(0,_mergeJoin.mergeJoin)(i.propertyA,i.propertyB,e),e=(0,_reconcileJoins.reconcileJoins)(i.propertyA,i.propertyB,e);return e};exports.mergeJoins=mergeJoins;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.parser = void 0
|
|
7
|
+
const _splitQueries = require('../utilities/parsers/splitQueries')
|
|
8
|
+
const _parseQuery = require('../utilities/parsers/parseQuery')
|
|
9
|
+
const parser = (queries = '') => {
|
|
10
|
+
const queryArray = (0, _splitQueries.splitQueries)(queries)
|
|
11
|
+
const parsedQueries = []
|
|
12
|
+
let mergeQuery = ''
|
|
13
|
+
for (const query of queryArray) {
|
|
14
|
+
mergeQuery = mergeQuery ? `${mergeQuery}${query}` : query
|
|
15
|
+
let parsedQuery = {}
|
|
16
|
+
try {
|
|
17
|
+
parsedQuery = (0, _parseQuery.parseQuery)(mergeQuery)
|
|
18
|
+
mergeQuery = ''
|
|
19
|
+
} catch (e) {
|
|
20
|
+
// attempt to combine queries to fix bad splits
|
|
21
|
+
continue
|
|
22
|
+
}
|
|
23
|
+
parsedQueries.push(parsedQuery)
|
|
24
|
+
}
|
|
25
|
+
if (mergeQuery) {
|
|
26
|
+
throw new Error(`Failed to interpret: ${mergeQuery}`)
|
|
27
|
+
}
|
|
28
|
+
return parsedQueries
|
|
29
|
+
}
|
|
30
|
+
exports.parser = parser
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parser=void 0;var _splitQueries=require("../utilities/parsers/splitQueries"),_parseQuery=require("../utilities/parsers/parseQuery");const parser=(e="")=>{const r=(0,_splitQueries.splitQueries)(e),s=[];let t="";for(let e of r){t=t?`${t}${e}`:e;let r={};try{r=(0,_parseQuery.parseQuery)(t),t=""}catch(e){continue}s.push(r)}if(t)throw new Error(`Failed to interpret: ${t}`);return s};exports.parser=parser;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.query = void 0
|
|
7
|
+
const _parser = require('./parser')
|
|
8
|
+
const _runQuery = require('../utilities/runQuery')
|
|
9
|
+
const query = async (queryString = '') => {
|
|
10
|
+
const parsedQueries = (0, _parser.parser)(queryString)
|
|
11
|
+
const queryResults = []
|
|
12
|
+
for (const parsed of parsedQueries) {
|
|
13
|
+
const dataSet = await (0, _runQuery.runQuery)(parsed)
|
|
14
|
+
queryResults.push(dataSet[parsed.entity])
|
|
15
|
+
}
|
|
16
|
+
return queryResults
|
|
17
|
+
}
|
|
18
|
+
exports.query = query
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.query=void 0;var _parser=require("./parser"),_runQuery=require("../utilities/runQuery");const query=async(r="")=>{const e=(0,_parser.parser)(r),u=[];for(let r of e){const e=await(0,_runQuery.runQuery)(r);u.push(e[r.entity])}return u};exports.query=query;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.readEntity = void 0
|
|
7
|
+
const _retrieveRecords = require('../utilities/retrieveRecords')
|
|
8
|
+
const readEntity = async (entity = '', dataSet = {}) => {
|
|
9
|
+
if (!dataSet.hasOwnProperty(entity) || !dataSet[entity].length) {
|
|
10
|
+
dataSet[entity] = await (0, _retrieveRecords.retrieveRecords)(entity)
|
|
11
|
+
}
|
|
12
|
+
return dataSet
|
|
13
|
+
}
|
|
14
|
+
exports.readEntity = readEntity
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readEntity=void 0;var _retrieveRecords=require("../utilities/retrieveRecords");const readEntity=async(e="",r={})=>(r.hasOwnProperty(e)&&r[e].length||(r[e]=await(0,_retrieveRecords.retrieveRecords)(e)),r);exports.readEntity=readEntity;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.sortBy = void 0
|
|
7
|
+
const sortBy = (dataSet = [], sortClauses = []) => {
|
|
8
|
+
if (!sortClauses.length) {
|
|
9
|
+
return dataSet
|
|
10
|
+
}
|
|
11
|
+
dataSet.sort((a, b) => {
|
|
12
|
+
for (const sortClause of sortClauses) {
|
|
13
|
+
const property = sortClause.property
|
|
14
|
+
const direction = sortClause.direction
|
|
15
|
+
if (a[property] == b[property]) {
|
|
16
|
+
continue
|
|
17
|
+
}
|
|
18
|
+
const result = a[property] < b[property] ? -1 : 1
|
|
19
|
+
return direction === 'asc' ? result : result * -1
|
|
20
|
+
}
|
|
21
|
+
return 0
|
|
22
|
+
})
|
|
23
|
+
return dataSet
|
|
24
|
+
}
|
|
25
|
+
exports.sortBy = sortBy
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortBy=void 0;const sortBy=(t=[],o=[])=>o.length?(t.sort(((t,r)=>{for(let e of o){const o=e.property,s=e.direction;if(t[o]==r[o])continue;const n=t[o]<r[o]?-1:1;return"asc"===s?n:-1*n}return 0})),t):t;exports.sortBy=sortBy;
|