@mnaoumov/obsidian-lib 1.0.1 → 2.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/dist/lib/cjs/__merged.cjs +15 -1
- package/dist/lib/cjs/__merged.d.cts +5 -3
- package/dist/lib/cjs/app.cjs +1 -1
- package/dist/lib/cjs/attachment-path.cjs +62 -9
- package/dist/lib/cjs/attachment-path.d.cts +21 -43
- package/dist/lib/cjs/attachment-unit-folder.cjs +1 -1
- package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
- package/dist/lib/cjs/components/plugin-notice-component.cjs +7 -2
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
- package/dist/lib/cjs/components/release-notes-component.cjs +3 -2
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
- package/dist/lib/cjs/demo-vault-helper.cjs +3 -2
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +9 -8
- package/dist/lib/cjs/file-system.cjs +6 -1
- package/dist/lib/cjs/file-system.d.cts +7 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/metadata-cache.cjs +25 -7
- package/dist/lib/cjs/metadata-cache.d.cts +8 -19
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +7 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +30 -1
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
- package/dist/lib/esm/__merged.d.mts +5 -3
- package/dist/lib/esm/__merged.mjs +15 -1
- package/dist/lib/esm/app.mjs +1 -1
- package/dist/lib/esm/attachment-path.d.mts +21 -43
- package/dist/lib/esm/attachment-path.mjs +65 -9
- package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
- package/dist/lib/esm/attachment-unit-folder.mjs +1 -1
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
- package/dist/lib/esm/components/plugin-notice-component.mjs +7 -2
- package/dist/lib/esm/components/release-notes-component.mjs +6 -2
- package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
- package/dist/lib/esm/components/settings-migration-component.mjs +5 -5
- package/dist/lib/esm/demo-vault-helper.mjs +3 -2
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +12 -8
- package/dist/lib/esm/file-system.d.mts +7 -0
- package/dist/lib/esm/file-system.mjs +5 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/metadata-cache.d.mts +8 -19
- package/dist/lib/esm/metadata-cache.mjs +30 -8
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
- package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
- package/dist/lib/esm/plugin/plugin-api.mjs +6 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
- package/dist/lib/esm/plugin/settings-migration-api.mjs +25 -1
- package/dist/styles.css +4 -1
- package/package.json +1 -1
- package/plugin/plugin-api-schema/package.json +6 -0
|
@@ -90,18 +90,6 @@ export interface GetBacklinksForFileSafeParams extends GetBacklinksForFileSafeOp
|
|
|
90
90
|
*/
|
|
91
91
|
readonly pathOrFile: PathOrFile;
|
|
92
92
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Wrapper for the getBacklinksForFile method that provides a safe overload.
|
|
95
|
-
*/
|
|
96
|
-
export interface GetBacklinksForFileSafeWrapper {
|
|
97
|
-
/**
|
|
98
|
-
* Retrieves the backlinks for a file safely.
|
|
99
|
-
*
|
|
100
|
-
* @param pathOrFile - The path or file object.
|
|
101
|
-
* @returns A {@link Promise} that resolves to an array dictionary of backlinks.
|
|
102
|
-
*/
|
|
103
|
-
safe: (pathOrFile: PathOrFile) => Promise<CustomArrayDict<Reference>>;
|
|
104
|
-
}
|
|
105
93
|
/**
|
|
106
94
|
* Options for {@link getCacheSafe}.
|
|
107
95
|
*/
|
|
@@ -217,7 +205,7 @@ export interface RegisterFileCacheForNonExistingFileParams {
|
|
|
217
205
|
/**
|
|
218
206
|
* The plugin id of the Advanced Metadata Cache plugin, the successor to Backlink Cache.
|
|
219
207
|
*
|
|
220
|
-
* Used by {@link hasBacklinkCachePlugin}
|
|
208
|
+
* Used by {@link hasBacklinkCachePlugin}, and as the provider id under which {@link getBacklinksForFileOrPath} and {@link getBacklinksForFileSafe} look up the plugin's published API.
|
|
221
209
|
*/
|
|
222
210
|
export declare const ADVANCED_METADATA_CACHE_PLUGIN_ID = "advanced-metadata-cache";
|
|
223
211
|
/**
|
|
@@ -239,10 +227,9 @@ export declare function ensureMetadataCacheReady(app: App): Promise<void>;
|
|
|
239
227
|
* Retrieves the backlinks for a file or path.
|
|
240
228
|
* NOTE: The file may be non-existent.
|
|
241
229
|
*
|
|
242
|
-
* When
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
* gives the same references Obsidian's own `getBacklinksForFile` gives.
|
|
230
|
+
* When Advanced Metadata Cache publishes its backlinks API and its `Backlinks` module is on, its cache answers.
|
|
231
|
+
* Otherwise the answer comes from a backlink index whose cost is proportional to the candidate notes rather than
|
|
232
|
+
* to every reference in the vault, and which gives the same references Obsidian's own `getBacklinksForFile` gives.
|
|
246
233
|
*
|
|
247
234
|
* @param app - The Obsidian application instance.
|
|
248
235
|
* @param pathOrFile - The path or file object.
|
|
@@ -252,7 +239,9 @@ export declare function getBacklinksForFileOrPath(app: App, pathOrFile: PathOrFi
|
|
|
252
239
|
/**
|
|
253
240
|
* Retrieves the backlinks for a file safely.
|
|
254
241
|
*
|
|
255
|
-
*
|
|
242
|
+
* When Advanced Metadata Cache publishes its backlinks API and its `Backlinks` module is on, that API answers.
|
|
243
|
+
*
|
|
244
|
+
* Otherwise this is NOT a pure read. It verifies
|
|
256
245
|
* each backlink against the note's current text, and to do that it calls {@link saveNote} on every
|
|
257
246
|
* note that links to the file, which saves any open editor view of those notes that has unsaved
|
|
258
247
|
* changes. Call it from an explicit user action. Do not call it from an automatic trigger (a vault or
|
|
@@ -303,7 +292,7 @@ export declare function getLinks(params: GetLinksParams): Reference[];
|
|
|
303
292
|
/**
|
|
304
293
|
* Determines whether a backlink cache plugin is currently loaded - either Advanced Metadata Cache ({@link ADVANCED_METADATA_CACHE_PLUGIN_ID}) or its retired predecessor Backlink Cache ({@link BACKLINK_CACHE_PLUGIN_ID}).
|
|
305
294
|
*
|
|
306
|
-
* Such a plugin
|
|
295
|
+
* Such a plugin keeps a drain-on-read backlink index and indexes canvas metadata, so a caller that compensates for Obsidian's own gaps can stand down while one is present. Both ids are recognized; {@link BACKLINK_CACHE_PLUGIN_ID} records when the retired one may be dropped.
|
|
307
296
|
*
|
|
308
297
|
* This reads the LOADED plugin instance rather than `app.plugins.enabledPlugins`, deliberately: the question is whether the plugin's patches are in place right now, and they are not until it has loaded. Plugins load in an unspecified order, so call this from a user-driven path rather than from plugin load - see rule L25 in `AGENTS.md`.
|
|
309
298
|
*
|
|
@@ -144,6 +144,7 @@ var plugin_exports = {};
|
|
|
144
144
|
__export(plugin_exports, {
|
|
145
145
|
plugin: () => plugin,
|
|
146
146
|
"plugin-api": () => plugin_api,
|
|
147
|
+
"plugin-api-schema": () => plugin_api_schema,
|
|
147
148
|
"plugin-context": () => plugin_context,
|
|
148
149
|
"plugin-event-source": () => plugin_event_source,
|
|
149
150
|
"plugin-install-state": () => plugin_install_state,
|
|
@@ -152,6 +153,7 @@ __export(plugin_exports, {
|
|
|
152
153
|
"settings-migration-api": () => settings_migration_api
|
|
153
154
|
});
|
|
154
155
|
module.exports = __toCommonJS(plugin_exports);
|
|
156
|
+
var plugin_api_schema = __toESM(__extractDefault(require('./plugin-api-schema.cjs')), 1);
|
|
155
157
|
var plugin_api = __toESM(__extractDefault(require('./plugin-api.cjs')), 1);
|
|
156
158
|
var plugin_context = __toESM(__extractDefault(require('./plugin-context.cjs')), 1);
|
|
157
159
|
var plugin_event_source = __toESM(__extractDefault(require('./plugin-event-source.cjs')), 1);
|
|
@@ -164,6 +166,7 @@ var settings_migration_api = __toESM(__extractDefault(require('./settings-migrat
|
|
|
164
166
|
0 && (module.exports = {
|
|
165
167
|
plugin,
|
|
166
168
|
"plugin-api": null,
|
|
169
|
+
"plugin-api-schema": null,
|
|
167
170
|
"plugin-context": null,
|
|
168
171
|
"plugin-event-source": null,
|
|
169
172
|
"plugin-install-state": null,
|
|
@@ -171,4 +174,4 @@ var settings_migration_api = __toESM(__extractDefault(require('./settings-migrat
|
|
|
171
174
|
"plugin-settings-tab": null,
|
|
172
175
|
"settings-migration-api": null
|
|
173
176
|
});
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdwbHVnaW4tYXBpLXNjaGVtYScgZnJvbSAnLi9wbHVnaW4tYXBpLXNjaGVtYS50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWFwaScgZnJvbSAnLi9wbHVnaW4tYXBpLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY29udGV4dCcgZnJvbSAnLi9wbHVnaW4tY29udGV4dC50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWV2ZW50LXNvdXJjZScgZnJvbSAnLi9wbHVnaW4tZXZlbnQtc291cmNlLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4taW5zdGFsbC1zdGF0ZScgZnJvbSAnLi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luLWxpZmVjeWNsZS1ldmVudHMnIGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1zZXR0aW5ncy10YWInIGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLXRhYi50cyc7XG5leHBvcnQgKiBhcyAncGx1Z2luJyBmcm9tICcuL3BsdWdpbi50cyc7XG5leHBvcnQgKiBhcyAnc2V0dGluZ3MtbWlncmF0aW9uLWFwaScgZnJvbSAnLi9zZXR0aW5ncy1taWdyYXRpb24tYXBpLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBQUE7QUFBQSxFQUFBLDJCQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSw2QkFBQUM7QUFBQSxFQUFBLDhCQUFBQztBQUFBLEVBQUEsaUNBQUFDO0FBQUEsRUFBQSw2QkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBO0FBQUE7QUFFQSxJQUFBTixvQkFBcUM7QUFDckMsSUFBQUQsYUFBOEI7QUFDOUIsSUFBQUUsaUJBQWtDO0FBQ2xDLElBQUFDLHNCQUF1QztBQUN2QyxJQUFBQyx1QkFBd0M7QUFDeEMsSUFBQUMsMEJBQTJDO0FBQzNDLElBQUFDLHNCQUF1QztBQUN2QyxhQUEwQjtBQUMxQixJQUFBQyx5QkFBMEM7IiwKICAibmFtZXMiOiBbInBsdWdpbi1hcGkiLCAicGx1Z2luLWFwaS1zY2hlbWEiLCAicGx1Z2luLWNvbnRleHQiLCAicGx1Z2luLWV2ZW50LXNvdXJjZSIsICJwbHVnaW4taW5zdGFsbC1zdGF0ZSIsICJwbHVnaW4tbGlmZWN5Y2xlLWV2ZW50cyIsICJwbHVnaW4tc2V0dGluZ3MtdGFiIiwgInNldHRpbmdzLW1pZ3JhdGlvbi1hcGkiXQp9Cg==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference path="../library.d.cts" />
|
|
2
|
+
export * as 'plugin-api-schema' from './plugin-api-schema.cjs';
|
|
2
3
|
export * as 'plugin-api' from './plugin-api.cjs';
|
|
3
4
|
export * as 'plugin-context' from './plugin-context.cjs';
|
|
4
5
|
export * as 'plugin-event-source' from './plugin-event-source.cjs';
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function () {
|
|
7
|
+
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function ensureBrowserProcess() {
|
|
13
|
+
const browserProcess = {
|
|
14
|
+
browser: true,
|
|
15
|
+
cwd() {
|
|
16
|
+
return "/";
|
|
17
|
+
},
|
|
18
|
+
env: {},
|
|
19
|
+
platform: "android"
|
|
20
|
+
};
|
|
21
|
+
const existingProcess = globalThis.process;
|
|
22
|
+
if (!existingProcess) {
|
|
23
|
+
globalThis.process = browserProcess;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (existingProcess.versions?.node) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const existingProcessRecord = existingProcess;
|
|
30
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
31
|
+
existingProcessRecord[key] ??= value;
|
|
32
|
+
}
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function keepName($unknown) {
|
|
37
|
+
return $unknown;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
(function initCjs() {
|
|
41
|
+
const globalThisRecord = globalThis;
|
|
42
|
+
ensureDisposeSymbols();
|
|
43
|
+
globalThisRecord["__name"] ??= keepName;
|
|
44
|
+
globalThisRecord["__extractDefault"] ??= extractDefault;
|
|
45
|
+
ensureBrowserProcess();
|
|
46
|
+
function extractDefault(module) {
|
|
47
|
+
return module && module.__esModule && "default" in module ? module.default : module;
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
})();
|
|
51
|
+
(function patchObsidianRequire() {
|
|
52
|
+
const originalRequire = require;
|
|
53
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
require = Object.assign(
|
|
57
|
+
(id) => requirePatched(id),
|
|
58
|
+
originalRequire,
|
|
59
|
+
{
|
|
60
|
+
__isPatched: true
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
function extractDefault(module) {
|
|
64
|
+
return module && module.__esModule && "default" in module ? module.default : module;
|
|
65
|
+
}
|
|
66
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
67
|
+
"@codemirror/autocomplete",
|
|
68
|
+
"@codemirror/collab",
|
|
69
|
+
"@codemirror/commands",
|
|
70
|
+
"@codemirror/language",
|
|
71
|
+
"@codemirror/lint",
|
|
72
|
+
"@codemirror/search",
|
|
73
|
+
"@codemirror/state",
|
|
74
|
+
"@codemirror/text",
|
|
75
|
+
"@codemirror/view",
|
|
76
|
+
"@lezer/common",
|
|
77
|
+
"@lezer/highlight",
|
|
78
|
+
"@lezer/lr",
|
|
79
|
+
"obsidian"
|
|
80
|
+
]);
|
|
81
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
82
|
+
"@codemirror/closebrackets",
|
|
83
|
+
"@codemirror/comment",
|
|
84
|
+
"@codemirror/fold",
|
|
85
|
+
"@codemirror/gutter",
|
|
86
|
+
"@codemirror/highlight",
|
|
87
|
+
"@codemirror/history",
|
|
88
|
+
"@codemirror/matchbrackets",
|
|
89
|
+
"@codemirror/panel",
|
|
90
|
+
"@codemirror/rangeset",
|
|
91
|
+
"@codemirror/rectangular-selection",
|
|
92
|
+
"@codemirror/stream-parser",
|
|
93
|
+
"@codemirror/tooltip"
|
|
94
|
+
]);
|
|
95
|
+
function requirePatched(id) {
|
|
96
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
97
|
+
return originalRequire?.(id);
|
|
98
|
+
}
|
|
99
|
+
if (globalThis.app.isMobile) {
|
|
100
|
+
if (id === "process" || id === "node:process") {
|
|
101
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
102
|
+
return process;
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
const module = originalRequire?.(id);
|
|
106
|
+
if (module) {
|
|
107
|
+
return extractDefault(module);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
111
|
+
return {};
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
|
|
115
|
+
"use strict";
|
|
116
|
+
var __defProp = Object.defineProperty;
|
|
117
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
118
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
119
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
120
|
+
var __export = (target, all) => {
|
|
121
|
+
for (var name in all)
|
|
122
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
123
|
+
};
|
|
124
|
+
var __copyProps = (to, from, except, desc) => {
|
|
125
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
126
|
+
for (let key of __getOwnPropNames(from))
|
|
127
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
128
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
129
|
+
}
|
|
130
|
+
return to;
|
|
131
|
+
};
|
|
132
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
133
|
+
var plugin_api_schema_exports = {};
|
|
134
|
+
__export(plugin_api_schema_exports, {
|
|
135
|
+
createArgumentsSchema: () => createArgumentsSchema,
|
|
136
|
+
createTypeGuardSchema: () => createTypeGuardSchema
|
|
137
|
+
});
|
|
138
|
+
module.exports = __toCommonJS(plugin_api_schema_exports);
|
|
139
|
+
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
140
|
+
var import_library = require('../library.cjs');
|
|
141
|
+
function createArgumentsSchema(parameters) {
|
|
142
|
+
const parameterList = (0, import_object_utils.castTo)(parameters);
|
|
143
|
+
return createSchema((value) => {
|
|
144
|
+
if (!Array.isArray(value)) {
|
|
145
|
+
return { issues: [{ message: "Expected an argument list." }] };
|
|
146
|
+
}
|
|
147
|
+
if (value.length > parameterList.length) {
|
|
148
|
+
return { issues: [{ message: `Expected at most ${String(parameterList.length)} argument(s), got ${String(value.length)}.` }] };
|
|
149
|
+
}
|
|
150
|
+
const issues = parameterList.flatMap((parameter, index) => parameter.typeGuard(value[index]) ? [] : [{ message: `Expected ${parameter.expected}.`, path: [index] }]);
|
|
151
|
+
return issues.length === 0 ? { value: (0, import_object_utils.castTo)(value) } : { issues };
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function createTypeGuardSchema(params) {
|
|
155
|
+
return createSchema((value) => params.typeGuard(value) ? { value } : { issues: [{ message: `Expected ${params.expected}.` }] });
|
|
156
|
+
}
|
|
157
|
+
function createSchema(validate) {
|
|
158
|
+
return {
|
|
159
|
+
"~standard": {
|
|
160
|
+
validate,
|
|
161
|
+
vendor: import_library.OBSIDIAN_LIBRARY_NAME,
|
|
162
|
+
version: 1
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
167
|
+
0 && (module.exports = {
|
|
168
|
+
createArgumentsSchema,
|
|
169
|
+
createTypeGuardSchema
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tYXBpLXNjaGVtYS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSB7QGxpbmsgaHR0cHM6Ly9zdGFuZGFyZHNjaGVtYS5kZXYgfCBTdGFuZGFyZCBTY2hlbWF9IGJ1aWxkZXJzIGZvciB0aGUgcGF5bG9hZCBoYWx2ZXMgb2YgYVxuICogYFBsdWdpbkFwaUNvbnRyYWN0YC5cbiAqXG4gKiBBIGNvbnRyYWN0J3Mgc2NoZW1hcyBjcm9zcyB0aGUgcmVnaXN0cnkgaW5zaWRlIHRoZSBwcm92aWRlcidzIHJlY29yZCBhbmQgcnVuIGluc2lkZSB3aGljaGV2ZXIgbGlicmFyeSBjb3B5XG4gKiBtYWRlIHRoZSBjYWxsLCBzbyB0aGV5IGFyZSBwbGFpbiBvYmplY3RzIG92ZXIgcGxhaW4gZnVuY3Rpb25zIFx1MjAxNCB3aGljaCBhIHR5cGUgZ3VhcmQgYWxyZWFkeSBpcy4gVGhlc2UgYnVpbGRlcnNcbiAqIHR1cm4gdGhlIGd1YXJkcyBhIG1vZHVsZSBhbHJlYWR5IGhhcyBpbnRvIHRoZSB0d28gc2hhcGVzIGEgbWV0aG9kIGNvbnRyYWN0IG5lZWRzOiBvbmUgdmFsdWUgKGFuIG91dHB1dCkgYW5kXG4gKiBvbmUgYXJndW1lbnQgbGlzdCAoYW4gaW5wdXQpLiB6b2QgLyB2YWxpYm90IC8gYXJrdHlwZSBzY2hlbWFzIHBsdWcgaW50byB0aGUgc2FtZSBzbG90cyB1bmNoYW5nZWQ7IHRoaXMgbGlicmFyeVxuICoganVzdCBkb2VzIG5vdCBtYWtlIGV2ZXJ5IGNvbnN1bWVyIGJ1bmRsZSBvbmUgdG8gZGVzY3JpYmUgdHdvIGFyZ3VtZW50cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkU2NoZW1hVjEgfSBmcm9tICdAc3RhbmRhcmQtc2NoZW1hL3NwZWMnO1xuXG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcblxuaW1wb3J0IHsgT0JTSURJQU5fTElCUkFSWV9OQU1FIH0gZnJvbSAnLi4vbGlicmFyeS50cyc7XG5cbi8qKlxuICogT25lIHR5cGUgZ3VhcmQgcGVyIHBhcmFtZXRlciBvZiBhIG1ldGhvZCwgaW4gb3JkZXIuXG4gKlxuICogQHR5cGVQYXJhbSBUUGFyYW1ldGVycyAtIFRoZSBtZXRob2QncyBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBBcmd1bWVudFR5cGVHdWFyZHM8VFBhcmFtZXRlcnMgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+ID0ge1xuICByZWFkb25seSBbVEluZGV4IGluIGtleW9mIFRQYXJhbWV0ZXJzXTogQ3JlYXRlVHlwZUd1YXJkU2NoZW1hUGFyYW1zPFRQYXJhbWV0ZXJzW1RJbmRleF0+O1xufTtcblxuLyoqXG4gKiBPbmUgdmFsdWUgYSBzY2hlbWEgYWNjZXB0cywgZGVzY3JpYmVkIGJ5IGEgdHlwZSBndWFyZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSB0aGUgZ3VhcmQgbmFycm93cyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVUeXBlR3VhcmRTY2hlbWFQYXJhbXM8VD4ge1xuICAvKipcbiAgICogV2hhdCB0aGUgdmFsdWUgc2hvdWxkIGhhdmUgYmVlbiwgcGhyYXNlZCB0byBmb2xsb3cgXCJFeHBlY3RlZFwiLCBlLmcuIGAnYSBzdHJpbmcnYC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdGVkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgdmFsdWUgaXMgYWNjZXB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGBUYC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGVHdWFyZDogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgaW5wdXQgc2NoZW1hIG9mIGEgbWV0aG9kIGNvbnRyYWN0OiBhIHNjaGVtYSBvdmVyIHRoZSBtZXRob2QncyBBUkdVTUVOVCBMSVNULCBvbmUgdHlwZSBndWFyZCBwZXJcbiAqIHBhcmFtZXRlci4gQW4gYXJndW1lbnQgdGhhdCBmYWlscyBpdHMgZ3VhcmQgaXMgcmVwb3J0ZWQgd2l0aCBpdHMgaW5kZXggYXMgdGhlIGlzc3VlIHBhdGgsIGFuZCBhbiBhcmd1bWVudFxuICogbGlzdCBsb25nZXIgdGhhbiB0aGUgcGFyYW1ldGVyIGxpc3QgaXMgcmVmdXNlZC4gQSBtaXNzaW5nIGFyZ3VtZW50IHJlYWNoZXMgaXRzIGd1YXJkIGFzIGB1bmRlZmluZWRgLCBzbyBhblxuICogb3B0aW9uYWwgcGFyYW1ldGVyJ3MgZ3VhcmQgYWNjZXB0cyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRQYXJhbWV0ZXJzIC0gVGhlIG1ldGhvZCdzIHBhcmFtZXRlcnMsIGluZmVycmVkIGZyb20gdGhlIGd1YXJkcy5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gT25lIGd1YXJkIHBlciBwYXJhbWV0ZXIsIGluIG9yZGVyLlxuICogQHJldHVybnMgVGhlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFyZ3VtZW50c1NjaGVtYTxUUGFyYW1ldGVycyBleHRlbmRzIHJlYWRvbmx5IHVua25vd25bXT4oXG4gIHBhcmFtZXRlcnM6IEFyZ3VtZW50VHlwZUd1YXJkczxUUGFyYW1ldGVycz5cbik6IFN0YW5kYXJkU2NoZW1hVjE8dW5rbm93biwgVFBhcmFtZXRlcnM+IHtcbiAgY29uc3QgcGFyYW1ldGVyTGlzdCA9IGNhc3RUbzxyZWFkb25seSBDcmVhdGVUeXBlR3VhcmRTY2hlbWFQYXJhbXM8dW5rbm93bj5bXT4ocGFyYW1ldGVycyk7XG4gIHJldHVybiBjcmVhdGVTY2hlbWEoKHZhbHVlOiB1bmtub3duKTogU3RhbmRhcmRTY2hlbWFWMS5SZXN1bHQ8VFBhcmFtZXRlcnM+ID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBpc3N1ZXM6IFt7IG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBhcmd1bWVudCBsaXN0LicgfV0gfTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID4gcGFyYW1ldGVyTGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IGlzc3VlczogW3sgbWVzc2FnZTogYEV4cGVjdGVkIGF0IG1vc3QgJHtTdHJpbmcocGFyYW1ldGVyTGlzdC5sZW5ndGgpfSBhcmd1bWVudChzKSwgZ290ICR7U3RyaW5nKHZhbHVlLmxlbmd0aCl9LmAgfV0gfTtcbiAgICB9XG5cbiAgICBjb25zdCBpc3N1ZXMgPSBwYXJhbWV0ZXJMaXN0LmZsYXRNYXAoKHBhcmFtZXRlciwgaW5kZXgpOiBTdGFuZGFyZFNjaGVtYVYxLklzc3VlW10gPT4gcGFyYW1ldGVyLnR5cGVHdWFyZCh2YWx1ZVtpbmRleF0pID8gW10gOiBbeyBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtwYXJhbWV0ZXIuZXhwZWN0ZWR9LmAsIHBhdGg6IFtpbmRleF0gfV0pO1xuICAgIHJldHVybiBpc3N1ZXMubGVuZ3RoID09PSAwID8geyB2YWx1ZTogY2FzdFRvPFRQYXJhbWV0ZXJzPih2YWx1ZSkgfSA6IHsgaXNzdWVzIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHNjaGVtYSBvdmVyIG9uZSB2YWx1ZSBmcm9tIGEgdHlwZSBndWFyZCBcdTIwMTQgdGhlIG91dHB1dCBzY2hlbWEgb2YgYSBtZXRob2QgY29udHJhY3QsIHR5cGljYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSB0aGUgZ3VhcmQgbmFycm93cyB0by5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZ3VhcmQgYW5kIHdoYXQgaXQgZXhwZWN0cy5cbiAqIEByZXR1cm5zIFRoZSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlR3VhcmRTY2hlbWE8VD4ocGFyYW1zOiBDcmVhdGVUeXBlR3VhcmRTY2hlbWFQYXJhbXM8VD4pOiBTdGFuZGFyZFNjaGVtYVYxPHVua25vd24sIFQ+IHtcbiAgcmV0dXJuIGNyZWF0ZVNjaGVtYSgodmFsdWU6IHVua25vd24pOiBTdGFuZGFyZFNjaGVtYVYxLlJlc3VsdDxUPiA9PiBwYXJhbXMudHlwZUd1YXJkKHZhbHVlKSA/IHsgdmFsdWUgfSA6IHsgaXNzdWVzOiBbeyBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtwYXJhbXMuZXhwZWN0ZWR9LmAgfV0gfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNjaGVtYTxUPih2YWxpZGF0ZTogKHZhbHVlOiB1bmtub3duKSA9PiBTdGFuZGFyZFNjaGVtYVYxLlJlc3VsdDxUPik6IFN0YW5kYXJkU2NoZW1hVjE8dW5rbm93biwgVD4ge1xuICByZXR1cm4ge1xuICAgICd+c3RhbmRhcmQnOiB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHZlbmRvcjogT0JTSURJQU5fTElCUkFSWV9OQU1FLFxuICAgICAgdmVyc2lvbjogMVxuICAgIH1cbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLDBCQUF1QjtBQUV2QixxQkFBc0M7QUF5Qy9CLFNBQVMsc0JBQ2QsWUFDd0M7QUFDeEMsUUFBTSxvQkFBZ0IsNEJBQXdELFVBQVU7QUFDeEYsU0FBTyxhQUFhLENBQUMsVUFBeUQ7QUFDNUUsUUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDekIsYUFBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFNBQVMsNkJBQTZCLENBQUMsRUFBRTtBQUFBLElBQy9EO0FBRUEsUUFBSSxNQUFNLFNBQVMsY0FBYyxRQUFRO0FBQ3ZDLGFBQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxTQUFTLG9CQUFvQixPQUFPLGNBQWMsTUFBTSxDQUFDLHFCQUFxQixPQUFPLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQUEsSUFDL0g7QUFFQSxVQUFNLFNBQVMsY0FBYyxRQUFRLENBQUMsV0FBVyxVQUFvQyxVQUFVLFVBQVUsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsWUFBWSxVQUFVLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3TCxXQUFPLE9BQU8sV0FBVyxJQUFJLEVBQUUsV0FBTyw0QkFBb0IsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPO0FBQUEsRUFDaEYsQ0FBQztBQUNIO0FBU08sU0FBUyxzQkFBeUIsUUFBc0U7QUFDN0csU0FBTyxhQUFhLENBQUMsVUFBK0MsT0FBTyxVQUFVLEtBQUssSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLFNBQVMsWUFBWSxPQUFPLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNySztBQUVBLFNBQVMsYUFBZ0IsVUFBd0Y7QUFDL0csU0FBTztBQUFBLElBQ0wsYUFBYTtBQUFBLE1BQ1g7QUFBQSxNQUNBLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference path="../library.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Dependency-free {@link https://standardschema.dev | Standard Schema} builders for the payload halves of a
|
|
6
|
+
* `PluginApiContract`.
|
|
7
|
+
*
|
|
8
|
+
* A contract's schemas cross the registry inside the provider's record and run inside whichever library copy
|
|
9
|
+
* made the call, so they are plain objects over plain functions — which a type guard already is. These builders
|
|
10
|
+
* turn the guards a module already has into the two shapes a method contract needs: one value (an output) and
|
|
11
|
+
* one argument list (an input). zod / valibot / arktype schemas plug into the same slots unchanged; this library
|
|
12
|
+
* just does not make every consumer bundle one to describe two arguments.
|
|
13
|
+
*/
|
|
14
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec' with { 'resolution-mode': 'import' };
|
|
15
|
+
/**
|
|
16
|
+
* One type guard per parameter of a method, in order.
|
|
17
|
+
*
|
|
18
|
+
* @typeParam TParameters - The method's parameters.
|
|
19
|
+
*/
|
|
20
|
+
export type ArgumentTypeGuards<TParameters extends readonly unknown[]> = {
|
|
21
|
+
readonly [TIndex in keyof TParameters]: CreateTypeGuardSchemaParams<TParameters[TIndex]>;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* One value a schema accepts, described by a type guard.
|
|
25
|
+
*
|
|
26
|
+
* @typeParam T - The type the guard narrows to.
|
|
27
|
+
*/
|
|
28
|
+
export interface CreateTypeGuardSchemaParams<T> {
|
|
29
|
+
/**
|
|
30
|
+
* What the value should have been, phrased to follow "Expected", e.g. `'a string'`.
|
|
31
|
+
*/
|
|
32
|
+
readonly expected: string;
|
|
33
|
+
/**
|
|
34
|
+
* Decides whether the value is acceptable.
|
|
35
|
+
*
|
|
36
|
+
* @param value - The value to check.
|
|
37
|
+
* @returns Whether the value is a `T`.
|
|
38
|
+
*/
|
|
39
|
+
readonly typeGuard: (value: unknown) => value is T;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds the input schema of a method contract: a schema over the method's ARGUMENT LIST, one type guard per
|
|
43
|
+
* parameter. An argument that fails its guard is reported with its index as the issue path, and an argument
|
|
44
|
+
* list longer than the parameter list is refused. A missing argument reaches its guard as `undefined`, so an
|
|
45
|
+
* optional parameter's guard accepts `undefined`.
|
|
46
|
+
*
|
|
47
|
+
* @typeParam TParameters - The method's parameters, inferred from the guards.
|
|
48
|
+
* @param parameters - One guard per parameter, in order.
|
|
49
|
+
* @returns The schema.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createArgumentsSchema<TParameters extends readonly unknown[]>(parameters: ArgumentTypeGuards<TParameters>): StandardSchemaV1<unknown, TParameters>;
|
|
52
|
+
/**
|
|
53
|
+
* Builds a schema over one value from a type guard — the output schema of a method contract, typically.
|
|
54
|
+
*
|
|
55
|
+
* @typeParam T - The type the guard narrows to.
|
|
56
|
+
* @param params - The guard and what it expects.
|
|
57
|
+
* @returns The schema.
|
|
58
|
+
*/
|
|
59
|
+
export declare function createTypeGuardSchema<T>(params: CreateTypeGuardSchemaParams<T>): StandardSchemaV1<unknown, T>;
|