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
package/MAIN.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# json-file-db
|
|
2
|
+
|
|
3
|
+
Read and manage data with JSON files - a small query engine that treats a folder of JSON files as a database, with
|
|
4
|
+
a SQL-like query string (`read workouts where date = '2024-06-02'`) instead of a query builder API.
|
|
5
|
+
|
|
6
|
+
## The modules
|
|
7
|
+
|
|
8
|
+
Each module of the documentation is a folder of `src/data/`:
|
|
9
|
+
|
|
10
|
+
* `introspect`: create, drop and describe a JSON-file "table" (and the policies that validate one).
|
|
11
|
+
* `queries`: parse a query string and run it - reads, inserts, updates, deletes, joins, `where`, `sortBy`, `groupBy`.
|
|
12
|
+
* `utilities`: shared helpers the queries use - retrieving records/files/indexes and merging join results.
|
|
13
|
+
|
|
14
|
+
Note: `src/index.ts` (the package's top-level entry point) is still an empty stub - there is no public
|
|
15
|
+
`require('json-file-db')` API yet, only the individual modules above.
|
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# json-fs-query
|
|
2
|
+
|
|
3
|
+
Read and manage data with JSON files - a small query engine that treats a folder of JSON files as a database, with
|
|
4
|
+
a SQL-like query string (`read workouts where date = '2024-06-02'`) instead of a query builder API.
|
|
5
|
+
|
|
6
|
+
> **Pre-release.** The core engine (schema management plus a full read/insert/update/delete query language) is
|
|
7
|
+
> implemented and tested. Still open: multi-field keys, a browser-safe build, and referential integrity on
|
|
8
|
+
> delete/update (see the repository's issue tracker for details). Expect the public API below to stay stable, but
|
|
9
|
+
> breaking changes are possible before a 1.0 release.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```shell
|
|
14
|
+
npm install json-fs-query
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
const { create, query, drop } = require('json-fs-query')
|
|
21
|
+
|
|
22
|
+
await create('workouts', [
|
|
23
|
+
{ name: '_id', type: 'string', optional: false, autoGenerate: true },
|
|
24
|
+
{ name: 'reps', type: 'int', optional: false },
|
|
25
|
+
{ name: 'date', type: 'string', optional: false }
|
|
26
|
+
], [
|
|
27
|
+
{ type: 'primary', fields: ['_id'], lookup: 'pk__id.json' }
|
|
28
|
+
])
|
|
29
|
+
|
|
30
|
+
await query("insert workouts values reps = 10, date = '2024-06-02'")
|
|
31
|
+
const rows = await query("read workouts where date = '2024-06-02'")
|
|
32
|
+
await query("update workouts set reps = 12 where date = '2024-06-02'")
|
|
33
|
+
await query("delete workouts where date = '2024-06-02'")
|
|
34
|
+
|
|
35
|
+
await drop('workouts')
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This is a Node-only admin API today - `create`/`drop`/`query` all read and write real files on disk. A
|
|
39
|
+
browser-safe read-only build is planned but not yet built (see the pre-release note above).
|
|
40
|
+
|
|
41
|
+
## Documentation
|
|
42
|
+
|
|
43
|
+
The reference for every function is in [`docs/`](https://joshuaheagle.com/projects/json-file-db/docs/index.html) (or open `docs/index.html` locally). It is generated from the TypeScript source, and each module is a folder of `src/data/`:
|
|
44
|
+
|
|
45
|
+
| Module | What it holds |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| `introspect` | Create, drop and describe a JSON-file "table" (and the policies that validate one) |
|
|
48
|
+
| `queries` | Parse a query string and run it - reads, inserts, updates, deletes, joins, `where`, `sortBy`, `groupBy` |
|
|
49
|
+
| `utilities` | Shared helpers the queries use - retrieving records/files/indexes and merging join results |
|
|
50
|
+
|
|
51
|
+
`src/index.ts` is the package's public entry point - it re-exports `query`, `create`, `drop`, `describe`, and the
|
|
52
|
+
schema-definition types (`fieldProperties`, `keyProperties`, etc.) needed to build a `create()` call. Everything else
|
|
53
|
+
under `src/data/` is an internal module, reachable but not part of the supported public API.
|
|
54
|
+
|
|
55
|
+
## Development
|
|
56
|
+
|
|
57
|
+
```shell
|
|
58
|
+
npm install
|
|
59
|
+
npm test # the tests
|
|
60
|
+
npm run typecheck # the types
|
|
61
|
+
npm run build # dist/ and docs/
|
|
62
|
+
npm run docs # only the documentation
|
|
63
|
+
```
|
package/babel.config.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"browser": {
|
|
3
|
+
"enabled": false,
|
|
4
|
+
"name": "jsonFileDb"
|
|
5
|
+
},
|
|
6
|
+
"dist": {
|
|
7
|
+
"main": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"docs": {
|
|
10
|
+
"enabled": true,
|
|
11
|
+
"from": "src/data",
|
|
12
|
+
"index": "MAIN.md",
|
|
13
|
+
"to": "../joshuaheagle.local/projects/json-file-db/docs"
|
|
14
|
+
},
|
|
15
|
+
"typescript": {
|
|
16
|
+
"config": "tsconfig.json",
|
|
17
|
+
"enabled": true
|
|
18
|
+
},
|
|
19
|
+
"test": {
|
|
20
|
+
"options": {
|
|
21
|
+
"testMatch": [
|
|
22
|
+
"**/?(*.)+(spec|test).js?(x)"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"path": "src",
|
|
26
|
+
"watch": "src/**/*.[jt]s"
|
|
27
|
+
},
|
|
28
|
+
"relativePath": "http://joshuaheagle.local/projects/workout-planner",
|
|
29
|
+
"databasePath": "database/"
|
|
30
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { recordDefinition } from './definitions/record';
|
|
2
|
+
import { keyProperties } from './definitions/key';
|
|
3
|
+
import { fieldProperties } from './definitions/field';
|
|
4
|
+
/**
|
|
5
|
+
* Create a new record.
|
|
6
|
+
* @param recordName
|
|
7
|
+
* @param definition
|
|
8
|
+
* @param keys
|
|
9
|
+
*/
|
|
10
|
+
export declare const create: (recordName: string, definition?: fieldProperties[], keys?: keyProperties[]) => Promise<recordDefinition | null>;
|
|
11
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.create = void 0
|
|
7
|
+
require('core-js/modules/es.json.stringify.js')
|
|
8
|
+
const _testFilesystem = require('test-filesystem')
|
|
9
|
+
const _record = require('./definitions/record')
|
|
10
|
+
const _registerRecord = require('../utilities/registerRecord')
|
|
11
|
+
/**
|
|
12
|
+
* Create a new record.
|
|
13
|
+
* @param recordName
|
|
14
|
+
* @param definition
|
|
15
|
+
* @param keys
|
|
16
|
+
*/
|
|
17
|
+
const create = async (recordName, definition = [], keys = []) => {
|
|
18
|
+
const gulpConfig = require('js-build-tools/gulp.config')
|
|
19
|
+
const {
|
|
20
|
+
writeFile,
|
|
21
|
+
mkdir
|
|
22
|
+
} = require('fs/promises')
|
|
23
|
+
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
24
|
+
if (recordName === '__RECORDS') {
|
|
25
|
+
return null
|
|
26
|
+
}
|
|
27
|
+
if ((0, _testFilesystem.fileExists)(`${databasePath}${recordName}.json`)) {
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
await mkdir(databasePath, {
|
|
31
|
+
recursive: true
|
|
32
|
+
})
|
|
33
|
+
const recordContent = (0, _record.record)({
|
|
34
|
+
path: recordName,
|
|
35
|
+
definition,
|
|
36
|
+
keys
|
|
37
|
+
})
|
|
38
|
+
await writeFile(`${databasePath}${recordName}.json`, JSON.stringify(recordContent, null, 2))
|
|
39
|
+
await mkdir(`${databasePath}${recordName}`, {
|
|
40
|
+
recursive: true
|
|
41
|
+
})
|
|
42
|
+
await (0, _registerRecord.registerRecord)(recordName)
|
|
43
|
+
return recordContent
|
|
44
|
+
}
|
|
45
|
+
exports.create = create
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=void 0,require("core-js/modules/es.json.stringify.js");var _testFilesystem=require("test-filesystem"),_record=require("./definitions/record"),_registerRecord=require("../utilities/registerRecord");const create=async(e,r=[],t=[])=>{const s=require("js-build-tools/gulp.config"),{writeFile:i,mkdir:o}=require("fs/promises"),a=s.get("databasePath","database/");if("__RECORDS"===e)return null;if((0,_testFilesystem.fileExists)(`${a}${e}.json`))return null;await o(a,{recursive:!0});const c=(0,_record.record)({path:e,definition:r,keys:t});return await i(`${a}${e}.json`,JSON.stringify(c,null,2)),await o(`${a}${e}`,{recursive:!0}),await(0,_registerRecord.registerRecord)(e),c};exports.create=create;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type fieldName = string;
|
|
2
|
+
export type fieldDefinition = {
|
|
3
|
+
name: fieldName;
|
|
4
|
+
type: string;
|
|
5
|
+
optional: boolean;
|
|
6
|
+
default?: any;
|
|
7
|
+
autoGenerate: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type fieldProperties = {
|
|
10
|
+
name?: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
optional?: boolean;
|
|
13
|
+
useDefault?: boolean;
|
|
14
|
+
defaultValue?: any;
|
|
15
|
+
autoGenerate?: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Generate a field for a record.
|
|
19
|
+
* @param properties
|
|
20
|
+
* @param properties.name
|
|
21
|
+
* @param properties.type
|
|
22
|
+
* @param properties.optional
|
|
23
|
+
* @param properties.useDefault
|
|
24
|
+
* @param properties.defaultValue
|
|
25
|
+
* @param properties.autoGenerate
|
|
26
|
+
*/
|
|
27
|
+
export declare const field: ({ name, type, optional, useDefault, defaultValue, autoGenerate }?: fieldProperties) => fieldDefinition;
|
|
28
|
+
//# sourceMappingURL=field.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.field = void 0
|
|
7
|
+
/**
|
|
8
|
+
* Generate a field for a record.
|
|
9
|
+
* @param properties
|
|
10
|
+
* @param properties.name
|
|
11
|
+
* @param properties.type
|
|
12
|
+
* @param properties.optional
|
|
13
|
+
* @param properties.useDefault
|
|
14
|
+
* @param properties.defaultValue
|
|
15
|
+
* @param properties.autoGenerate
|
|
16
|
+
*/
|
|
17
|
+
const field = ({
|
|
18
|
+
name = '',
|
|
19
|
+
type = 'string',
|
|
20
|
+
optional = false,
|
|
21
|
+
useDefault = false,
|
|
22
|
+
defaultValue = '',
|
|
23
|
+
autoGenerate = false
|
|
24
|
+
} = {}) => {
|
|
25
|
+
const returnField = {
|
|
26
|
+
name,
|
|
27
|
+
type,
|
|
28
|
+
optional,
|
|
29
|
+
autoGenerate
|
|
30
|
+
}
|
|
31
|
+
if (useDefault) {
|
|
32
|
+
returnField.default = defaultValue
|
|
33
|
+
}
|
|
34
|
+
return returnField
|
|
35
|
+
}
|
|
36
|
+
exports.field = field
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.field=void 0;const field=({name:e="",type:t="string",optional:o=!1,useDefault:a=!1,defaultValue:l="",autoGenerate:n=!1}={})=>{const r={name:e,type:t,optional:o,autoGenerate:n};return a&&(r.default=l),r};exports.field=field;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { reference } from './keyReference';
|
|
2
|
+
import { fieldName } from './field';
|
|
3
|
+
export type indexType = string;
|
|
4
|
+
export type indexLocation = string;
|
|
5
|
+
export type keyDefinition = {
|
|
6
|
+
type: indexType;
|
|
7
|
+
fields: Array<fieldName>;
|
|
8
|
+
lookup: indexLocation;
|
|
9
|
+
references?: Array<reference>;
|
|
10
|
+
};
|
|
11
|
+
export type keyProperties = {
|
|
12
|
+
type?: indexType;
|
|
13
|
+
fields?: Array<fieldName>;
|
|
14
|
+
lookup?: indexLocation;
|
|
15
|
+
references?: Array<reference>;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Create a field key.
|
|
19
|
+
* @param properties
|
|
20
|
+
* @param properties.type
|
|
21
|
+
* @param properties.fields
|
|
22
|
+
* @param properties.lookup
|
|
23
|
+
* @param properties.references
|
|
24
|
+
*/
|
|
25
|
+
export declare const key: ({ type, fields, lookup, references }?: keyProperties) => keyDefinition;
|
|
26
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.key = void 0
|
|
7
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
9
|
+
const _keyReference = require('./keyReference')
|
|
10
|
+
/**
|
|
11
|
+
* Create a field key.
|
|
12
|
+
* @param properties
|
|
13
|
+
* @param properties.type
|
|
14
|
+
* @param properties.fields
|
|
15
|
+
* @param properties.lookup
|
|
16
|
+
* @param properties.references
|
|
17
|
+
*/
|
|
18
|
+
const key = ({
|
|
19
|
+
type = 'index',
|
|
20
|
+
fields = [],
|
|
21
|
+
lookup = '',
|
|
22
|
+
references = []
|
|
23
|
+
} = {}) => {
|
|
24
|
+
switch (type) {
|
|
25
|
+
case 'primary':
|
|
26
|
+
case 'index':
|
|
27
|
+
case 'unique':
|
|
28
|
+
references = []
|
|
29
|
+
break
|
|
30
|
+
case 'multi':
|
|
31
|
+
if (fields.length < 2) {
|
|
32
|
+
throw new Error('Multi key indicated with less than two fields')
|
|
33
|
+
}
|
|
34
|
+
break
|
|
35
|
+
case 'foreign':
|
|
36
|
+
if (references.length < 1) {
|
|
37
|
+
throw new Error('Foreign key must have one reference to an external record')
|
|
38
|
+
}
|
|
39
|
+
break
|
|
40
|
+
default:
|
|
41
|
+
throw new Error('Unrecognized key type; must be index, primary, unique, multi, or foreign')
|
|
42
|
+
}
|
|
43
|
+
const keyDefinition = {
|
|
44
|
+
type,
|
|
45
|
+
fields,
|
|
46
|
+
lookup
|
|
47
|
+
}
|
|
48
|
+
if (typeof references !== 'undefined' && references.length > 0) {
|
|
49
|
+
keyDefinition.references = references.map(_keyReference.keyReference)
|
|
50
|
+
}
|
|
51
|
+
return keyDefinition
|
|
52
|
+
}
|
|
53
|
+
exports.key = key
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.key=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _keyReference=require("./keyReference");const key=({type:e="index",fields:r=[],lookup:t="",references:o=[]}={})=>{switch(e){case"primary":case"index":case"unique":o=[];break;case"multi":if(r.length<2)throw new Error("Multi key indicated with less than two fields");break;case"foreign":if(o.length<1)throw new Error("Foreign key must have one reference to an external record");break;default:throw new Error("Unrecognized key type; must be index, primary, unique, multi, or foreign")}const n={type:e,fields:r,lookup:t};return void 0!==o&&o.length>0&&(n.references=o.map(_keyReference.keyReference)),n};exports.key=key;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { fieldName } from './field';
|
|
2
|
+
import { recordPath } from './record';
|
|
3
|
+
export type reference = {
|
|
4
|
+
fields: fieldName[];
|
|
5
|
+
lookup: recordPath;
|
|
6
|
+
};
|
|
7
|
+
export type referenceProperties = {
|
|
8
|
+
fields?: fieldName[];
|
|
9
|
+
lookup?: recordPath;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Create a reference to a remote (foreign; existing on another record) key.
|
|
13
|
+
* @param properties
|
|
14
|
+
* @param properties.fields
|
|
15
|
+
* @param properties.lookup
|
|
16
|
+
*/
|
|
17
|
+
export declare const keyReference: ({ fields, lookup }?: referenceProperties) => reference;
|
|
18
|
+
//# sourceMappingURL=keyReference.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.keyReference = void 0
|
|
7
|
+
/**
|
|
8
|
+
* Create a reference to a remote (foreign; existing on another record) key.
|
|
9
|
+
* @param properties
|
|
10
|
+
* @param properties.fields
|
|
11
|
+
* @param properties.lookup
|
|
12
|
+
*/
|
|
13
|
+
const keyReference = ({
|
|
14
|
+
fields = [],
|
|
15
|
+
lookup = ''
|
|
16
|
+
} = {}) => ({
|
|
17
|
+
fields,
|
|
18
|
+
lookup
|
|
19
|
+
})
|
|
20
|
+
exports.keyReference = keyReference
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyReference=void 0;const keyReference=({fields:e=[],lookup:o=""}={})=>({fields:e,lookup:o});exports.keyReference=keyReference;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { fieldDefinition, fieldProperties } from './field';
|
|
2
|
+
import { keyDefinition, keyProperties } from './key';
|
|
3
|
+
export type recordPath = string;
|
|
4
|
+
export type entityPath = string;
|
|
5
|
+
export type recordDefinition = {
|
|
6
|
+
path: recordPath;
|
|
7
|
+
definition: fieldDefinition[];
|
|
8
|
+
keys: keyDefinition[];
|
|
9
|
+
entries: entityPath[];
|
|
10
|
+
};
|
|
11
|
+
export type recordProperties = {
|
|
12
|
+
path?: recordPath;
|
|
13
|
+
definition?: fieldProperties[];
|
|
14
|
+
keys?: keyProperties[];
|
|
15
|
+
entries?: entityPath[];
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param properties
|
|
20
|
+
* @param properties.path
|
|
21
|
+
* @param properties.definition
|
|
22
|
+
* @param properties.keys
|
|
23
|
+
* @param properties.entries
|
|
24
|
+
*/
|
|
25
|
+
export declare const record: ({ path, definition, keys, entries }?: recordProperties) => recordDefinition;
|
|
26
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.record = void 0
|
|
7
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
9
|
+
const _field = require('./field')
|
|
10
|
+
const _key = require('./key')
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param properties
|
|
14
|
+
* @param properties.path
|
|
15
|
+
* @param properties.definition
|
|
16
|
+
* @param properties.keys
|
|
17
|
+
* @param properties.entries
|
|
18
|
+
*/
|
|
19
|
+
const record = ({
|
|
20
|
+
path = '',
|
|
21
|
+
definition = [],
|
|
22
|
+
keys = [],
|
|
23
|
+
entries = []
|
|
24
|
+
} = {}) => {
|
|
25
|
+
return {
|
|
26
|
+
path,
|
|
27
|
+
definition: definition.map(_field.field),
|
|
28
|
+
keys: keys.map(_key.key),
|
|
29
|
+
entries
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.record = record
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.record=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _field=require("./field"),_key=require("./key");const record=({path:e="",definition:r=[],keys:t=[],entries:i=[]}={})=>({path:e,definition:r.map(_field.field),keys:t.map(_key.key),entries:i});exports.record=record;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.describe = void 0
|
|
7
|
+
const _retrieveFile = require('../utilities/retrieveFile')
|
|
8
|
+
const describe = async (record = '__RECORDS') => {
|
|
9
|
+
const recordFile = await (0, _retrieveFile.retrieveFile)(`${record}.json`)
|
|
10
|
+
if (record === '__RECORDS') {
|
|
11
|
+
return recordFile.entries
|
|
12
|
+
}
|
|
13
|
+
return recordFile.definition
|
|
14
|
+
}
|
|
15
|
+
exports.describe = describe
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.describe=void 0;var _retrieveFile=require("../utilities/retrieveFile");const describe=async(e="__RECORDS")=>{const i=await(0,_retrieveFile.retrieveFile)(`${e}.json`);return"__RECORDS"===e?i.entries:i.definition};exports.describe=describe;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
require('core-js/modules/esnext.async-iterator.constructor.js')
|
|
4
|
+
require('core-js/modules/esnext.async-iterator.drop.js')
|
|
5
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
6
|
+
require('core-js/modules/esnext.iterator.drop.js')
|
|
7
|
+
Object.defineProperty(exports, '__esModule', {
|
|
8
|
+
value: true
|
|
9
|
+
})
|
|
10
|
+
exports.drop = void 0
|
|
11
|
+
const _retrieveFile = require('../utilities/retrieveFile')
|
|
12
|
+
const _deregisterRecord = require('../utilities/deregisterRecord')
|
|
13
|
+
const gulpConfig = require('js-build-tools/gulp.config')
|
|
14
|
+
const {
|
|
15
|
+
rm
|
|
16
|
+
} = require('fs/promises')
|
|
17
|
+
const drop = async record => {
|
|
18
|
+
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
19
|
+
if (record === '__RECORDS') {
|
|
20
|
+
return null
|
|
21
|
+
}
|
|
22
|
+
const recordFile = await (0, _retrieveFile.retrieveFile)(`${record}.json`)
|
|
23
|
+
for (const file of recordFile.entries) {
|
|
24
|
+
await rm(`${databasePath}${recordFile.path}/${file}`)
|
|
25
|
+
}
|
|
26
|
+
await rm(`${databasePath}${recordFile.path}`, {
|
|
27
|
+
recursive: true,
|
|
28
|
+
force: true
|
|
29
|
+
})
|
|
30
|
+
await rm(`${databasePath}__indexes/${recordFile.path}`, {
|
|
31
|
+
recursive: true,
|
|
32
|
+
force: true
|
|
33
|
+
})
|
|
34
|
+
await rm(`${databasePath}${record}.json`)
|
|
35
|
+
await (0, _deregisterRecord.deregisterRecord)(record)
|
|
36
|
+
}
|
|
37
|
+
exports.drop = drop
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.drop=void 0;var _retrieveFile=require("../utilities/retrieveFile"),_deregisterRecord=require("../utilities/deregisterRecord");const gulpConfig=require("js-build-tools/gulp.config"),{rm:rm}=require("fs/promises"),drop=async e=>{const r=gulpConfig.get("databasePath","database/");if("__RECORDS"===e)return null;const t=await(0,_retrieveFile.retrieveFile)(`${e}.json`);for(const e of t.entries)await rm(`${r}${t.path}/${e}`);await rm(`${r}${t.path}`,{recursive:!0,force:!0}),await rm(`${r}__indexes/${t.path}`,{recursive:!0,force:!0}),await rm(`${r}${e}.json`),await(0,_deregisterRecord.deregisterRecord)(e)};exports.drop=drop;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { create } from './create';
|
|
2
|
+
export { drop } from './drop';
|
|
3
|
+
export { describe } from './describe';
|
|
4
|
+
export { fieldProperties, fieldDefinition, fieldName } from './definitions/field';
|
|
5
|
+
export { keyProperties, keyDefinition, indexType, indexLocation } from './definitions/key';
|
|
6
|
+
export { referenceProperties, reference } from './definitions/keyReference';
|
|
7
|
+
export { recordProperties, recordDefinition, recordPath, entityPath } from './definitions/record';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
require('core-js/modules/esnext.async-iterator.constructor.js')
|
|
4
|
+
require('core-js/modules/esnext.async-iterator.drop.js')
|
|
5
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
6
|
+
require('core-js/modules/esnext.iterator.drop.js')
|
|
7
|
+
Object.defineProperty(exports, '__esModule', {
|
|
8
|
+
value: true
|
|
9
|
+
})
|
|
10
|
+
Object.defineProperty(exports, 'create', {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _create.create
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
Object.defineProperty(exports, 'describe', {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _describe.describe
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
Object.defineProperty(exports, 'drop', {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return _drop.drop
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
var _create = require('./create')
|
|
29
|
+
var _drop = require('./drop')
|
|
30
|
+
var _describe = require('./describe')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return _create.create}}),Object.defineProperty(exports,"describe",{enumerable:!0,get:function(){return _describe.describe}}),Object.defineProperty(exports,"drop",{enumerable:!0,get:function(){return _drop.drop}});var _create=require("./create"),_drop=require("./drop"),_describe=require("./describe");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check whether any record in the referenced entity has the given property set to the given
|
|
3
|
+
* value - the mirror image of keyUnique(), which checks that no record already has a value.
|
|
4
|
+
* @param entity
|
|
5
|
+
* @param property
|
|
6
|
+
* @param value
|
|
7
|
+
*/
|
|
8
|
+
export declare const foreignKeyExists: (entity: string, property: string, value: any) => Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=foreignKeyExists.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.foreignKeyExists = void 0
|
|
7
|
+
const _retrieveRecords = require('../../utilities/retrieveRecords')
|
|
8
|
+
const _where = require('../../queries/where')
|
|
9
|
+
/**
|
|
10
|
+
* Check whether any record in the referenced entity has the given property set to the given
|
|
11
|
+
* value - the mirror image of keyUnique(), which checks that no record already has a value.
|
|
12
|
+
* @param entity
|
|
13
|
+
* @param property
|
|
14
|
+
* @param value
|
|
15
|
+
*/
|
|
16
|
+
const foreignKeyExists = async (entity, property, value) => {
|
|
17
|
+
const records = await (0, _retrieveRecords.retrieveRecords)(entity)
|
|
18
|
+
const found = (0, _where.where)(records, {
|
|
19
|
+
property,
|
|
20
|
+
comparator: '=',
|
|
21
|
+
value
|
|
22
|
+
})
|
|
23
|
+
return found.length > 0
|
|
24
|
+
}
|
|
25
|
+
exports.foreignKeyExists = foreignKeyExists
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.foreignKeyExists=void 0;var _retrieveRecords=require("../../utilities/retrieveRecords"),_where=require("../../queries/where");const foreignKeyExists=async(e,r,t)=>{const s=await(0,_retrieveRecords.retrieveRecords)(e);return(0,_where.where)(s,{property:r,comparator:"=",value:t}).length>0};exports.foreignKeyExists=foreignKeyExists;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.keyGenerate = void 0
|
|
7
|
+
const _keyUnique = require('./keyUnique')
|
|
8
|
+
const keyGenerate = async (entity, references = []) => {
|
|
9
|
+
let uuid = null
|
|
10
|
+
let isUnique = false
|
|
11
|
+
while (!isUnique) {
|
|
12
|
+
uuid = crypto.randomUUID()
|
|
13
|
+
isUnique = await (0, _keyUnique.keyUnique)(entity, references, uuid)
|
|
14
|
+
}
|
|
15
|
+
return uuid
|
|
16
|
+
}
|
|
17
|
+
exports.keyGenerate = keyGenerate
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyGenerate=void 0;var _keyUnique=require("./keyUnique");const keyGenerate=async(e,r=[])=>{let t=null,n=!1;for(;!n;)t=crypto.randomUUID(),n=await(0,_keyUnique.keyUnique)(e,r,t);return t};exports.keyGenerate=keyGenerate;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.keyUnique = void 0
|
|
7
|
+
const _retrieveRecords = require('../../utilities/retrieveRecords')
|
|
8
|
+
const _where = require('../../queries/where')
|
|
9
|
+
const keyUnique = async (entity, references = [], checkKey = null) => {
|
|
10
|
+
if (references.length !== 1) {
|
|
11
|
+
return false
|
|
12
|
+
}
|
|
13
|
+
const records = await (0, _retrieveRecords.retrieveRecords)(entity)
|
|
14
|
+
const found = (0, _where.where)(records, {
|
|
15
|
+
property: references[0],
|
|
16
|
+
comparator: '=',
|
|
17
|
+
value: checkKey
|
|
18
|
+
})
|
|
19
|
+
return !found.length
|
|
20
|
+
}
|
|
21
|
+
exports.keyUnique = keyUnique
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyUnique=void 0;var _retrieveRecords=require("../../utilities/retrieveRecords"),_where=require("../../queries/where");const keyUnique=async(e,r=[],t=null)=>{if(1!==r.length)return!1;const i=await(0,_retrieveRecords.retrieveRecords)(e);return!(0,_where.where)(i,{property:r[0],comparator:"=",value:t}).length};exports.keyUnique=keyUnique;
|