sensemaking 0.12.2 → 0.13.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/dist/cjs/cli/download.js +4 -4
- package/dist/cjs/cli/download.js.map +1 -1
- package/dist/cjs/cli/init.js +4 -4
- package/dist/cjs/cli/init.js.map +1 -1
- package/dist/cjs/cli/map.js +4 -4
- package/dist/cjs/cli/map.js.map +1 -1
- package/dist/cjs/cli/named.js +2 -2
- package/dist/cjs/cli/named.js.map +1 -1
- package/dist/cjs/cli/path.js +6 -6
- package/dist/cjs/cli/path.js.map +1 -1
- package/dist/cjs/cli/peek.js +4 -4
- package/dist/cjs/cli/peek.js.map +1 -1
- package/dist/cjs/cli/related.js +4 -4
- package/dist/cjs/cli/related.js.map +1 -1
- package/dist/cjs/cli/search.js +4 -4
- package/dist/cjs/cli/search.js.map +1 -1
- package/dist/cjs/cli/shared.d.cts +2 -2
- package/dist/cjs/cli/shared.d.ts +2 -2
- package/dist/cjs/cli/shared.js +5 -5
- package/dist/cjs/cli/shared.js.map +1 -1
- package/dist/cjs/cli/status.js +16 -16
- package/dist/cjs/cli/status.js.map +1 -1
- package/dist/cjs/cli/types.d.cts +1 -1
- package/dist/cjs/cli/types.d.ts +1 -1
- package/dist/cjs/cli.js +3 -3
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/index.d.cts +10 -0
- package/dist/cjs/commands/index.d.ts +10 -0
- package/dist/cjs/commands/index.js +42 -0
- package/dist/cjs/commands/index.js.map +1 -0
- package/dist/cjs/commands/map.d.cts +21 -0
- package/dist/cjs/commands/map.d.ts +21 -0
- package/dist/cjs/commands/map.js +90 -0
- package/dist/cjs/commands/map.js.map +1 -0
- package/dist/cjs/commands/peek.d.cts +20 -0
- package/dist/cjs/commands/peek.d.ts +20 -0
- package/dist/cjs/commands/peek.js +175 -0
- package/dist/cjs/commands/peek.js.map +1 -0
- package/dist/cjs/commands/related.d.cts +6 -0
- package/dist/cjs/commands/related.d.ts +6 -0
- package/dist/cjs/commands/related.js +232 -0
- package/dist/cjs/commands/related.js.map +1 -0
- package/dist/cjs/commands/scope.d.cts +10 -0
- package/dist/cjs/commands/scope.d.ts +10 -0
- package/dist/cjs/commands/scope.js +124 -0
- package/dist/cjs/commands/scope.js.map +1 -0
- package/dist/cjs/commands/search.d.cts +12 -0
- package/dist/cjs/commands/search.d.ts +12 -0
- package/dist/cjs/{commands.js → commands/search.js} +20 -358
- package/dist/cjs/commands/search.js.map +1 -0
- package/dist/cjs/commands/status.d.cts +9 -0
- package/dist/cjs/commands/status.d.ts +9 -0
- package/dist/cjs/commands/status.js +25 -0
- package/dist/cjs/commands/status.js.map +1 -0
- package/dist/cjs/config/access.d.cts +19 -0
- package/dist/cjs/config/access.d.ts +19 -0
- package/dist/cjs/config/access.js +149 -0
- package/dist/cjs/config/access.js.map +1 -0
- package/dist/cjs/config/index.d.cts +5 -0
- package/dist/cjs/config/index.d.ts +5 -0
- package/dist/cjs/config/index.js +77 -0
- package/dist/cjs/config/index.js.map +1 -0
- package/dist/cjs/config/load.d.cts +8 -0
- package/dist/cjs/config/load.d.ts +8 -0
- package/dist/cjs/config/load.js +448 -0
- package/dist/cjs/config/load.js.map +1 -0
- package/dist/cjs/config/resolve.d.cts +6 -0
- package/dist/cjs/config/resolve.d.ts +6 -0
- package/dist/cjs/config/resolve.js +50 -0
- package/dist/cjs/config/resolve.js.map +1 -0
- package/dist/{esm/config.d.ts → cjs/config/types.d.cts} +2 -32
- package/dist/cjs/{config.d.cts → config/types.d.ts} +2 -32
- package/dist/cjs/config/types.js +39 -0
- package/dist/cjs/config/types.js.map +1 -0
- package/dist/cjs/config/validate.d.cts +4 -0
- package/dist/cjs/config/validate.d.ts +4 -0
- package/dist/cjs/config/validate.js +363 -0
- package/dist/cjs/config/validate.js.map +1 -0
- package/dist/cjs/db/index.d.cts +4 -0
- package/dist/cjs/db/index.d.ts +4 -0
- package/dist/cjs/db/index.js +42 -0
- package/dist/cjs/db/index.js.map +1 -0
- package/dist/cjs/{db.d.cts → db/open.d.cts} +2 -8
- package/dist/cjs/{db.d.ts → db/open.d.ts} +2 -8
- package/dist/cjs/db/open.js +223 -0
- package/dist/cjs/db/open.js.map +1 -0
- package/dist/cjs/db/reconcile.d.cts +9 -0
- package/dist/cjs/db/reconcile.d.ts +9 -0
- package/dist/cjs/{db.js → db/reconcile.js} +24 -261
- package/dist/cjs/db/reconcile.js.map +1 -0
- package/dist/cjs/db/shared.d.cts +5 -0
- package/dist/cjs/db/shared.d.ts +5 -0
- package/dist/cjs/db/shared.js +45 -0
- package/dist/cjs/db/shared.js.map +1 -0
- package/dist/cjs/features/embed.d.cts +1 -1
- package/dist/cjs/features/embed.d.ts +1 -1
- package/dist/cjs/features/embed.js +4 -3
- package/dist/cjs/features/embed.js.map +1 -1
- package/dist/cjs/features/index.d.cts +1 -1
- package/dist/cjs/features/index.d.ts +1 -1
- package/dist/cjs/features/index.js +4 -2
- package/dist/cjs/features/index.js.map +1 -1
- package/dist/cjs/features/links.js +38 -20
- package/dist/cjs/features/links.js.map +1 -1
- package/dist/cjs/features/tags.d.cts +2 -0
- package/dist/cjs/features/tags.d.ts +2 -0
- package/dist/cjs/features/tags.js +188 -0
- package/dist/cjs/features/tags.js.map +1 -0
- package/dist/cjs/features/types.d.cts +2 -2
- package/dist/cjs/features/types.d.ts +2 -2
- package/dist/cjs/index.d.cts +6 -6
- package/dist/cjs/index.d.ts +6 -6
- package/dist/cjs/index.js +15 -15
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/scan.d.cts +3 -1
- package/dist/cjs/scan.d.ts +3 -1
- package/dist/cjs/scan.js +9 -6
- package/dist/cjs/scan.js.map +1 -1
- package/dist/cjs/sql-functions.d.cts +2 -0
- package/dist/cjs/sql-functions.d.ts +2 -0
- package/dist/cjs/sql-functions.js +64 -0
- package/dist/cjs/sql-functions.js.map +1 -0
- package/dist/cjs/watch.d.cts +1 -1
- package/dist/cjs/watch.d.ts +1 -1
- package/dist/cjs/watch.js +12 -12
- package/dist/cjs/watch.js.map +1 -1
- package/dist/esm/cli/download.js +1 -1
- package/dist/esm/cli/download.js.map +1 -1
- package/dist/esm/cli/init.js +1 -1
- package/dist/esm/cli/init.js.map +1 -1
- package/dist/esm/cli/map.js +1 -1
- package/dist/esm/cli/map.js.map +1 -1
- package/dist/esm/cli/named.js +1 -1
- package/dist/esm/cli/named.js.map +1 -1
- package/dist/esm/cli/path.js +1 -1
- package/dist/esm/cli/path.js.map +1 -1
- package/dist/esm/cli/peek.js +1 -1
- package/dist/esm/cli/peek.js.map +1 -1
- package/dist/esm/cli/related.js +1 -1
- package/dist/esm/cli/related.js.map +1 -1
- package/dist/esm/cli/search.js +1 -1
- package/dist/esm/cli/search.js.map +1 -1
- package/dist/esm/cli/shared.d.ts +2 -2
- package/dist/esm/cli/shared.js +2 -2
- package/dist/esm/cli/shared.js.map +1 -1
- package/dist/esm/cli/status.js +3 -3
- package/dist/esm/cli/status.js.map +1 -1
- package/dist/esm/cli/types.d.ts +1 -1
- package/dist/esm/cli/types.js.map +1 -1
- package/dist/esm/cli.js +1 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/index.d.ts +10 -0
- package/dist/esm/commands/index.js +8 -0
- package/dist/esm/commands/index.js.map +1 -0
- package/dist/esm/commands/map.d.ts +21 -0
- package/dist/esm/commands/map.js +56 -0
- package/dist/esm/commands/map.js.map +1 -0
- package/dist/esm/commands/peek.d.ts +20 -0
- package/dist/esm/commands/peek.js +63 -0
- package/dist/esm/commands/peek.js.map +1 -0
- package/dist/esm/commands/related.d.ts +6 -0
- package/dist/esm/commands/related.js +47 -0
- package/dist/esm/commands/related.js.map +1 -0
- package/dist/esm/commands/scope.d.ts +10 -0
- package/dist/esm/commands/scope.js +60 -0
- package/dist/esm/commands/scope.js.map +1 -0
- package/dist/esm/commands/search.d.ts +12 -0
- package/dist/esm/commands/search.js +258 -0
- package/dist/esm/commands/search.js.map +1 -0
- package/dist/esm/commands/status.d.ts +9 -0
- package/dist/esm/commands/status.js +16 -0
- package/dist/esm/commands/status.js.map +1 -0
- package/dist/esm/config/access.d.ts +19 -0
- package/dist/esm/config/access.js +89 -0
- package/dist/esm/config/access.js.map +1 -0
- package/dist/esm/config/index.d.ts +5 -0
- package/dist/esm/config/index.js +4 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/config/load.d.ts +8 -0
- package/dist/esm/config/load.js +242 -0
- package/dist/esm/config/load.js.map +1 -0
- package/dist/esm/config/resolve.d.ts +6 -0
- package/dist/esm/config/resolve.js +35 -0
- package/dist/esm/config/resolve.js.map +1 -0
- package/dist/{cjs/config.d.ts → esm/config/types.d.ts} +2 -32
- package/dist/esm/config/types.js +15 -0
- package/dist/esm/config/types.js.map +1 -0
- package/dist/esm/config/validate.d.ts +4 -0
- package/dist/esm/config/validate.js +226 -0
- package/dist/esm/config/validate.js.map +1 -0
- package/dist/esm/db/index.d.ts +4 -0
- package/dist/esm/db/index.js +5 -0
- package/dist/esm/db/index.js.map +1 -0
- package/dist/esm/{db.d.ts → db/open.d.ts} +2 -8
- package/dist/esm/db/open.js +160 -0
- package/dist/esm/db/open.js.map +1 -0
- package/dist/esm/db/reconcile.d.ts +9 -0
- package/dist/esm/{db.js → db/reconcile.js} +12 -216
- package/dist/esm/db/reconcile.js.map +1 -0
- package/dist/esm/db/shared.d.ts +5 -0
- package/dist/esm/db/shared.js +20 -0
- package/dist/esm/db/shared.js.map +1 -0
- package/dist/esm/features/embed.d.ts +1 -1
- package/dist/esm/features/embed.js +2 -1
- package/dist/esm/features/embed.js.map +1 -1
- package/dist/esm/features/index.d.ts +1 -1
- package/dist/esm/features/index.js +3 -1
- package/dist/esm/features/index.js.map +1 -1
- package/dist/esm/features/links.js +36 -21
- package/dist/esm/features/links.js.map +1 -1
- package/dist/esm/features/tags.d.ts +2 -0
- package/dist/esm/features/tags.js +80 -0
- package/dist/esm/features/tags.js.map +1 -0
- package/dist/esm/features/types.d.ts +2 -2
- package/dist/esm/features/types.js.map +1 -1
- package/dist/esm/index.d.ts +6 -6
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/scan.d.ts +3 -1
- package/dist/esm/scan.js +5 -2
- package/dist/esm/scan.js.map +1 -1
- package/dist/esm/sql-functions.d.ts +2 -0
- package/dist/esm/sql-functions.js +47 -0
- package/dist/esm/sql-functions.js.map +1 -0
- package/dist/esm/watch.d.ts +1 -1
- package/dist/esm/watch.js +2 -2
- package/dist/esm/watch.js.map +1 -1
- package/package.json +2 -1
- package/schema.json +4 -0
- package/skills/sense/SKILL.md +3 -3
- package/skills/sense-bases/EXAMPLES.md +103 -0
- package/skills/sense-bases/SKILL.md +137 -0
- package/skills/sense-setup/SKILL.md +1 -1
- package/dist/cjs/commands.d.cts +0 -58
- package/dist/cjs/commands.d.ts +0 -58
- package/dist/cjs/commands.js.map +0 -1
- package/dist/cjs/config.js +0 -919
- package/dist/cjs/config.js.map +0 -1
- package/dist/cjs/db.js.map +0 -1
- package/dist/esm/commands.d.ts +0 -58
- package/dist/esm/commands.js +0 -486
- package/dist/esm/commands.js.map +0 -1
- package/dist/esm/config.js +0 -599
- package/dist/esm/config.js.map +0 -1
- package/dist/esm/db.js.map +0 -1
package/dist/cjs/config.js
DELETED
|
@@ -1,919 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get CONFIG_FILENAME () {
|
|
13
|
-
return CONFIG_FILENAME;
|
|
14
|
-
},
|
|
15
|
-
get DEFAULT_EMBED_MODEL () {
|
|
16
|
-
return DEFAULT_EMBED_MODEL;
|
|
17
|
-
},
|
|
18
|
-
get STATE_DIR () {
|
|
19
|
-
return STATE_DIR;
|
|
20
|
-
},
|
|
21
|
-
get SUPPORTED_CONFIG_VERSION () {
|
|
22
|
-
return SUPPORTED_CONFIG_VERSION;
|
|
23
|
-
},
|
|
24
|
-
get anyPresetEmbeds () {
|
|
25
|
-
return anyPresetEmbeds;
|
|
26
|
-
},
|
|
27
|
-
get contentTokenize () {
|
|
28
|
-
return contentTokenize;
|
|
29
|
-
},
|
|
30
|
-
get embedConfig () {
|
|
31
|
-
return embedConfig;
|
|
32
|
-
},
|
|
33
|
-
get embedEnabled () {
|
|
34
|
-
return embedEnabled;
|
|
35
|
-
},
|
|
36
|
-
get enabledFeatures () {
|
|
37
|
-
return enabledFeatures;
|
|
38
|
-
},
|
|
39
|
-
get featureEnabled () {
|
|
40
|
-
return featureEnabled;
|
|
41
|
-
},
|
|
42
|
-
get featureSignature () {
|
|
43
|
-
return featureSignature;
|
|
44
|
-
},
|
|
45
|
-
get featureStates () {
|
|
46
|
-
return featureStates;
|
|
47
|
-
},
|
|
48
|
-
get findConfigPath () {
|
|
49
|
-
return findConfigPath;
|
|
50
|
-
},
|
|
51
|
-
get initConfig () {
|
|
52
|
-
return initConfig;
|
|
53
|
-
},
|
|
54
|
-
get loadConfig () {
|
|
55
|
-
return loadConfig;
|
|
56
|
-
},
|
|
57
|
-
get migrateConfig () {
|
|
58
|
-
return migrateConfig;
|
|
59
|
-
},
|
|
60
|
-
get presetNames () {
|
|
61
|
-
return presetNames;
|
|
62
|
-
},
|
|
63
|
-
get presetSemanticEnabled () {
|
|
64
|
-
return presetSemanticEnabled;
|
|
65
|
-
},
|
|
66
|
-
get resolvePreset () {
|
|
67
|
-
return resolvePreset;
|
|
68
|
-
},
|
|
69
|
-
get resolveSearch () {
|
|
70
|
-
return resolveSearch;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
var _nodefs = require("node:fs");
|
|
74
|
-
var _nodepath = require("node:path");
|
|
75
|
-
var _errorsts = require("./errors.js");
|
|
76
|
-
function _array_like_to_array(arr, len) {
|
|
77
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
78
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
79
|
-
return arr2;
|
|
80
|
-
}
|
|
81
|
-
function _array_with_holes(arr) {
|
|
82
|
-
if (Array.isArray(arr)) return arr;
|
|
83
|
-
}
|
|
84
|
-
function _array_without_holes(arr) {
|
|
85
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
86
|
-
}
|
|
87
|
-
function _define_property(obj, key, value) {
|
|
88
|
-
if (key in obj) {
|
|
89
|
-
Object.defineProperty(obj, key, {
|
|
90
|
-
value: value,
|
|
91
|
-
enumerable: true,
|
|
92
|
-
configurable: true,
|
|
93
|
-
writable: true
|
|
94
|
-
});
|
|
95
|
-
} else {
|
|
96
|
-
obj[key] = value;
|
|
97
|
-
}
|
|
98
|
-
return obj;
|
|
99
|
-
}
|
|
100
|
-
function _iterable_to_array(iter) {
|
|
101
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
102
|
-
}
|
|
103
|
-
function _iterable_to_array_limit(arr, i) {
|
|
104
|
-
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
105
|
-
if (_i == null) return;
|
|
106
|
-
var _arr = [];
|
|
107
|
-
var _n = true;
|
|
108
|
-
var _d = false;
|
|
109
|
-
var _s, _e;
|
|
110
|
-
try {
|
|
111
|
-
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
112
|
-
_arr.push(_s.value);
|
|
113
|
-
if (i && _arr.length === i) break;
|
|
114
|
-
}
|
|
115
|
-
} catch (err) {
|
|
116
|
-
_d = true;
|
|
117
|
-
_e = err;
|
|
118
|
-
} finally{
|
|
119
|
-
try {
|
|
120
|
-
if (!_n && _i["return"] != null) _i["return"]();
|
|
121
|
-
} finally{
|
|
122
|
-
if (_d) throw _e;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return _arr;
|
|
126
|
-
}
|
|
127
|
-
function _non_iterable_rest() {
|
|
128
|
-
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
129
|
-
}
|
|
130
|
-
function _non_iterable_spread() {
|
|
131
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
132
|
-
}
|
|
133
|
-
function _object_spread(target) {
|
|
134
|
-
for(var i = 1; i < arguments.length; i++){
|
|
135
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
136
|
-
var ownKeys = Object.keys(source);
|
|
137
|
-
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
138
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
139
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
140
|
-
}));
|
|
141
|
-
}
|
|
142
|
-
ownKeys.forEach(function(key) {
|
|
143
|
-
_define_property(target, key, source[key]);
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
return target;
|
|
147
|
-
}
|
|
148
|
-
function ownKeys(object, enumerableOnly) {
|
|
149
|
-
var keys = Object.keys(object);
|
|
150
|
-
if (Object.getOwnPropertySymbols) {
|
|
151
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
152
|
-
if (enumerableOnly) {
|
|
153
|
-
symbols = symbols.filter(function(sym) {
|
|
154
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
keys.push.apply(keys, symbols);
|
|
158
|
-
}
|
|
159
|
-
return keys;
|
|
160
|
-
}
|
|
161
|
-
function _object_spread_props(target, source) {
|
|
162
|
-
source = source != null ? source : {};
|
|
163
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
164
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
165
|
-
} else {
|
|
166
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
167
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
return target;
|
|
171
|
-
}
|
|
172
|
-
function _object_without_properties(source, excluded) {
|
|
173
|
-
if (source == null) return {};
|
|
174
|
-
var target = {}, sourceKeys, key, i;
|
|
175
|
-
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
176
|
-
sourceKeys = Reflect.ownKeys(Object(source));
|
|
177
|
-
for(i = 0; i < sourceKeys.length; i++){
|
|
178
|
-
key = sourceKeys[i];
|
|
179
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
180
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
181
|
-
target[key] = source[key];
|
|
182
|
-
}
|
|
183
|
-
return target;
|
|
184
|
-
}
|
|
185
|
-
target = _object_without_properties_loose(source, excluded);
|
|
186
|
-
if (Object.getOwnPropertySymbols) {
|
|
187
|
-
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
188
|
-
for(i = 0; i < sourceKeys.length; i++){
|
|
189
|
-
key = sourceKeys[i];
|
|
190
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
191
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
192
|
-
target[key] = source[key];
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return target;
|
|
196
|
-
}
|
|
197
|
-
function _object_without_properties_loose(source, excluded) {
|
|
198
|
-
if (source == null) return {};
|
|
199
|
-
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
200
|
-
for(i = 0; i < sourceKeys.length; i++){
|
|
201
|
-
key = sourceKeys[i];
|
|
202
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
203
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
204
|
-
target[key] = source[key];
|
|
205
|
-
}
|
|
206
|
-
return target;
|
|
207
|
-
}
|
|
208
|
-
function _sliced_to_array(arr, i) {
|
|
209
|
-
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
210
|
-
}
|
|
211
|
-
function _to_consumable_array(arr) {
|
|
212
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
213
|
-
}
|
|
214
|
-
function _type_of(obj) {
|
|
215
|
-
"@swc/helpers - typeof";
|
|
216
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
217
|
-
}
|
|
218
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
219
|
-
if (!o) return;
|
|
220
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
221
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
222
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
223
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
224
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
225
|
-
}
|
|
226
|
-
var CONFIG_FILENAME = 'sense.config.json';
|
|
227
|
-
var STATE_DIR = '.sense';
|
|
228
|
-
var SUPPORTED_CONFIG_VERSION = 4;
|
|
229
|
-
// v1 and v2 were `scan`/`find`-shaped; v3 introduced `presets`. Only the former need the
|
|
230
|
-
// legacy shape check before migrating.
|
|
231
|
-
var FIRST_PRESET_VERSION = 3;
|
|
232
|
-
// Each feature owns its tables, parse-time extraction, and reconcile step; commands degrade when one is off.
|
|
233
|
-
// links/sections/rank are opt-out toggles in the top-level `features` block; embed is not a
|
|
234
|
-
// member of that block -- it is on exactly when an `embed` block names a model.
|
|
235
|
-
var FEATURE_NAMES = [
|
|
236
|
-
'links',
|
|
237
|
-
'sections',
|
|
238
|
-
'rank',
|
|
239
|
-
'embed'
|
|
240
|
-
];
|
|
241
|
-
// v1 -> v2 migration only: the features v2 introduced as opt-out (embed was opt-in then).
|
|
242
|
-
var V2_OPT_OUT_NAMES = [
|
|
243
|
-
'links',
|
|
244
|
-
'sections',
|
|
245
|
-
'rank'
|
|
246
|
-
];
|
|
247
|
-
var DEFAULT_EMBED_MODEL = 'minishlab/potion-retrieval-32M';
|
|
248
|
-
function presetNames(cfg) {
|
|
249
|
-
return Object.keys(cfg.presets);
|
|
250
|
-
}
|
|
251
|
-
function embedEnabled(cfg) {
|
|
252
|
-
var _cfg_embed;
|
|
253
|
-
return typeof ((_cfg_embed = cfg.embed) === null || _cfg_embed === void 0 ? void 0 : _cfg_embed.model) === 'string' && cfg.embed.model.length > 0;
|
|
254
|
-
}
|
|
255
|
-
function presetSemanticEnabled(cfg, name) {
|
|
256
|
-
var _cfg_presets_name;
|
|
257
|
-
return ((_cfg_presets_name = cfg.presets[name]) === null || _cfg_presets_name === void 0 ? void 0 : _cfg_presets_name.semantic) !== false;
|
|
258
|
-
}
|
|
259
|
-
function anyPresetEmbeds(cfg) {
|
|
260
|
-
return embedEnabled(cfg) && presetNames(cfg).some(function(name) {
|
|
261
|
-
return presetSemanticEnabled(cfg, name);
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
function featureEnabled(cfg, name) {
|
|
265
|
-
var _cfg_features;
|
|
266
|
-
if (name === 'embed') return anyPresetEmbeds(cfg);
|
|
267
|
-
var enabled = ((_cfg_features = cfg.features) === null || _cfg_features === void 0 ? void 0 : _cfg_features[name]) !== false;
|
|
268
|
-
if (name === 'rank') return enabled && featureEnabled(cfg, 'links');
|
|
269
|
-
return enabled;
|
|
270
|
-
}
|
|
271
|
-
function enabledFeatures(cfg) {
|
|
272
|
-
return FEATURE_NAMES.filter(function(name) {
|
|
273
|
-
return featureEnabled(cfg, name);
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
function featureStates(cfg) {
|
|
277
|
-
var reported = FEATURE_NAMES.filter(function(name) {
|
|
278
|
-
return name !== 'embed';
|
|
279
|
-
});
|
|
280
|
-
return {
|
|
281
|
-
on: reported.filter(function(name) {
|
|
282
|
-
return featureEnabled(cfg, name);
|
|
283
|
-
}),
|
|
284
|
-
off: reported.filter(function(name) {
|
|
285
|
-
return !featureEnabled(cfg, name);
|
|
286
|
-
})
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
function embedConfig(cfg) {
|
|
290
|
-
var _e_type;
|
|
291
|
-
if (!embedEnabled(cfg)) return null;
|
|
292
|
-
var e = cfg.embed;
|
|
293
|
-
return {
|
|
294
|
-
model: e.model,
|
|
295
|
-
type: (_e_type = e.type) !== null && _e_type !== void 0 ? _e_type : 'static',
|
|
296
|
-
url: e.url,
|
|
297
|
-
key: e.key
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
function contentTokenize(cfg) {
|
|
301
|
-
var _cfg_content;
|
|
302
|
-
var tokenize = (_cfg_content = cfg.content) === null || _cfg_content === void 0 ? void 0 : _cfg_content.tokenize;
|
|
303
|
-
return tokenize === undefined || tokenize.trim() === '' ? undefined : tokenize.trim();
|
|
304
|
-
}
|
|
305
|
-
function featureSignature(cfg) {
|
|
306
|
-
var globalPart = enabledFeatures(cfg).filter(function(name) {
|
|
307
|
-
return name !== 'embed';
|
|
308
|
-
}).join(',');
|
|
309
|
-
var e = embedConfig(cfg);
|
|
310
|
-
var embedPart = e ? "embed:".concat(e.type, ":").concat(e.model) : 'embed:off';
|
|
311
|
-
// One keyed segment per preset so a rebuild notice can name exactly which preset moved.
|
|
312
|
-
var presetsPart = _to_consumable_array(presetNames(cfg)).sort().map(function(name) {
|
|
313
|
-
var _p_exclude;
|
|
314
|
-
var p = cfg.presets[name];
|
|
315
|
-
var include = _to_consumable_array(p.include).sort().join('+');
|
|
316
|
-
var exclude = _to_consumable_array((_p_exclude = p.exclude) !== null && _p_exclude !== void 0 ? _p_exclude : []).sort().join('+');
|
|
317
|
-
return "preset:".concat(name, ":").concat(include, ":").concat(exclude, ":").concat(p.semantic === false ? 'off' : 'on');
|
|
318
|
-
}).join('|');
|
|
319
|
-
var tokenize = contentTokenize(cfg);
|
|
320
|
-
var parts = [
|
|
321
|
-
"features:".concat(globalPart),
|
|
322
|
-
embedPart
|
|
323
|
-
];
|
|
324
|
-
if (tokenize !== undefined) parts.push("tokenize:".concat(tokenize));
|
|
325
|
-
parts.push(presetsPart);
|
|
326
|
-
return parts.join('|');
|
|
327
|
-
}
|
|
328
|
-
function resolvePreset(cfg, name) {
|
|
329
|
-
var presetName = name !== null && name !== void 0 ? name : 'default';
|
|
330
|
-
var preset = cfg.presets[presetName];
|
|
331
|
-
if (!preset) throw new _errorsts.SenseError('PRESET_UNKNOWN', 'unknown preset "'.concat(presetName, '"; declared presets: ').concat(presetNames(cfg).join(', ')));
|
|
332
|
-
return {
|
|
333
|
-
name: presetName,
|
|
334
|
-
preset: preset
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
function resolveSearch(cfg) {
|
|
338
|
-
var opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
339
|
-
var _ref, _opts_k, _opts_where, _opts_include, _opts_exclude;
|
|
340
|
-
var _resolvePreset = resolvePreset(cfg, opts.preset), presetName = _resolvePreset.name, preset = _resolvePreset.preset;
|
|
341
|
-
var k = (_ref = (_opts_k = opts.k) !== null && _opts_k !== void 0 ? _opts_k : preset.k) !== null && _ref !== void 0 ? _ref : 10;
|
|
342
|
-
var where = (_opts_where = opts.where) !== null && _opts_where !== void 0 ? _opts_where : preset.where;
|
|
343
|
-
// Each overrides its own side only, so neither clears the other.
|
|
344
|
-
var include = (_opts_include = opts.include) !== null && _opts_include !== void 0 ? _opts_include : preset.include;
|
|
345
|
-
// --no-exclude widens past the preset's exclusions; an explicit --exclude alongside it is
|
|
346
|
-
// still the scope for this command, since it says what to leave out rather than what to keep.
|
|
347
|
-
var exclude = (_opts_exclude = opts.exclude) !== null && _opts_exclude !== void 0 ? _opts_exclude : opts.noExclude ? undefined : preset.exclude;
|
|
348
|
-
return {
|
|
349
|
-
presetName: presetName,
|
|
350
|
-
k: k,
|
|
351
|
-
where: where,
|
|
352
|
-
include: include,
|
|
353
|
-
exclude: exclude,
|
|
354
|
-
semantic: preset.semantic !== false
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
// Pure per-version steps, chained by loadConfig. Intermediate shapes predate the Config type,
|
|
358
|
-
// so steps are loosely typed and only the final result is cast back.
|
|
359
|
-
var MIGRATIONS = {
|
|
360
|
-
// v1 -> v2: features block introduced, opt-out features enabled (matches the old implicit
|
|
361
|
-
// behavior of `links` etc. not existing). embed stays absent -- opt-in.
|
|
362
|
-
1: function(cfg) {
|
|
363
|
-
return _object_spread_props(_object_spread({}, cfg), {
|
|
364
|
-
version: 2,
|
|
365
|
-
features: Object.fromEntries(V2_OPT_OUT_NAMES.map(function(name) {
|
|
366
|
-
return [
|
|
367
|
-
name,
|
|
368
|
-
true
|
|
369
|
-
];
|
|
370
|
-
}))
|
|
371
|
-
});
|
|
372
|
-
},
|
|
373
|
-
// v2 -> v3: mechanical-minimal, by decision -- only what keeps an existing config loading.
|
|
374
|
-
// No restructuring, no preset inference, no query rewriting; real trees get hand-migrated
|
|
375
|
-
// separately to actually use presets.
|
|
376
|
-
2: function(cfg) {
|
|
377
|
-
var _prevDefaults_find;
|
|
378
|
-
var scan = cfg.scan, defaults = cfg.defaults, features = cfg.features, checks = cfg.checks, queries = cfg.queries, rest = _object_without_properties(cfg, [
|
|
379
|
-
"scan",
|
|
380
|
-
"defaults",
|
|
381
|
-
"features",
|
|
382
|
-
"checks",
|
|
383
|
-
"queries"
|
|
384
|
-
]);
|
|
385
|
-
var scanInclude = scan.include;
|
|
386
|
-
var nextQueries = {};
|
|
387
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
388
|
-
try {
|
|
389
|
-
for(var _iterator = Object.entries(queries !== null && queries !== void 0 ? queries : {})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
390
|
-
var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], value = _step_value[1];
|
|
391
|
-
if (typeof value === 'string') {
|
|
392
|
-
nextQueries[name] = value;
|
|
393
|
-
continue;
|
|
394
|
-
}
|
|
395
|
-
var entry = value;
|
|
396
|
-
// Loosely typed on purpose: this step emits the v3 shape, which still had `semantic`.
|
|
397
|
-
// The v3 -> v4 step below strips it.
|
|
398
|
-
var search = {
|
|
399
|
-
search: entry.find
|
|
400
|
-
};
|
|
401
|
-
if (entry.k !== undefined) search.k = entry.k;
|
|
402
|
-
if (entry.where !== undefined) search.where = entry.where;
|
|
403
|
-
// semantic: true was opt-in; it is now the default, so it drops. semantic: false is kept.
|
|
404
|
-
if (entry.semantic === false) search.semantic = false;
|
|
405
|
-
nextQueries[name] = search;
|
|
406
|
-
}
|
|
407
|
-
} catch (err) {
|
|
408
|
-
_didIteratorError = true;
|
|
409
|
-
_iteratorError = err;
|
|
410
|
-
} finally{
|
|
411
|
-
try {
|
|
412
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
413
|
-
_iterator.return();
|
|
414
|
-
}
|
|
415
|
-
} finally{
|
|
416
|
-
if (_didIteratorError) {
|
|
417
|
-
throw _iteratorError;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
var prevDefaults = defaults;
|
|
422
|
-
var defaultWhere = prevDefaults === null || prevDefaults === void 0 ? void 0 : (_prevDefaults_find = prevDefaults.find) === null || _prevDefaults_find === void 0 ? void 0 : _prevDefaults_find.where;
|
|
423
|
-
// features.embed false becomes semantic:false on every preset produced here.
|
|
424
|
-
var prevFeatures = features !== null && features !== void 0 ? features : {};
|
|
425
|
-
var embedWasOff = prevFeatures.embed === false;
|
|
426
|
-
// Object form carried provider settings (model/type/url/key), not a toggle -- they move
|
|
427
|
-
// to the v3 top-level `embed` block verbatim; dropping them would silently switch an
|
|
428
|
-
// api tree back to the built-in static model.
|
|
429
|
-
var embedProvider = _type_of(prevFeatures.embed) === 'object' && prevFeatures.embed !== null ? prevFeatures.embed : undefined;
|
|
430
|
-
var _embed = prevFeatures.embed, restFeatures = _object_without_properties(prevFeatures, [
|
|
431
|
-
"embed"
|
|
432
|
-
]);
|
|
433
|
-
var defaultPreset = {
|
|
434
|
-
include: scanInclude
|
|
435
|
-
};
|
|
436
|
-
if (defaultWhere !== undefined) defaultPreset.where = defaultWhere;
|
|
437
|
-
if (embedWasOff) defaultPreset.semantic = false;
|
|
438
|
-
// checks (assertions over saved queries) was removed in v3; its queries still run under
|
|
439
|
-
// `queries`, just without the pass/fail assertion -- reachable now only as a saved query.
|
|
440
|
-
if (checks !== undefined) {
|
|
441
|
-
console.error('sense: v2 "checks" was removed in v3 (sense check no longer asserts on saved queries); its queries are carried over under "queries" -- a returned row set is now the reader\'s judgment');
|
|
442
|
-
}
|
|
443
|
-
var result = _object_spread_props(_object_spread({}, rest), {
|
|
444
|
-
version: 3,
|
|
445
|
-
presets: {
|
|
446
|
-
default: defaultPreset
|
|
447
|
-
},
|
|
448
|
-
queries: nextQueries
|
|
449
|
-
});
|
|
450
|
-
if (embedProvider !== undefined) result.embed = embedProvider;
|
|
451
|
-
if (Object.keys(restFeatures).length > 0) result.features = restFeatures;
|
|
452
|
-
return result;
|
|
453
|
-
},
|
|
454
|
-
// v3 -> v4: write the model into the file, wrap bare-string queries as { sql }, drop a saved
|
|
455
|
-
// search's `semantic` (its preset decides). Same effective model, so nothing re-embeds.
|
|
456
|
-
3: function(cfg) {
|
|
457
|
-
var _cfg_queries, _cfg_embed;
|
|
458
|
-
var presets = cfg.presets;
|
|
459
|
-
var embedded = Object.values(presets).some(function(p) {
|
|
460
|
-
return p.semantic !== false;
|
|
461
|
-
});
|
|
462
|
-
var nextQueries = {};
|
|
463
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
464
|
-
try {
|
|
465
|
-
for(var _iterator = Object.entries((_cfg_queries = cfg.queries) !== null && _cfg_queries !== void 0 ? _cfg_queries : {})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
466
|
-
var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], value = _step_value[1];
|
|
467
|
-
// v3's bare string meant SQL by inference; v4 makes every entry name its verb.
|
|
468
|
-
if (typeof value === 'string') {
|
|
469
|
-
nextQueries[name] = {
|
|
470
|
-
sql: value
|
|
471
|
-
};
|
|
472
|
-
continue;
|
|
473
|
-
}
|
|
474
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || !('search' in value)) {
|
|
475
|
-
nextQueries[name] = value;
|
|
476
|
-
continue;
|
|
477
|
-
}
|
|
478
|
-
var _semantic = value.semantic, rest = _object_without_properties(value, [
|
|
479
|
-
"semantic"
|
|
480
|
-
]);
|
|
481
|
-
nextQueries[name] = rest;
|
|
482
|
-
}
|
|
483
|
-
} catch (err) {
|
|
484
|
-
_didIteratorError = true;
|
|
485
|
-
_iteratorError = err;
|
|
486
|
-
} finally{
|
|
487
|
-
try {
|
|
488
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
489
|
-
_iterator.return();
|
|
490
|
-
}
|
|
491
|
-
} finally{
|
|
492
|
-
if (_didIteratorError) {
|
|
493
|
-
throw _iteratorError;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
var prev = (_cfg_embed = cfg.embed) !== null && _cfg_embed !== void 0 ? _cfg_embed : {};
|
|
498
|
-
var result = _object_spread_props(_object_spread({}, cfg), {
|
|
499
|
-
version: 4,
|
|
500
|
-
queries: nextQueries
|
|
501
|
-
});
|
|
502
|
-
if (embedded) {
|
|
503
|
-
var _prev_model, _prev_type;
|
|
504
|
-
result.embed = _object_spread({
|
|
505
|
-
model: (_prev_model = prev.model) !== null && _prev_model !== void 0 ? _prev_model : DEFAULT_EMBED_MODEL,
|
|
506
|
-
type: (_prev_type = prev.type) !== null && _prev_type !== void 0 ? _prev_type : 'static'
|
|
507
|
-
}, prev.url !== undefined ? {
|
|
508
|
-
url: prev.url
|
|
509
|
-
} : {}, prev.key !== undefined ? {
|
|
510
|
-
key: prev.key
|
|
511
|
-
} : {});
|
|
512
|
-
} else {
|
|
513
|
-
delete result.embed;
|
|
514
|
-
// Dropping settings silently would look like a bug in a tree that had configured an
|
|
515
|
-
// api endpoint and then turned vectors off; say it, since v4 has no way to carry
|
|
516
|
-
// provider settings for a tree that does not embed.
|
|
517
|
-
if (Object.keys(prev).length > 0) console.error('sense: every preset has "semantic": false, so v4 drops the "embed" block (vectors stay off); re-add it, or set a preset\'s semantic back to true, to turn them on');
|
|
518
|
-
}
|
|
519
|
-
return result;
|
|
520
|
-
}
|
|
521
|
-
};
|
|
522
|
-
function migrateConfig(cfg) {
|
|
523
|
-
var _cfg_version;
|
|
524
|
-
var from = (_cfg_version = cfg.version) !== null && _cfg_version !== void 0 ? _cfg_version : 1;
|
|
525
|
-
var current = cfg;
|
|
526
|
-
for(var v = from; v < SUPPORTED_CONFIG_VERSION; v++){
|
|
527
|
-
var step = MIGRATIONS[v];
|
|
528
|
-
if (!step) throw new _errorsts.SenseError('CONFIG_VERSION_UNSUPPORTED', "no migration from config version ".concat(v));
|
|
529
|
-
current = step(current);
|
|
530
|
-
}
|
|
531
|
-
return {
|
|
532
|
-
cfg: current,
|
|
533
|
-
from: from
|
|
534
|
-
};
|
|
535
|
-
}
|
|
536
|
-
function starterConfig() {
|
|
537
|
-
return {
|
|
538
|
-
$schema: 'https://unpkg.com/sensemaking/schema.json',
|
|
539
|
-
version: SUPPORTED_CONFIG_VERSION,
|
|
540
|
-
presets: {
|
|
541
|
-
default: {
|
|
542
|
-
include: [
|
|
543
|
-
'**/*.md'
|
|
544
|
-
],
|
|
545
|
-
k: 10
|
|
546
|
-
},
|
|
547
|
-
large: {
|
|
548
|
-
include: [
|
|
549
|
-
'**/*.md'
|
|
550
|
-
],
|
|
551
|
-
k: 20
|
|
552
|
-
}
|
|
553
|
-
},
|
|
554
|
-
// Written out rather than defaulted in code: this line is what makes `sense download`
|
|
555
|
-
// fetch 124 MB, so it belongs where it can be read and changed.
|
|
556
|
-
embed: {
|
|
557
|
-
model: DEFAULT_EMBED_MODEL,
|
|
558
|
-
type: 'static'
|
|
559
|
-
},
|
|
560
|
-
queries: {}
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
function initConfig(dir) {
|
|
564
|
-
var configPath = (0, _nodepath.join)(dir, CONFIG_FILENAME);
|
|
565
|
-
if ((0, _nodefs.existsSync)(configPath)) {
|
|
566
|
-
throw new _errorsts.SenseError('CONFIG_EXISTS', "".concat(CONFIG_FILENAME, " already exists in ").concat(dir));
|
|
567
|
-
}
|
|
568
|
-
(0, _nodefs.writeFileSync)(configPath, "".concat(JSON.stringify(starterConfig(), null, 2), "\n"));
|
|
569
|
-
return configPath;
|
|
570
|
-
}
|
|
571
|
-
function findConfigPath(startDir) {
|
|
572
|
-
var dir = (0, _nodepath.resolve)(startDir);
|
|
573
|
-
for(;;){
|
|
574
|
-
var candidate = (0, _nodepath.join)(dir, CONFIG_FILENAME);
|
|
575
|
-
if ((0, _nodefs.existsSync)(candidate)) return candidate;
|
|
576
|
-
var parent = (0, _nodepath.dirname)(dir);
|
|
577
|
-
if (parent === dir) return null;
|
|
578
|
-
dir = parent;
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
// Shape check for hand-edited files, so a typo names itself instead of surfacing as a
|
|
582
|
-
// TypeError. Unknown top-level keys warn (forward compat); unknown keys inside a block error.
|
|
583
|
-
var KNOWN_KEYS = new Set([
|
|
584
|
-
'$schema',
|
|
585
|
-
'version',
|
|
586
|
-
'presets',
|
|
587
|
-
'features',
|
|
588
|
-
'embed',
|
|
589
|
-
'content',
|
|
590
|
-
'queries'
|
|
591
|
-
]);
|
|
592
|
-
var KNOWN_PRESET_KEYS = new Set([
|
|
593
|
-
'include',
|
|
594
|
-
'exclude',
|
|
595
|
-
'k',
|
|
596
|
-
'semantic',
|
|
597
|
-
'where'
|
|
598
|
-
]);
|
|
599
|
-
var KNOWN_FEATURE_KEYS = new Set([
|
|
600
|
-
'links',
|
|
601
|
-
'sections',
|
|
602
|
-
'rank'
|
|
603
|
-
]);
|
|
604
|
-
var KNOWN_EMBED_KEYS = new Set([
|
|
605
|
-
'model',
|
|
606
|
-
'type',
|
|
607
|
-
'url',
|
|
608
|
-
'key'
|
|
609
|
-
]);
|
|
610
|
-
var KNOWN_CONTENT_KEYS = new Set([
|
|
611
|
-
'tokenize'
|
|
612
|
-
]);
|
|
613
|
-
var SAVED_SEARCH_KEYS = new Set([
|
|
614
|
-
'search',
|
|
615
|
-
'preset',
|
|
616
|
-
'include',
|
|
617
|
-
'exclude',
|
|
618
|
-
'where',
|
|
619
|
-
'k'
|
|
620
|
-
]);
|
|
621
|
-
function unknownConfigKeys(cfg) {
|
|
622
|
-
return Object.keys(cfg).filter(function(k) {
|
|
623
|
-
return !KNOWN_KEYS.has(k);
|
|
624
|
-
});
|
|
625
|
-
}
|
|
626
|
-
function isNonEmptyStringArray(value) {
|
|
627
|
-
return Array.isArray(value) && value.length > 0 && value.every(function(g) {
|
|
628
|
-
return typeof g === 'string' && g.length > 0;
|
|
629
|
-
});
|
|
630
|
-
}
|
|
631
|
-
// Pre-v3 shape check, just enough for migrateConfig to run safely (it reads scan.include
|
|
632
|
-
// directly). The full v3 shape is checked by validateConfig once migration has produced it.
|
|
633
|
-
function validateLegacyScan(parsed, configPath) {
|
|
634
|
-
var cfg = (typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) === 'object' && parsed !== null && !Array.isArray(parsed) ? parsed : null;
|
|
635
|
-
var scan = cfg === null || cfg === void 0 ? void 0 : cfg.scan;
|
|
636
|
-
if (!cfg || !scan || !isNonEmptyStringArray(scan.include)) {
|
|
637
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": scan.include must be a non-empty array of glob strings"));
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
// Only the shape is checked here. Whether the linked SQLite accepts the tokenizer is settled
|
|
641
|
-
// by probing it in db.ts, so this never has to carry a table of which version added what.
|
|
642
|
-
function validateContentBlock(value, configPath) {
|
|
643
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || Array.isArray(value)) {
|
|
644
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": content must be an object of { tokenize?: string }"));
|
|
645
|
-
}
|
|
646
|
-
var block = value;
|
|
647
|
-
var unknown = Object.keys(block).filter(function(k) {
|
|
648
|
-
return !KNOWN_CONTENT_KEYS.has(k);
|
|
649
|
-
});
|
|
650
|
-
if (unknown.length > 0) {
|
|
651
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": content has unknown key(s) ").concat(unknown.join(', '), "; content takes tokenize"));
|
|
652
|
-
}
|
|
653
|
-
if (block.tokenize !== undefined && (typeof block.tokenize !== 'string' || block.tokenize.trim() === '')) {
|
|
654
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ': content.tokenize must be a non-empty string, e.g. "trigram" or "unicode61 tokenchars \'-_\'"'));
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
function validateFeaturesBlock(value, configPath) {
|
|
658
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || Array.isArray(value)) {
|
|
659
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": features must be an object of name -> boolean"));
|
|
660
|
-
}
|
|
661
|
-
var block = value;
|
|
662
|
-
var unknown = Object.keys(block).filter(function(k) {
|
|
663
|
-
return !KNOWN_FEATURE_KEYS.has(k);
|
|
664
|
-
});
|
|
665
|
-
if (unknown.length > 0) {
|
|
666
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": features has unknown key(s) ").concat(unknown.join(', '), '; embed is not a features key -- see the top-level "embed" block'));
|
|
667
|
-
}
|
|
668
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
669
|
-
try {
|
|
670
|
-
for(var _iterator = Object.entries(block)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
671
|
-
var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], v = _step_value[1];
|
|
672
|
-
if (typeof v !== 'boolean') {
|
|
673
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": features.").concat(name, " must be a boolean"));
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
} catch (err) {
|
|
677
|
-
_didIteratorError = true;
|
|
678
|
-
_iteratorError = err;
|
|
679
|
-
} finally{
|
|
680
|
-
try {
|
|
681
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
682
|
-
_iterator.return();
|
|
683
|
-
}
|
|
684
|
-
} finally{
|
|
685
|
-
if (_didIteratorError) {
|
|
686
|
-
throw _iteratorError;
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
function validateEmbedBlock(value, configPath) {
|
|
692
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || Array.isArray(value)) {
|
|
693
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ': embed must be an object of { model?, type?: "static"|"api", url?, key? }'));
|
|
694
|
-
}
|
|
695
|
-
var embed = value;
|
|
696
|
-
var unknown = Object.keys(embed).filter(function(k) {
|
|
697
|
-
return !KNOWN_EMBED_KEYS.has(k);
|
|
698
|
-
});
|
|
699
|
-
if (unknown.length > 0) {
|
|
700
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": embed has unknown key(s) ").concat(unknown.join(', ')));
|
|
701
|
-
}
|
|
702
|
-
if (embed.model !== undefined && typeof embed.model !== 'string') {
|
|
703
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": embed.model must be a string"));
|
|
704
|
-
}
|
|
705
|
-
// The block exists to name a model; provider settings without one would read as "vectors
|
|
706
|
-
// configured" while embedding stays off, which is the ambiguity v4 removed.
|
|
707
|
-
if (embed.model === undefined || embed.model === '') {
|
|
708
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ': embed.model is required when the "embed" block is present (it is what turns vectors on); remove the block to index without vectors'));
|
|
709
|
-
}
|
|
710
|
-
if (embed.type !== undefined && embed.type !== 'static' && embed.type !== 'api') {
|
|
711
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ': embed.type must be "static" or "api"'));
|
|
712
|
-
}
|
|
713
|
-
if (embed.url !== undefined && typeof embed.url !== 'string') {
|
|
714
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": embed.url must be a string"));
|
|
715
|
-
}
|
|
716
|
-
if (embed.key !== undefined && typeof embed.key !== 'string') {
|
|
717
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": embed.key must be a string"));
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
function validatePreset(name, value, configPath) {
|
|
721
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || Array.isArray(value)) {
|
|
722
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, " must be an object"));
|
|
723
|
-
}
|
|
724
|
-
var preset = value;
|
|
725
|
-
var unknown = Object.keys(preset).filter(function(k) {
|
|
726
|
-
return !KNOWN_PRESET_KEYS.has(k);
|
|
727
|
-
});
|
|
728
|
-
if (unknown.length > 0) {
|
|
729
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, " has unknown key(s) ").concat(unknown.join(', '), "; a preset takes include, exclude, k, semantic, where"));
|
|
730
|
-
}
|
|
731
|
-
if (!isNonEmptyStringArray(preset.include)) {
|
|
732
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, ".include must be a non-empty array of glob strings"));
|
|
733
|
-
}
|
|
734
|
-
if (preset.exclude !== undefined && !isNonEmptyStringArray(preset.exclude)) {
|
|
735
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, ".exclude must be a non-empty array of glob strings"));
|
|
736
|
-
}
|
|
737
|
-
if (preset.semantic !== undefined && typeof preset.semantic !== 'boolean') {
|
|
738
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, ".semantic must be a boolean"));
|
|
739
|
-
}
|
|
740
|
-
if (preset.k !== undefined && (typeof preset.k !== 'number' || !Number.isInteger(preset.k) || preset.k <= 0)) {
|
|
741
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, ".k must be a positive integer"));
|
|
742
|
-
}
|
|
743
|
-
if (preset.where !== undefined && typeof preset.where !== 'string') {
|
|
744
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets.").concat(name, ".where must be a SQL condition string"));
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
// A queries.<name> entry: { sql } or a saved search { search, preset?, include?, exclude?, where?, k? }.
|
|
748
|
-
function validateSavedQuery(name, value, configPath) {
|
|
749
|
-
// A bare string used to mean SQL. It now fails rather than being inferred: an entry says
|
|
750
|
-
// which of the two verbs it runs, the same choice the CLI makes explicit.
|
|
751
|
-
if (typeof value === 'string') {
|
|
752
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ' must say which verb it runs: { "sql": ').concat(JSON.stringify(value.length > 40 ? "".concat(value.slice(0, 37), "...") : value), ' } to run it as SQL, or { "search": "..." } for a ranked search'));
|
|
753
|
-
}
|
|
754
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null || Array.isArray(value)) {
|
|
755
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, " must be { sql } or { search, preset?, include?, exclude?, where?, k? }"));
|
|
756
|
-
}
|
|
757
|
-
var entry = value;
|
|
758
|
-
if ('sql' in entry) {
|
|
759
|
-
var unknown = Object.keys(entry).filter(function(k) {
|
|
760
|
-
return k !== 'sql';
|
|
761
|
-
});
|
|
762
|
-
if (unknown.length > 0) {
|
|
763
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, " has unknown key(s) ").concat(unknown.join(', '), "; a { sql } query takes only sql"));
|
|
764
|
-
}
|
|
765
|
-
if (typeof entry.sql !== 'string' || entry.sql.trim() === '') {
|
|
766
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".sql must be a non-empty string"));
|
|
767
|
-
}
|
|
768
|
-
return;
|
|
769
|
-
}
|
|
770
|
-
if ('search' in entry) {
|
|
771
|
-
var unknown1 = Object.keys(entry).filter(function(k) {
|
|
772
|
-
return !SAVED_SEARCH_KEYS.has(k);
|
|
773
|
-
});
|
|
774
|
-
if (unknown1.length > 0) {
|
|
775
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, " has unknown key(s) ").concat(unknown1.join(', '), "; a saved search takes search, preset, include, exclude, where, k"));
|
|
776
|
-
}
|
|
777
|
-
// A saved entry saves a question; a scope without a question is just flags.
|
|
778
|
-
if (typeof entry.search !== 'string' || entry.search.trim() === '') {
|
|
779
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".search must be non-empty text"));
|
|
780
|
-
}
|
|
781
|
-
if (entry.preset !== undefined && (typeof entry.preset !== 'string' || entry.preset.length === 0)) {
|
|
782
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".preset must be a preset name"));
|
|
783
|
-
}
|
|
784
|
-
if (entry.include !== undefined && !isNonEmptyStringArray(entry.include)) {
|
|
785
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".include must be a non-empty array of glob strings"));
|
|
786
|
-
}
|
|
787
|
-
if (entry.exclude !== undefined && !isNonEmptyStringArray(entry.exclude)) {
|
|
788
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".exclude must be a non-empty array of glob strings"));
|
|
789
|
-
}
|
|
790
|
-
if (entry.where !== undefined && typeof entry.where !== 'string') {
|
|
791
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".where must be a SQL condition string"));
|
|
792
|
-
}
|
|
793
|
-
if (entry.k !== undefined && (typeof entry.k !== 'number' || !Number.isInteger(entry.k) || entry.k <= 0)) {
|
|
794
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, ".k must be a positive integer"));
|
|
795
|
-
}
|
|
796
|
-
return;
|
|
797
|
-
}
|
|
798
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries.").concat(name, " must be { sql } or { search, preset?, include?, exclude?, where?, k? }"));
|
|
799
|
-
}
|
|
800
|
-
function validateConfig(parsed, configPath) {
|
|
801
|
-
if ((typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
802
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": config must be a JSON object"));
|
|
803
|
-
}
|
|
804
|
-
var cfg = parsed;
|
|
805
|
-
// `checks` is rejected by name, not warned: silence would hide that assertions are gone.
|
|
806
|
-
if (cfg.checks !== undefined) {
|
|
807
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": checks was removed in v3 -- sense check no longer asserts on saved queries; a returned row set is the reader's judgment"));
|
|
808
|
-
}
|
|
809
|
-
var presets = cfg.presets;
|
|
810
|
-
if (!presets || (typeof presets === "undefined" ? "undefined" : _type_of(presets)) !== 'object' || Array.isArray(presets) || Object.keys(presets).length === 0) {
|
|
811
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": presets must be a non-empty object of preset name -> { include, exclude?, k?, semantic?, where? }"));
|
|
812
|
-
}
|
|
813
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
814
|
-
try {
|
|
815
|
-
for(var _iterator = Object.entries(presets)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
816
|
-
var _step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], value = _step_value[1];
|
|
817
|
-
validatePreset(name, value, configPath);
|
|
818
|
-
}
|
|
819
|
-
} catch (err) {
|
|
820
|
-
_didIteratorError = true;
|
|
821
|
-
_iteratorError = err;
|
|
822
|
-
} finally{
|
|
823
|
-
try {
|
|
824
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
825
|
-
_iterator.return();
|
|
826
|
-
}
|
|
827
|
-
} finally{
|
|
828
|
-
if (_didIteratorError) {
|
|
829
|
-
throw _iteratorError;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
if (presets.default === undefined) {
|
|
834
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ': presets must include a "default" preset'));
|
|
835
|
-
}
|
|
836
|
-
if (cfg.queries === undefined) cfg.queries = {};
|
|
837
|
-
if (_type_of(cfg.queries) !== 'object' || cfg.queries === null || Array.isArray(cfg.queries)) {
|
|
838
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": queries must be an object of name -> { sql } or { search }"));
|
|
839
|
-
}
|
|
840
|
-
var queries = cfg.queries;
|
|
841
|
-
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
842
|
-
try {
|
|
843
|
-
for(var _iterator1 = Object.entries(queries)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
844
|
-
var _step_value1 = _sliced_to_array(_step1.value, 2), name1 = _step_value1[0], value1 = _step_value1[1];
|
|
845
|
-
validateSavedQuery(name1, value1, configPath);
|
|
846
|
-
}
|
|
847
|
-
} catch (err) {
|
|
848
|
-
_didIteratorError1 = true;
|
|
849
|
-
_iteratorError1 = err;
|
|
850
|
-
} finally{
|
|
851
|
-
try {
|
|
852
|
-
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
853
|
-
_iterator1.return();
|
|
854
|
-
}
|
|
855
|
-
} finally{
|
|
856
|
-
if (_didIteratorError1) {
|
|
857
|
-
throw _iteratorError1;
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
if (cfg.features !== undefined) {
|
|
862
|
-
validateFeaturesBlock(cfg.features, configPath);
|
|
863
|
-
}
|
|
864
|
-
if (cfg.embed !== undefined) {
|
|
865
|
-
validateEmbedBlock(cfg.embed, configPath);
|
|
866
|
-
}
|
|
867
|
-
if (cfg.content !== undefined) {
|
|
868
|
-
validateContentBlock(cfg.content, configPath);
|
|
869
|
-
}
|
|
870
|
-
return cfg;
|
|
871
|
-
}
|
|
872
|
-
function loadConfig(explicitPath) {
|
|
873
|
-
var configPath;
|
|
874
|
-
if (explicitPath) {
|
|
875
|
-
configPath = (0, _nodepath.resolve)(process.cwd(), explicitPath);
|
|
876
|
-
if (!(0, _nodefs.existsSync)(configPath)) throw new _errorsts.SenseError('CONFIG_NOT_FOUND', "config not found: ".concat(configPath));
|
|
877
|
-
} else {
|
|
878
|
-
var found = findConfigPath(process.cwd());
|
|
879
|
-
if (!found) {
|
|
880
|
-
throw new _errorsts.SenseError('CONFIG_NOT_FOUND', "could not find ".concat(CONFIG_FILENAME, " in ").concat(process.cwd(), " or any parent directory"));
|
|
881
|
-
}
|
|
882
|
-
configPath = found;
|
|
883
|
-
}
|
|
884
|
-
var raw = (0, _nodefs.readFileSync)(configPath, 'utf8');
|
|
885
|
-
var parsed = JSON.parse(raw);
|
|
886
|
-
// Ahead of both the version gate and legacy/current shape checks: a non-object file (or
|
|
887
|
-
// an array -- typeof [] is also 'object') is malformed at every version, so it gets one
|
|
888
|
-
// error regardless of which branch would otherwise run.
|
|
889
|
-
if ((typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
890
|
-
throw new _errorsts.SenseError('CONFIG_INVALID', "".concat(configPath, ": config must be a JSON object"));
|
|
891
|
-
}
|
|
892
|
-
// Version gate before shape validation: a config written by a newer sense should fail
|
|
893
|
-
// with "requires a newer sense", not with shape errors its own version may not have.
|
|
894
|
-
var version = (typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) === 'object' && parsed !== null && typeof parsed.version === 'number' ? parsed.version : 1;
|
|
895
|
-
if (version > SUPPORTED_CONFIG_VERSION) {
|
|
896
|
-
throw new _errorsts.SenseError('CONFIG_VERSION_UNSUPPORTED', "config version ".concat(version, " requires a newer sense"));
|
|
897
|
-
}
|
|
898
|
-
// validateConfig only knows the current shape, so scan-shaped files (pre-v3) get a minimal
|
|
899
|
-
// check, migrate, then the full one on the result.
|
|
900
|
-
var cfg;
|
|
901
|
-
var migratedFrom;
|
|
902
|
-
if (version < SUPPORTED_CONFIG_VERSION) {
|
|
903
|
-
if (version < FIRST_PRESET_VERSION) validateLegacyScan(parsed, configPath);
|
|
904
|
-
var result = migrateConfig(parsed);
|
|
905
|
-
cfg = validateConfig(result.cfg, configPath);
|
|
906
|
-
migratedFrom = result.from;
|
|
907
|
-
(0, _nodefs.writeFileSync)(configPath, "".concat(JSON.stringify(cfg, null, 2), "\n"));
|
|
908
|
-
} else {
|
|
909
|
-
cfg = validateConfig(parsed, configPath);
|
|
910
|
-
}
|
|
911
|
-
var unknownKeys = unknownConfigKeys(cfg);
|
|
912
|
-
return _object_spread_props(_object_spread({}, cfg), {
|
|
913
|
-
baseDir: (0, _nodepath.dirname)(configPath),
|
|
914
|
-
configPath: configPath,
|
|
915
|
-
migratedFrom: migratedFrom,
|
|
916
|
-
unknownKeys: unknownKeys.length > 0 ? unknownKeys : undefined
|
|
917
|
-
});
|
|
918
|
-
}
|
|
919
|
-
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|