json-fs-query 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -6
- package/browser/jsonFsQuery.js +28271 -0
- package/browser/jsonFsQuery.min.js +1 -0
- package/dist/data/introspect/create.js +6 -4
- package/dist/data/introspect/create.min.js +1 -1
- package/dist/data/introspect/drop.js +2 -2
- package/dist/data/introspect/drop.min.js +1 -1
- package/dist/data/introspect/policies/hasDependents.d.ts +13 -0
- package/dist/data/introspect/policies/hasDependents.js +52 -0
- package/dist/data/introspect/policies/hasDependents.min.js +1 -0
- package/dist/data/introspect/policies/keyGenerate.js +1 -1
- package/dist/data/introspect/policies/keyGenerate.min.js +1 -1
- package/dist/data/introspect/policies/keyUnique.d.ts +9 -1
- package/dist/data/introspect/policies/keyUnique.js +19 -9
- package/dist/data/introspect/policies/keyUnique.min.js +1 -1
- package/dist/data/queries/deleteEntity.js +36 -15
- package/dist/data/queries/deleteEntity.min.js +1 -1
- package/dist/data/queries/groupBy.js +22 -22
- package/dist/data/queries/groupBy.min.js +1 -1
- package/dist/data/queries/insertEntity.js +14 -12
- package/dist/data/queries/insertEntity.min.js +1 -1
- package/dist/data/queries/readEntity.js +1 -1
- package/dist/data/queries/readEntity.min.js +1 -1
- package/dist/data/queries/updateEntity.js +68 -42
- package/dist/data/queries/updateEntity.min.js +1 -1
- package/dist/data/queries/where.js +1 -1
- package/dist/data/queries/where.min.js +1 -1
- package/dist/data/utilities/computeKeyValue.d.ts +13 -0
- package/dist/data/utilities/computeKeyValue.js +26 -0
- package/dist/data/utilities/computeKeyValue.min.js +1 -0
- package/dist/data/utilities/config.d.ts +28 -0
- package/dist/data/utilities/config.js +45 -0
- package/dist/data/utilities/config.min.js +1 -0
- package/dist/data/utilities/deregisterRecord.js +2 -2
- package/dist/data/utilities/deregisterRecord.min.js +1 -1
- package/dist/data/utilities/getConditionIndexedList.js +1 -1
- package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
- package/dist/data/utilities/getJoinIndexedList.js +2 -2
- package/dist/data/utilities/getJoinIndexedList.min.js +1 -1
- package/dist/data/utilities/getMatchingIndexes.js +2 -2
- package/dist/data/utilities/getMatchingIndexes.min.js +1 -1
- package/dist/data/utilities/matchIndexedJoins.js +2 -2
- package/dist/data/utilities/matchIndexedJoins.min.js +1 -1
- package/dist/data/utilities/reconcileJoin.js +26 -26
- package/dist/data/utilities/reconcileJoin.min.js +1 -1
- package/dist/data/utilities/reconcileJoins.js +26 -27
- package/dist/data/utilities/reconcileJoins.min.js +1 -1
- package/dist/data/utilities/registerRecord.js +2 -2
- package/dist/data/utilities/registerRecord.min.js +1 -1
- package/dist/data/utilities/removeFromIndex.js +2 -2
- package/dist/data/utilities/removeFromIndex.min.js +1 -1
- package/dist/data/utilities/restrictIndexedList.js +45 -45
- package/dist/data/utilities/restrictIndexedList.min.js +1 -1
- package/dist/data/utilities/retrieveFile.js +3 -3
- package/dist/data/utilities/retrieveFile.min.js +1 -1
- package/dist/data/utilities/retrieveIndexes.js +1 -1
- package/dist/data/utilities/retrieveIndexes.min.js +1 -1
- package/dist/data/utilities/updateIndex.js +2 -2
- package/dist/data/utilities/updateIndex.min.js +1 -1
- package/dist/data/utilities/useJoinClause.js +4 -4
- package/dist/data/utilities/useJoinClause.min.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/index.min.js +1 -1
- package/package.json +11 -4
- package/.browserslistrc +0 -1
- package/.nvmrc +0 -1
- package/MAIN.md +0 -15
- package/babel.config.js +0 -3
- package/build-tools.config.json +0 -30
- package/gulpfile.mjs +0 -15
- package/src/data/introspect/create.test.js +0 -67
- package/src/data/introspect/create.ts +0 -29
- package/src/data/introspect/definitions/field.test.js +0 -23
- package/src/data/introspect/definitions/field.ts +0 -48
- package/src/data/introspect/definitions/key.test.js +0 -100
- package/src/data/introspect/definitions/key.ts +0 -64
- package/src/data/introspect/definitions/keyReference.test.js +0 -8
- package/src/data/introspect/definitions/keyReference.ts +0 -23
- package/src/data/introspect/definitions/record.ts +0 -42
- package/src/data/introspect/describe.test.js +0 -36
- package/src/data/introspect/describe.ts +0 -9
- package/src/data/introspect/drop.test.js +0 -77
- package/src/data/introspect/drop.ts +0 -20
- package/src/data/introspect/index.ts +0 -8
- package/src/data/introspect/policies/foreignKeyExists.test.js +0 -44
- package/src/data/introspect/policies/foreignKeyExists.ts +0 -15
- package/src/data/introspect/policies/keyGenerate.ts +0 -11
- package/src/data/introspect/policies/keyUnique.ts +0 -11
- package/src/data/introspect/policies/typeCheck.test.js +0 -84
- package/src/data/introspect/policies/typeCheck.ts +0 -49
- package/src/data/introspect/policies/typeEnum.ts +0 -6
- package/src/data/introspect/policies/useDefault.ts +0 -6
- package/src/data/queries/deleteEntity.test.js +0 -86
- package/src/data/queries/deleteEntity.ts +0 -56
- package/src/data/queries/groupBy.test.js +0 -135
- package/src/data/queries/groupBy.ts +0 -16
- package/src/data/queries/insertEntity.test.js +0 -156
- package/src/data/queries/insertEntity.ts +0 -113
- package/src/data/queries/joinEntity.test.js +0 -109
- package/src/data/queries/joinEntity.ts +0 -20
- package/src/data/queries/mergeJoins.test.js +0 -174
- package/src/data/queries/mergeJoins.ts +0 -13
- package/src/data/queries/parser.test.js +0 -343
- package/src/data/queries/parser.ts +0 -24
- package/src/data/queries/query.test.js +0 -233
- package/src/data/queries/query.ts +0 -12
- package/src/data/queries/readEntity.test.js +0 -85
- package/src/data/queries/readEntity.ts +0 -8
- package/src/data/queries/sortBy.test.js +0 -131
- package/src/data/queries/sortBy.ts +0 -18
- package/src/data/queries/updateEntity.test.js +0 -228
- package/src/data/queries/updateEntity.ts +0 -162
- package/src/data/queries/where.test.js +0 -129
- package/src/data/queries/where.ts +0 -54
- package/src/data/utilities/deregisterRecord.test.js +0 -26
- package/src/data/utilities/deregisterRecord.ts +0 -24
- package/src/data/utilities/getConditionIndexedList.ts +0 -43
- package/src/data/utilities/getJoinIndexedList.ts +0 -53
- package/src/data/utilities/getMatchingIndexes.ts +0 -21
- package/src/data/utilities/matchIndexedJoins.ts +0 -45
- package/src/data/utilities/mergeJoin.test.js +0 -102
- package/src/data/utilities/mergeJoin.ts +0 -28
- package/src/data/utilities/parsers/findCommand.ts +0 -25
- package/src/data/utilities/parsers/findConditions.test.js +0 -38
- package/src/data/utilities/parsers/findConditions.ts +0 -32
- package/src/data/utilities/parsers/findGroupBy.ts +0 -20
- package/src/data/utilities/parsers/findInsertValues.test.js +0 -26
- package/src/data/utilities/parsers/findInsertValues.ts +0 -32
- package/src/data/utilities/parsers/findJoinClauses.ts +0 -29
- package/src/data/utilities/parsers/findJoinEntity.ts +0 -20
- package/src/data/utilities/parsers/findLimit.ts +0 -20
- package/src/data/utilities/parsers/findMergeJoins.ts +0 -27
- package/src/data/utilities/parsers/findOffset.ts +0 -20
- package/src/data/utilities/parsers/findSelects.ts +0 -31
- package/src/data/utilities/parsers/findSortClauses.ts +0 -31
- package/src/data/utilities/parsers/findUpdateValues.test.js +0 -37
- package/src/data/utilities/parsers/findUpdateValues.ts +0 -32
- package/src/data/utilities/parsers/isEntityProperty.ts +0 -1
- package/src/data/utilities/parsers/parseLiteralValue.test.js +0 -41
- package/src/data/utilities/parsers/parseLiteralValue.ts +0 -29
- package/src/data/utilities/parsers/parseQuery.ts +0 -73
- package/src/data/utilities/parsers/removeFromQuery.ts +0 -1
- package/src/data/utilities/parsers/splitEntityProperty.test.js +0 -8
- package/src/data/utilities/parsers/splitEntityProperty.ts +0 -17
- package/src/data/utilities/parsers/splitQueries.test.js +0 -33
- package/src/data/utilities/parsers/splitQueries.ts +0 -4
- package/src/data/utilities/reconcileJoin.test.js +0 -38
- package/src/data/utilities/reconcileJoin.ts +0 -23
- package/src/data/utilities/reconcileJoins.test.js +0 -160
- package/src/data/utilities/reconcileJoins.ts +0 -15
- package/src/data/utilities/registerRecord.test.js +0 -44
- package/src/data/utilities/registerRecord.ts +0 -44
- package/src/data/utilities/removeFromIndex.test.js +0 -44
- package/src/data/utilities/removeFromIndex.ts +0 -34
- package/src/data/utilities/restrictIndexedList.ts +0 -38
- package/src/data/utilities/retrieveFile.test.js +0 -49
- package/src/data/utilities/retrieveFile.ts +0 -19
- package/src/data/utilities/retrieveIndexes.ts +0 -17
- package/src/data/utilities/retrieveRecord.ts +0 -3
- package/src/data/utilities/retrieveRecords.test.js +0 -223
- package/src/data/utilities/retrieveRecords.ts +0 -16
- package/src/data/utilities/runQuery.test.js +0 -88
- package/src/data/utilities/runQuery.ts +0 -75
- package/src/data/utilities/updateIndex.test.js +0 -44
- package/src/data/utilities/updateIndex.ts +0 -45
- package/src/data/utilities/useJoinClause.test.js +0 -94
- package/src/data/utilities/useJoinClause.ts +0 -44
- package/src/global.d.ts +0 -1
- package/src/index.test.js +0 -52
- package/src/index.ts +0 -17
- package/test-data/__RECORDS.json +0 -32
- package/test-data/__indexes/exercise_muscle/fk_exercise_id.json +0 -14
- package/test-data/__indexes/exercise_muscle/fk_muscle_id.json +0 -14
- package/test-data/__indexes/exercise_muscle/pk__id.json +0 -14
- package/test-data/__indexes/exercises/pk__id.json +0 -14
- package/test-data/__indexes/muscles/pk__id.json +0 -58
- package/test-data/__indexes/workouts/fk_exercise_id.json +0 -23
- package/test-data/__indexes/workouts/index_date.json +0 -18
- package/test-data/__indexes/workouts/pk__id.json +0 -26
- package/test-data/copyDatabase.ts +0 -64
- package/test-data/exercise_muscle/bench_press_pectorals.json +0 -6
- package/test-data/exercise_muscle/deadlift_hamstrings.json +0 -6
- package/test-data/exercise_muscle/squat_quadriceps.json +0 -6
- package/test-data/exercise_muscle.json +0 -69
- package/test-data/exercises/bench_press.json +0 -5
- package/test-data/exercises/deadlift.json +0 -5
- package/test-data/exercises/squat.json +0 -5
- package/test-data/exercises.json +0 -34
- package/test-data/muscles/abdominal.json +0 -6
- package/test-data/muscles/biceps.json +0 -6
- package/test-data/muscles/calves.json +0 -6
- package/test-data/muscles/deltoids.json +0 -6
- package/test-data/muscles/erector_spinae.json +0 -6
- package/test-data/muscles/forearms.json +0 -6
- package/test-data/muscles/gluteus_maximus.json +0 -6
- package/test-data/muscles/hamstrings.json +0 -6
- package/test-data/muscles/latissimus_dorsi.json +0 -6
- package/test-data/muscles/obliques.json +0 -6
- package/test-data/muscles/pectorals.json +0 -6
- package/test-data/muscles/quadriceps.json +0 -6
- package/test-data/muscles/trapezius.json +0 -6
- package/test-data/muscles/triceps.json +0 -6
- package/test-data/muscles.json +0 -50
- package/test-data/workouts/2024-06-02-001.json +0 -10
- package/test-data/workouts/2024-06-02-002.json +0 -10
- package/test-data/workouts/2024-06-02-003.json +0 -10
- package/test-data/workouts/2024-06-05-001.json +0 -10
- package/test-data/workouts/2024-06-05-002.json +0 -10
- package/test-data/workouts/2024-06-05-003.json +0 -10
- package/test-data/workouts.json +0 -84
- package/tsconfig.json +0 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRecord=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRecord=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");var _config=require("./config");const{readFile:readFile,writeFile:writeFile}=require("fs/promises"),defaultRegistry=()=>({path:"",definition:[{name:"path",type:"string",optional:!1,autoGenerate:!1},{name:"definition",type:"object",optional:!1,autoGenerate:!1},{name:"keys",type:"array",optional:!1,autoGenerate:!1},{name:"entries",type:"array",optional:!1,autoGenerate:!1}],keys:[],entries:[]}),registerRecord=async e=>{const t=`${(0,_config.getSetting)("databasePath","database/")}__RECORDS.json`;let r;try{r=JSON.parse(await readFile(t,"utf8"))}catch(e){r=defaultRegistry()}const i=`${e}.json`;return r.entries.includes(i)||r.entries.push(i),await writeFile(t,JSON.stringify(r,null,2)),r};exports.registerRecord=registerRecord;
|
|
@@ -8,7 +8,7 @@ require('core-js/modules/es.json.stringify.js')
|
|
|
8
8
|
require('core-js/modules/esnext.iterator.constructor.js')
|
|
9
9
|
require('core-js/modules/esnext.iterator.filter.js')
|
|
10
10
|
require('core-js/modules/esnext.iterator.map.js')
|
|
11
|
-
const
|
|
11
|
+
const _config = require('./config')
|
|
12
12
|
const {
|
|
13
13
|
readFile,
|
|
14
14
|
writeFile
|
|
@@ -26,7 +26,7 @@ const removeFromIndex = async (path = '', key = null, value = undefined, fileNam
|
|
|
26
26
|
if (!key || !key.lookup) {
|
|
27
27
|
return null
|
|
28
28
|
}
|
|
29
|
-
const databasePath =
|
|
29
|
+
const databasePath = (0, _config.getSetting)('databasePath', 'database/')
|
|
30
30
|
const indexPath = `${databasePath}__indexes/${path}/${key.lookup}`
|
|
31
31
|
let index = []
|
|
32
32
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.map.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.map.js");var _config=require("./config");const{readFile:readFile,writeFile:writeFile}=require("fs/promises"),removeFromIndex=async(e="",r=null,t=void 0,o="")=>{if(!r||!r.lookup)return null;const i=`${(0,_config.getSetting)("databasePath","database/")}__indexes/${e}/${r.lookup}`;let s=[];try{s=JSON.parse(await readFile(i,"utf8"))}catch(e){return null}return s=s.map((e=>e.value==t?{value:e.value,record:e.record.filter((e=>e!==o))}:e)).filter((e=>e.record.length)),await writeFile(i,JSON.stringify(s,null,2)),s};exports.removeFromIndex=removeFromIndex;
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
})
|
|
6
|
-
exports.restrictIndexedList = void 0
|
|
7
|
-
const _splitEntityProperty = require('./parsers/splitEntityProperty')
|
|
8
|
-
const restrictIndexedList = (joinClause, filterJoins, indexedClone) => {
|
|
9
|
-
const {
|
|
10
|
-
entity: entityA,
|
|
11
|
-
property: propertyA
|
|
12
|
-
} = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyA)
|
|
13
|
-
const {
|
|
14
|
-
entity: entityB,
|
|
15
|
-
property: propertyB
|
|
16
|
-
} = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyB)
|
|
17
|
-
if (
|
|
18
|
-
const existingEntities = filterJoins[entityA]
|
|
19
|
-
if (!
|
|
20
|
-
indexedClone[entityA] = {}
|
|
21
|
-
}
|
|
22
|
-
if (!indexedClone[entityA]
|
|
23
|
-
indexedClone[entityA][propertyA] = {}
|
|
24
|
-
}
|
|
25
|
-
indexedClone[entityA][propertyA] = [{
|
|
26
|
-
value: existingEntities[0][propertyA],
|
|
27
|
-
record: existingEntities
|
|
28
|
-
}]
|
|
29
|
-
}
|
|
30
|
-
if (
|
|
31
|
-
const existingEntities = filterJoins[entityB]
|
|
32
|
-
if (!
|
|
33
|
-
indexedClone[entityB] = {}
|
|
34
|
-
}
|
|
35
|
-
if (!indexedClone[entityB]
|
|
36
|
-
indexedClone[entityB][propertyB] = {}
|
|
37
|
-
}
|
|
38
|
-
indexedClone[entityB][propertyB] = [{
|
|
39
|
-
value: existingEntities[0][propertyB],
|
|
40
|
-
record: existingEntities
|
|
41
|
-
}]
|
|
42
|
-
}
|
|
43
|
-
return indexedClone
|
|
44
|
-
}
|
|
45
|
-
exports.restrictIndexedList = restrictIndexedList
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.restrictIndexedList = void 0
|
|
7
|
+
const _splitEntityProperty = require('./parsers/splitEntityProperty')
|
|
8
|
+
const restrictIndexedList = (joinClause, filterJoins, indexedClone) => {
|
|
9
|
+
const {
|
|
10
|
+
entity: entityA,
|
|
11
|
+
property: propertyA
|
|
12
|
+
} = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyA)
|
|
13
|
+
const {
|
|
14
|
+
entity: entityB,
|
|
15
|
+
property: propertyB
|
|
16
|
+
} = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyB)
|
|
17
|
+
if (Object.prototype.hasOwnProperty.call(filterJoins, entityA)) {
|
|
18
|
+
const existingEntities = filterJoins[entityA]
|
|
19
|
+
if (!Object.prototype.hasOwnProperty.call(indexedClone, entityA)) {
|
|
20
|
+
indexedClone[entityA] = {}
|
|
21
|
+
}
|
|
22
|
+
if (!Object.prototype.hasOwnProperty.call(indexedClone[entityA], propertyA)) {
|
|
23
|
+
indexedClone[entityA][propertyA] = {}
|
|
24
|
+
}
|
|
25
|
+
indexedClone[entityA][propertyA] = [{
|
|
26
|
+
value: existingEntities[0][propertyA],
|
|
27
|
+
record: existingEntities
|
|
28
|
+
}]
|
|
29
|
+
}
|
|
30
|
+
if (Object.prototype.hasOwnProperty.call(filterJoins, entityB)) {
|
|
31
|
+
const existingEntities = filterJoins[entityB]
|
|
32
|
+
if (!Object.prototype.hasOwnProperty.call(indexedClone, entityB)) {
|
|
33
|
+
indexedClone[entityB] = {}
|
|
34
|
+
}
|
|
35
|
+
if (!Object.prototype.hasOwnProperty.call(indexedClone[entityB], propertyB)) {
|
|
36
|
+
indexedClone[entityB][propertyB] = {}
|
|
37
|
+
}
|
|
38
|
+
indexedClone[entityB][propertyB] = [{
|
|
39
|
+
value: existingEntities[0][propertyB],
|
|
40
|
+
record: existingEntities
|
|
41
|
+
}]
|
|
42
|
+
}
|
|
43
|
+
return indexedClone
|
|
44
|
+
}
|
|
45
|
+
exports.restrictIndexedList = restrictIndexedList
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictIndexedList=void 0;var _splitEntityProperty=require("./parsers/splitEntityProperty");const restrictIndexedList=(t,r,e)=>{const{entity:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictIndexedList=void 0;var _splitEntityProperty=require("./parsers/splitEntityProperty");const restrictIndexedList=(t,r,e)=>{const{entity:p,property:o}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyA),{entity:s,property:y}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyB);if(Object.prototype.hasOwnProperty.call(r,p)){const t=r[p];Object.prototype.hasOwnProperty.call(e,p)||(e[p]={}),Object.prototype.hasOwnProperty.call(e[p],o)||(e[p][o]={}),e[p][o]=[{value:t[0][o],record:t}]}if(Object.prototype.hasOwnProperty.call(r,s)){const t=r[s];Object.prototype.hasOwnProperty.call(e,s)||(e[s]={}),Object.prototype.hasOwnProperty.call(e[s],y)||(e[s][y]={}),e[s][y]=[{value:t[0][y],record:t}]}return e};exports.restrictIndexedList=restrictIndexedList;
|
|
@@ -6,18 +6,18 @@ Object.defineProperty(exports, '__esModule', {
|
|
|
6
6
|
})
|
|
7
7
|
exports.retrieveFile = void 0
|
|
8
8
|
const jsEnv = _interopRequireWildcard(require('browser-or-node'))
|
|
9
|
-
const
|
|
9
|
+
const _config = require('./config')
|
|
10
10
|
function _interopRequireWildcard (e, t) { if (typeof WeakMap === 'function') var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; let o; let i; const f = { __proto__: null, default: e }; if (e === null || typeof e !== 'object' && typeof e !== 'function') return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f) } for (const t in e) t !== 'default' && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f })(e, t) }
|
|
11
11
|
const retrieveFile = async path => {
|
|
12
12
|
let retrieveFn = url => fetch(url).then(res => res.json())
|
|
13
|
-
const relativePath = jsEnv.isBrowser ?
|
|
13
|
+
const relativePath = jsEnv.isBrowser ? (0, _config.getSetting)('relativePath', '') : ''
|
|
14
14
|
if (jsEnv.isNode) {
|
|
15
15
|
const {
|
|
16
16
|
readFile
|
|
17
17
|
} = require('fs/promises')
|
|
18
18
|
retrieveFn = url => readFile(url).then(res => JSON.parse(res))
|
|
19
19
|
}
|
|
20
|
-
const databasePath =
|
|
20
|
+
const databasePath = (0, _config.getSetting)('databasePath', 'database/')
|
|
21
21
|
const fetchUrl = `${relativePath}${databasePath}${path}`
|
|
22
22
|
const recordInfo = await retrieveFn(fetchUrl).catch(err => console.error(err))
|
|
23
23
|
if (!recordInfo) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveFile=void 0;var jsEnv=_interopRequireWildcard(require("browser-or-node")),
|
|
1
|
+
"use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveFile=void 0;var jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("./config");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var o,n,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(o=r?i:t){if(o.has(e))return o.get(e);o.set(e,a)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?o(a,r,n):a[r]=e[r]);return a})(e,r)}const retrieveFile=async e=>{let r=e=>fetch(e).then((e=>e.json())),t=jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):"";if(jsEnv.isNode){const{readFile:e}=require("fs/promises");r=r=>e(r).then((e=>JSON.parse(e)))}const i=`${t}${(0,_config.getSetting)("databasePath","database/")}${e}`,o=await r(i).catch((e=>console.error(e)));if(!o)throw new Error(`Could not read ${e}`);return o};exports.retrieveFile=retrieveFile;
|
|
@@ -8,7 +8,7 @@ require('core-js/modules/es.array.includes.js')
|
|
|
8
8
|
const _retrieveFile = require('./retrieveFile')
|
|
9
9
|
const _retrieveRecord = require('./retrieveRecord')
|
|
10
10
|
const retrieveIndexes = async (entity = '', properties = [], recordData = {}) => {
|
|
11
|
-
if (!
|
|
11
|
+
if (!Object.prototype.hasOwnProperty.call(recordData, entity)) {
|
|
12
12
|
recordData[entity] = await (0, _retrieveRecord.retrieveRecord)(entity)
|
|
13
13
|
}
|
|
14
14
|
const indexSet = {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0,require("core-js/modules/es.array.includes.js");var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord");const retrieveIndexes=async(e="",r=[],
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0,require("core-js/modules/es.array.includes.js");var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord");const retrieveIndexes=async(e="",r=[],t={})=>{Object.prototype.hasOwnProperty.call(t,e)||(t[e]=await(0,_retrieveRecord.retrieveRecord)(e));const i={};for(let o of r)for(let r of t[e].keys)r.fields.includes(o)&&(i[o]=await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`));return i};exports.retrieveIndexes=retrieveIndexes;
|
|
@@ -8,7 +8,7 @@ require('core-js/modules/es.array.includes.js')
|
|
|
8
8
|
require('core-js/modules/es.json.stringify.js')
|
|
9
9
|
require('core-js/modules/esnext.iterator.constructor.js')
|
|
10
10
|
require('core-js/modules/esnext.iterator.find.js')
|
|
11
|
-
const
|
|
11
|
+
const _config = require('./config')
|
|
12
12
|
const {
|
|
13
13
|
readFile,
|
|
14
14
|
writeFile,
|
|
@@ -27,7 +27,7 @@ const updateIndex = async (path = '', key = null, value = undefined, fileName =
|
|
|
27
27
|
if (!key || !key.lookup) {
|
|
28
28
|
return null
|
|
29
29
|
}
|
|
30
|
-
const databasePath =
|
|
30
|
+
const databasePath = (0, _config.getSetting)('databasePath', 'database/')
|
|
31
31
|
const indexDir = `${databasePath}__indexes/${path}`
|
|
32
32
|
const indexPath = `${indexDir}/${key.lookup}`
|
|
33
33
|
let index = []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateIndex=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js");
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateIndex=void 0,require("core-js/modules/es.array.includes.js"),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 _config=require("./config");const{readFile:readFile,writeFile:writeFile,mkdir:mkdir}=require("fs/promises"),updateIndex=async(e="",r=null,i=void 0,s="")=>{if(!r||!r.lookup)return null;const t=`${(0,_config.getSetting)("databasePath","database/")}__indexes/${e}`,o=`${t}/${r.lookup}`;let u=[];try{u=JSON.parse(await readFile(o,"utf8"))}catch(e){u=[]}const d=u.find((e=>e.value==i));return d?d.record.includes(s)||d.record.push(s):u.push({value:i,record:[s]}),await mkdir(t,{recursive:!0}),await writeFile(o,JSON.stringify(u,null,2)),u};exports.updateIndex=updateIndex;
|
|
@@ -24,16 +24,16 @@ const useJoinClause = async ({
|
|
|
24
24
|
entity: entityB,
|
|
25
25
|
property: propB
|
|
26
26
|
} = (0, _splitEntityProperty.splitEntityProperty)(propertyB)
|
|
27
|
-
if (!
|
|
27
|
+
if (!Object.prototype.hasOwnProperty.call(dataSets, entityA)) {
|
|
28
28
|
dataSets = await (0, _readEntity.readEntity)(entityA, dataSets)
|
|
29
29
|
}
|
|
30
|
-
if (!
|
|
30
|
+
if (!Object.prototype.hasOwnProperty.call(dataSets, entityB)) {
|
|
31
31
|
dataSets = await (0, _readEntity.readEntity)(entityB, dataSets)
|
|
32
32
|
}
|
|
33
|
-
if (!
|
|
33
|
+
if (!Object.prototype.hasOwnProperty.call(filterJoins, entityA)) {
|
|
34
34
|
filterJoins[entityA] = _siFunciona.default.cloneObject(dataSets[entityA])
|
|
35
35
|
}
|
|
36
|
-
if (!
|
|
36
|
+
if (!Object.prototype.hasOwnProperty.call(filterJoins, entityB)) {
|
|
37
37
|
filterJoins[entityB] = _siFunciona.default.cloneObject(dataSets[entityB])
|
|
38
38
|
}
|
|
39
39
|
filterJoins[entityA] = filterJoins[entityB].reduce((dataA, dataB) => _siFunciona.default.mergeArrays(dataA, (0, _where.where)(filterJoins[entityA], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useJoinClause=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");var _readEntity=require("../queries/readEntity"),_where=require("../queries/where"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_siFunciona=_interopRequireDefault(require("si-funciona"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const useJoinClause=async({propertyA:e=null,comparator:r="=",propertyB:t=null}={},
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useJoinClause=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");var _readEntity=require("../queries/readEntity"),_where=require("../queries/where"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_siFunciona=_interopRequireDefault(require("si-funciona"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const useJoinClause=async({propertyA:e=null,comparator:r="=",propertyB:t=null}={},o={},i={})=>{const{entity:a,property:n}=(0,_splitEntityProperty.splitEntityProperty)(e),{entity:s,property:u}=(0,_splitEntityProperty.splitEntityProperty)(t);return Object.prototype.hasOwnProperty.call(o,a)||(o=await(0,_readEntity.readEntity)(a,o)),Object.prototype.hasOwnProperty.call(o,s)||(o=await(0,_readEntity.readEntity)(s,o)),Object.prototype.hasOwnProperty.call(i,a)||(i[a]=_siFunciona.default.cloneObject(o[a])),Object.prototype.hasOwnProperty.call(i,s)||(i[s]=_siFunciona.default.cloneObject(o[s])),i[a]=i[s].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(i[a],{property:n,comparator:r,value:t[u]}))),[]),i[s]=i[a].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(i[s],{property:u,comparator:r,value:t[n]}))),[]),i};exports.useJoinClause=useJoinClause;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { query } from './data/queries/query';
|
|
2
2
|
export { create, drop, describe } from './data/introspect';
|
|
3
|
+
export { configure } from './data/utilities/config';
|
|
3
4
|
export { fieldProperties, fieldDefinition, fieldName, keyProperties, keyDefinition, indexType, indexLocation, referenceProperties, reference, recordProperties, recordDefinition, recordPath, entityPath } from './data/introspect';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,12 @@ require('core-js/modules/esnext.iterator.drop.js')
|
|
|
7
7
|
Object.defineProperty(exports, '__esModule', {
|
|
8
8
|
value: true
|
|
9
9
|
})
|
|
10
|
+
Object.defineProperty(exports, 'configure', {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _config.configure
|
|
14
|
+
}
|
|
15
|
+
})
|
|
10
16
|
Object.defineProperty(exports, 'create', {
|
|
11
17
|
enumerable: true,
|
|
12
18
|
get: function () {
|
|
@@ -33,3 +39,4 @@ Object.defineProperty(exports, 'query', {
|
|
|
33
39
|
})
|
|
34
40
|
var _query = require('./data/queries/query')
|
|
35
41
|
var _introspect = require('./data/introspect')
|
|
42
|
+
var _config = require('./data/utilities/config')
|
package/dist/index.min.js
CHANGED
|
@@ -1 +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 _introspect.create}}),Object.defineProperty(exports,"describe",{enumerable:!0,get:function(){return _introspect.describe}}),Object.defineProperty(exports,"drop",{enumerable:!0,get:function(){return _introspect.drop}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return _query.query}});var _query=require("./data/queries/query"),_introspect=require("./data/introspect");
|
|
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,"configure",{enumerable:!0,get:function(){return _config.configure}}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return _introspect.create}}),Object.defineProperty(exports,"describe",{enumerable:!0,get:function(){return _introspect.describe}}),Object.defineProperty(exports,"drop",{enumerable:!0,get:function(){return _introspect.drop}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return _query.query}});var _query=require("./data/queries/query"),_introspect=require("./data/introspect"),_config=require("./data/utilities/config");
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-fs-query",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Use json files to manage and read data.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"unpkg": "browser/jsonFsQuery.min.js",
|
|
8
|
+
"jsdelivr": "browser/jsonFsQuery.min.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"browser"
|
|
12
|
+
],
|
|
7
13
|
"scripts": {
|
|
8
14
|
"build": "gulp build",
|
|
9
15
|
"dev": "gulp",
|
|
@@ -33,12 +39,13 @@
|
|
|
33
39
|
"homepage": "https://github.com/jheagle/json-file-db#readme",
|
|
34
40
|
"devDependencies": {
|
|
35
41
|
"gulp": "^5.0.1",
|
|
36
|
-
"js-build-tools": "^5.
|
|
37
|
-
"
|
|
38
|
-
"
|
|
42
|
+
"js-build-tools": "^5.4.0",
|
|
43
|
+
"test-filesystem": "^1.3.14",
|
|
44
|
+
"typedoc": "^0.28.20"
|
|
39
45
|
},
|
|
40
46
|
"dependencies": {
|
|
41
47
|
"browser-or-node": "^3.0.0",
|
|
48
|
+
"core-js": "^3.50.0",
|
|
42
49
|
"si-funciona": "^2.3.4"
|
|
43
50
|
}
|
|
44
51
|
}
|
package/.browserslistrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
last 2 versions, > 0.25%, not dead
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
v24
|
package/MAIN.md
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
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/babel.config.js
DELETED
package/build-tools.config.json
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
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
|
-
}
|
package/gulpfile.mjs
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { create } from './create'
|
|
2
|
-
import { testHelpers } from 'js-build-tools/testHelpers'
|
|
3
|
-
|
|
4
|
-
const databasePath = 'create-database/'
|
|
5
|
-
const gulpConfig = testHelpers.gulpConfig
|
|
6
|
-
gulpConfig.set('databasePath', databasePath)
|
|
7
|
-
testHelpers.setDefaults(databasePath)
|
|
8
|
-
|
|
9
|
-
beforeEach(testHelpers.beforeEach)
|
|
10
|
-
|
|
11
|
-
afterEach(testHelpers.afterEach)
|
|
12
|
-
|
|
13
|
-
describe('create', () => {
|
|
14
|
-
test('create a new record', async () => {
|
|
15
|
-
expect.assertions(3)
|
|
16
|
-
const recordName = 'foo'
|
|
17
|
-
const definition = [
|
|
18
|
-
{
|
|
19
|
-
name: '_id',
|
|
20
|
-
type: 'string',
|
|
21
|
-
optional: false,
|
|
22
|
-
autoGenerate: true
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
name: 'bar',
|
|
26
|
-
type: 'string',
|
|
27
|
-
optional: true,
|
|
28
|
-
autoGenerate: false
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
const keys = [
|
|
32
|
-
{
|
|
33
|
-
type: 'primary',
|
|
34
|
-
fields: [
|
|
35
|
-
'_id'
|
|
36
|
-
],
|
|
37
|
-
lookup: 'pk__id.json'
|
|
38
|
-
}
|
|
39
|
-
]
|
|
40
|
-
const result = await create(recordName, definition, keys)
|
|
41
|
-
expect(result).toEqual({
|
|
42
|
-
path: recordName,
|
|
43
|
-
definition: definition,
|
|
44
|
-
keys: keys,
|
|
45
|
-
entries: []
|
|
46
|
-
})
|
|
47
|
-
expect(testHelpers.fileExists(`${databasePath}${recordName}.json`)).toBeTruthy()
|
|
48
|
-
expect(testHelpers.fileExists(`${databasePath}${recordName}`)).toBeTruthy()
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
test('registers the new record in __RECORDS', async () => {
|
|
52
|
-
await create('foo', [], [])
|
|
53
|
-
const { readFile } = require('fs/promises')
|
|
54
|
-
const registry = JSON.parse(await readFile(`${databasePath}__RECORDS.json`, 'utf8'))
|
|
55
|
-
expect(registry.entries).toContain('foo.json')
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
test('creates the database directory itself when it does not already exist', async () => {
|
|
59
|
-
const { rm } = require('fs/promises')
|
|
60
|
-
await rm(databasePath, { recursive: true, force: true })
|
|
61
|
-
expect(testHelpers.fileExists(databasePath)).toBeFalsy()
|
|
62
|
-
|
|
63
|
-
await create('foo', [], [])
|
|
64
|
-
|
|
65
|
-
expect(testHelpers.fileExists(`${databasePath}foo.json`)).toBeTruthy()
|
|
66
|
-
})
|
|
67
|
-
})
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { fileExists } from 'test-filesystem'
|
|
2
|
-
import { record, recordDefinition } from './definitions/record'
|
|
3
|
-
import { keyProperties } from './definitions/key'
|
|
4
|
-
import { fieldProperties } from './definitions/field'
|
|
5
|
-
import { registerRecord } from '../utilities/registerRecord'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Create a new record.
|
|
9
|
-
* @param recordName
|
|
10
|
-
* @param definition
|
|
11
|
-
* @param keys
|
|
12
|
-
*/
|
|
13
|
-
export const create = async (recordName: string, definition: fieldProperties[] = [], keys: keyProperties[] = []): Promise<recordDefinition | null> => {
|
|
14
|
-
const gulpConfig = require('js-build-tools/gulp.config')
|
|
15
|
-
const { writeFile, mkdir } = require('fs/promises')
|
|
16
|
-
const databasePath = gulpConfig.get('databasePath', 'database/')
|
|
17
|
-
if (recordName === '__RECORDS') {
|
|
18
|
-
return null
|
|
19
|
-
}
|
|
20
|
-
if (fileExists(`${databasePath}${recordName}.json`)) {
|
|
21
|
-
return null
|
|
22
|
-
}
|
|
23
|
-
await mkdir(databasePath, { recursive: true })
|
|
24
|
-
const recordContent = record({ path: recordName, definition: definition, keys: keys })
|
|
25
|
-
await writeFile(`${databasePath}${recordName}.json`, JSON.stringify(recordContent, null, 2))
|
|
26
|
-
await mkdir(`${databasePath}${recordName}`, { recursive: true })
|
|
27
|
-
await registerRecord(recordName)
|
|
28
|
-
return recordContent
|
|
29
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { field } from './field'
|
|
2
|
-
|
|
3
|
-
describe('field', () => {
|
|
4
|
-
test('can create a field with default value', () => {
|
|
5
|
-
const generatedField = {
|
|
6
|
-
name: 'quantity',
|
|
7
|
-
type: 'string',
|
|
8
|
-
optional: true,
|
|
9
|
-
autoGenerate: false,
|
|
10
|
-
default: 0
|
|
11
|
-
}
|
|
12
|
-
expect(
|
|
13
|
-
field({
|
|
14
|
-
name: generatedField.name,
|
|
15
|
-
type: generatedField.type,
|
|
16
|
-
optional: generatedField.optional,
|
|
17
|
-
autoGenerate: generatedField.autoGenerate,
|
|
18
|
-
useDefault: true,
|
|
19
|
-
defaultValue: generatedField.default
|
|
20
|
-
})
|
|
21
|
-
).toEqual(generatedField)
|
|
22
|
-
})
|
|
23
|
-
})
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export type fieldName = string;
|
|
2
|
-
|
|
3
|
-
export type fieldDefinition = {
|
|
4
|
-
name: fieldName
|
|
5
|
-
type: string
|
|
6
|
-
optional: boolean
|
|
7
|
-
default?: any
|
|
8
|
-
autoGenerate: boolean
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type fieldProperties = {
|
|
12
|
-
name?: string
|
|
13
|
-
type?: string
|
|
14
|
-
optional?: boolean
|
|
15
|
-
useDefault?: boolean
|
|
16
|
-
defaultValue?: any
|
|
17
|
-
autoGenerate?: boolean
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Generate a field for a record.
|
|
22
|
-
* @param properties
|
|
23
|
-
* @param properties.name
|
|
24
|
-
* @param properties.type
|
|
25
|
-
* @param properties.optional
|
|
26
|
-
* @param properties.useDefault
|
|
27
|
-
* @param properties.defaultValue
|
|
28
|
-
* @param properties.autoGenerate
|
|
29
|
-
*/
|
|
30
|
-
export const field = ({
|
|
31
|
-
name = '',
|
|
32
|
-
type = 'string',
|
|
33
|
-
optional = false,
|
|
34
|
-
useDefault = false,
|
|
35
|
-
defaultValue = '',
|
|
36
|
-
autoGenerate = false
|
|
37
|
-
}: fieldProperties = {}): fieldDefinition => {
|
|
38
|
-
const returnField = {
|
|
39
|
-
name: name,
|
|
40
|
-
type: type,
|
|
41
|
-
optional: optional,
|
|
42
|
-
autoGenerate: autoGenerate,
|
|
43
|
-
}
|
|
44
|
-
if (useDefault) {
|
|
45
|
-
returnField['default'] = defaultValue
|
|
46
|
-
}
|
|
47
|
-
return returnField
|
|
48
|
-
}
|