@luzzle/core 0.0.37 → 0.0.39
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 +9 -36
- package/dist/src/database/migrations/2026-02-11T23:03:45Z-clear-pieces-cache.d.ts +3 -0
- package/dist/src/database/migrations/2026-02-11T23:03:45Z-clear-pieces-cache.js +8 -0
- package/dist/src/database/migrations/2026-02-11T23:03:45Z-clear-pieces-cache.js.map +1 -0
- package/dist/src/lib/ajv.test.js +1 -1
- package/dist/src/lib/ajv.test.js.map +1 -1
- package/dist/src/llm/google.d.ts +1 -1
- package/dist/src/pieces/Piece.d.ts +2 -2
- package/dist/src/pieces/Piece.fixtures.d.ts +21 -27
- package/dist/src/pieces/Piece.fixtures.js +34 -21
- package/dist/src/pieces/Piece.fixtures.js.map +1 -1
- package/dist/src/pieces/Piece.js +45 -42
- package/dist/src/pieces/Piece.js.map +1 -1
- package/dist/src/pieces/Piece.test.js +487 -739
- package/dist/src/pieces/Piece.test.js.map +1 -1
- package/dist/src/pieces/index.d.ts +1 -0
- package/dist/src/pieces/index.js +1 -0
- package/dist/src/pieces/index.js.map +1 -1
- package/dist/src/pieces/item.js +29 -17
- package/dist/src/pieces/item.js.map +1 -1
- package/dist/src/pieces/item.test.js +141 -113
- package/dist/src/pieces/item.test.js.map +1 -1
- package/dist/src/pieces/manager.test.js +1 -1
- package/dist/src/pieces/manager.test.js.map +1 -1
- package/dist/src/pieces/utils/frontmatter.d.ts +42 -10
- package/dist/src/pieces/utils/frontmatter.js +112 -44
- package/dist/src/pieces/utils/frontmatter.js.map +1 -1
- package/dist/src/pieces/utils/frontmatter.path.d.ts +5 -0
- package/dist/src/pieces/utils/frontmatter.path.js +95 -0
- package/dist/src/pieces/utils/frontmatter.path.js.map +1 -0
- package/dist/src/pieces/utils/frontmatter.path.test.d.ts +1 -0
- package/dist/src/pieces/utils/frontmatter.path.test.js +126 -0
- package/dist/src/pieces/utils/frontmatter.path.test.js.map +1 -0
- package/dist/src/pieces/utils/frontmatter.test.js +266 -169
- package/dist/src/pieces/utils/frontmatter.test.js.map +1 -1
- package/dist/src/pieces/utils/piece.js +3 -2
- package/dist/src/pieces/utils/piece.js.map +1 -1
- package/dist/src/pieces/utils/piece.test.js +1 -1
- package/dist/src/pieces/utils/piece.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/src/pieces/utils/piece.fixtures.d.ts +0 -19
- package/dist/src/pieces/utils/piece.fixtures.js +0 -39
- package/dist/src/pieces/utils/piece.fixtures.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.test.js","sourceRoot":"","sources":["../../../src/pieces/item.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"item.test.js","sourceRoot":"","sources":["../../../src/pieces/item.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test, vi, afterEach } from 'vitest';
|
|
2
2
|
import { mockKysely } from '../database/database.mock.js';
|
|
3
3
|
import * as manager from './manager.js';
|
|
4
|
-
import { makeSchema } from './
|
|
4
|
+
import { makeSchema } from './Piece.fixtures.js';
|
|
5
5
|
vi.mock('./items.js');
|
|
6
6
|
const mocks = {
|
|
7
7
|
empty: vi.fn(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../src/pieces/manager.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAgB,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../src/pieces/manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { JSONSchemaType } from "ajv";
|
|
2
|
-
type PieceFrontMatterValue = string | number | boolean |
|
|
2
|
+
export type PieceFrontMatterValue = string | number | boolean | PieceFrontMatterValue[] | {
|
|
3
|
+
[key: string]: PieceFrontMatterValue;
|
|
4
|
+
};
|
|
3
5
|
type PieceFrontmatter = {
|
|
4
6
|
[key: string]: PieceFrontMatterValue;
|
|
5
7
|
};
|
|
6
8
|
type PieceFrontmatterSchema<M extends PieceFrontmatter> = JSONSchemaType<M>;
|
|
7
|
-
type
|
|
8
|
-
name: string;
|
|
9
|
+
export type PieceFrontmatterPropertyScalar = {
|
|
9
10
|
type: 'string' | 'boolean' | 'integer';
|
|
10
11
|
format?: 'asset' | 'date' | 'comma-separated' | 'paragraph';
|
|
11
12
|
nullable?: boolean;
|
|
@@ -14,8 +15,7 @@ type PieceFrontmatterSchemaFieldScalar = {
|
|
|
14
15
|
examples?: Array<string | number | boolean>;
|
|
15
16
|
default?: string | number | boolean;
|
|
16
17
|
};
|
|
17
|
-
type
|
|
18
|
-
name: string;
|
|
18
|
+
export type PieceFrontmatterPropertyList = {
|
|
19
19
|
type: 'array';
|
|
20
20
|
format?: undefined;
|
|
21
21
|
pattern?: undefined;
|
|
@@ -23,11 +23,43 @@ type PieceFrontmatterSchemaFieldList = {
|
|
|
23
23
|
default?: undefined;
|
|
24
24
|
nullable?: boolean;
|
|
25
25
|
enum?: string[] | number[];
|
|
26
|
-
items:
|
|
26
|
+
items: PieceFrontmatterProperty;
|
|
27
|
+
};
|
|
28
|
+
export type PieceFrontmatterPropertyObject = {
|
|
29
|
+
type: 'object';
|
|
30
|
+
format?: undefined;
|
|
31
|
+
pattern?: undefined;
|
|
32
|
+
examples?: undefined;
|
|
33
|
+
default?: undefined;
|
|
34
|
+
nullable?: boolean;
|
|
35
|
+
properties: {
|
|
36
|
+
[key: string]: PieceFrontmatterProperty;
|
|
37
|
+
};
|
|
38
|
+
required?: string[];
|
|
39
|
+
};
|
|
40
|
+
type PieceFrontmatterProperty = PieceFrontmatterPropertyScalar | PieceFrontmatterPropertyList | PieceFrontmatterPropertyObject;
|
|
41
|
+
type PieceFrontmatterSchemaField = PieceFrontmatterProperty & {
|
|
42
|
+
name: string;
|
|
27
43
|
};
|
|
28
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Maps schema properties to a flat array of field definitions with names.
|
|
46
|
+
*/
|
|
29
47
|
declare function getPieceFrontmatterSchemaFields<M extends PieceFrontmatter>(schema: PieceFrontmatterSchema<M>): Array<PieceFrontmatterSchemaField>;
|
|
30
|
-
|
|
31
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Converts a frontmatter value to its database-compatible representation.
|
|
50
|
+
* Arrays and objects are kept as structured data for JSON serialization.
|
|
51
|
+
*/
|
|
52
|
+
declare function pieceFrontmatterValueToDatabaseValue(value: unknown, property: PieceFrontmatterProperty): unknown;
|
|
53
|
+
/**
|
|
54
|
+
* Converts a database value back to a frontmatter-compatible representation.
|
|
55
|
+
* Handles both new JSON structures and legacy CSV-separated strings for arrays.
|
|
56
|
+
*/
|
|
57
|
+
declare function databaseValueToPieceFrontmatterValue(value: unknown, property: PieceFrontmatterProperty): unknown;
|
|
58
|
+
/**
|
|
59
|
+
* Recursively initializes frontmatter based on schema properties.
|
|
60
|
+
*/
|
|
61
|
+
declare function initializePieceFrontMatterFromProperties(properties: {
|
|
62
|
+
[key: string]: PieceFrontmatterProperty;
|
|
63
|
+
}, requiredFields?: string[], minimal?: boolean): Record<string, unknown>;
|
|
32
64
|
declare function initializePieceFrontMatter<M extends PieceFrontmatter>(schema: PieceFrontmatterSchema<M>, minimal?: boolean): M;
|
|
33
|
-
export { type PieceFrontmatter, type PieceFrontmatterSchemaField, type PieceFrontmatterSchema, getPieceFrontmatterSchemaFields, pieceFrontmatterValueToDatabaseValue, databaseValueToPieceFrontmatterValue, initializePieceFrontMatter, };
|
|
65
|
+
export { type PieceFrontmatter, type PieceFrontmatterProperty, type PieceFrontmatterSchemaField, type PieceFrontmatterSchema, getPieceFrontmatterSchemaFields, pieceFrontmatterValueToDatabaseValue, databaseValueToPieceFrontmatterValue, initializePieceFrontMatter, initializePieceFrontMatterFromProperties, };
|
|
@@ -1,69 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps schema properties to a flat array of field definitions with names.
|
|
3
|
+
*/
|
|
1
4
|
function getPieceFrontmatterSchemaFields(schema) {
|
|
2
5
|
return Object.keys(schema.properties).map((key) => {
|
|
3
6
|
const required = Array.isArray(schema.required) ? schema.required : [];
|
|
4
|
-
const
|
|
5
|
-
|
|
7
|
+
const isRequired = required.includes(key);
|
|
8
|
+
const property = schema.properties[key];
|
|
9
|
+
const nullable = isRequired ? false : property.nullable ?? true;
|
|
10
|
+
return {
|
|
11
|
+
...property,
|
|
12
|
+
name: key,
|
|
13
|
+
nullable
|
|
14
|
+
};
|
|
6
15
|
});
|
|
7
16
|
}
|
|
8
|
-
|
|
9
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Converts a frontmatter value to its database-compatible representation.
|
|
19
|
+
* Arrays and objects are kept as structured data for JSON serialization.
|
|
20
|
+
*/
|
|
21
|
+
function pieceFrontmatterValueToDatabaseValue(value, property) {
|
|
22
|
+
if (value === undefined || value === null) {
|
|
10
23
|
return null;
|
|
11
24
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
switch (property.type) {
|
|
26
|
+
case 'boolean':
|
|
27
|
+
return value ? 1 : 0;
|
|
28
|
+
case 'integer':
|
|
29
|
+
return Number(value);
|
|
30
|
+
case 'array':
|
|
31
|
+
return value.map((v) => pieceFrontmatterValueToDatabaseValue(v, property.items));
|
|
32
|
+
case 'object': {
|
|
33
|
+
const obj = value;
|
|
34
|
+
const result = { ...obj }; // Allow additional properties
|
|
35
|
+
for (const key in property.properties) {
|
|
36
|
+
result[key] = pieceFrontmatterValueToDatabaseValue(obj[key], property.properties[key]);
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
case 'string':
|
|
41
|
+
if (property.format === 'date') {
|
|
42
|
+
return new Date(value).getTime();
|
|
43
|
+
}
|
|
44
|
+
if (property.format === 'comma-separated') {
|
|
45
|
+
return JSON.stringify(value.split(','));
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
default:
|
|
49
|
+
return value;
|
|
23
50
|
}
|
|
24
|
-
return value;
|
|
25
51
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
else if (field.type === 'boolean') {
|
|
34
|
-
return value ? true : false;
|
|
35
|
-
}
|
|
36
|
-
else if (field.type === 'array') {
|
|
37
|
-
const values = value.split(',');
|
|
38
|
-
return values.map((v) => databaseValueToPieceFrontmatterValue(v, field.items));
|
|
52
|
+
/**
|
|
53
|
+
* Converts a database value back to a frontmatter-compatible representation.
|
|
54
|
+
* Handles both new JSON structures and legacy CSV-separated strings for arrays.
|
|
55
|
+
*/
|
|
56
|
+
function databaseValueToPieceFrontmatterValue(value, property) {
|
|
57
|
+
if (value === undefined || value === null) {
|
|
58
|
+
return null;
|
|
39
59
|
}
|
|
40
|
-
|
|
41
|
-
|
|
60
|
+
switch (property.type) {
|
|
61
|
+
case 'boolean':
|
|
62
|
+
return value ? true : false;
|
|
63
|
+
case 'integer':
|
|
64
|
+
return Number(value);
|
|
65
|
+
case 'array': {
|
|
66
|
+
// Backwards compatibility: Handle legacy CSV strings stored in older caches
|
|
67
|
+
const values = Array.isArray(value) ? value : value.split(',');
|
|
68
|
+
return values.map((v) => databaseValueToPieceFrontmatterValue(v, property.items));
|
|
69
|
+
}
|
|
70
|
+
case 'object': {
|
|
71
|
+
const obj = value;
|
|
72
|
+
const result = { ...obj };
|
|
73
|
+
for (const key in property.properties) {
|
|
74
|
+
result[key] = databaseValueToPieceFrontmatterValue(obj[key], property.properties[key]);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
case 'string':
|
|
79
|
+
if (property.format === 'date') {
|
|
80
|
+
return new Date(value).toLocaleDateString();
|
|
81
|
+
}
|
|
82
|
+
if (property.format === 'comma-separated') {
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(value).join(',');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
default:
|
|
92
|
+
return value;
|
|
42
93
|
}
|
|
43
|
-
return value;
|
|
44
94
|
}
|
|
45
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Recursively initializes frontmatter based on schema properties.
|
|
97
|
+
*/
|
|
98
|
+
function initializePieceFrontMatterFromProperties(properties, requiredFields = [], minimal = false) {
|
|
46
99
|
const frontmatter = {};
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
100
|
+
for (const name in properties) {
|
|
101
|
+
const property = properties[name];
|
|
102
|
+
const isRequired = requiredFields.includes(name);
|
|
103
|
+
// Handle nested objects
|
|
104
|
+
if (property.type === 'object') {
|
|
105
|
+
const subValue = initializePieceFrontMatterFromProperties(property.properties, property.required || [], minimal);
|
|
106
|
+
if (Object.keys(subValue).length > 0) {
|
|
107
|
+
frontmatter[name] = subValue;
|
|
108
|
+
}
|
|
109
|
+
else if (isRequired) {
|
|
110
|
+
frontmatter[name] = {};
|
|
111
|
+
}
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
// Handle scalars and arrays
|
|
115
|
+
const isArray = property.type === 'array';
|
|
116
|
+
const examples = isArray ? property.items.examples : property.examples;
|
|
117
|
+
const def = isArray ? property.items.default : property.default;
|
|
54
118
|
const example = examples?.[0];
|
|
55
119
|
const hasInitialValue = def !== undefined || example !== undefined;
|
|
56
|
-
if (
|
|
120
|
+
if (isRequired || (!minimal && hasInitialValue)) {
|
|
57
121
|
const initialValue = def !== undefined ? def : example;
|
|
58
122
|
if (initialValue !== undefined) {
|
|
59
123
|
frontmatter[name] = isArray ? [initialValue] : initialValue;
|
|
60
124
|
}
|
|
61
|
-
else if (
|
|
62
|
-
throw new Error(`can not initialize
|
|
125
|
+
else if (isRequired) {
|
|
126
|
+
throw new Error(`can not initialize field "${name}" as it is required but there are no examples or a default value`);
|
|
63
127
|
}
|
|
64
128
|
}
|
|
65
129
|
}
|
|
66
130
|
return frontmatter;
|
|
67
131
|
}
|
|
68
|
-
|
|
132
|
+
function initializePieceFrontMatter(schema, minimal = false) {
|
|
133
|
+
const required = Array.isArray(schema.required) ? schema.required : [];
|
|
134
|
+
return initializePieceFrontMatterFromProperties(schema.properties, required, minimal);
|
|
135
|
+
}
|
|
136
|
+
export { getPieceFrontmatterSchemaFields, pieceFrontmatterValueToDatabaseValue, databaseValueToPieceFrontmatterValue, initializePieceFrontMatter, initializePieceFrontMatterFromProperties, };
|
|
69
137
|
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../../src/pieces/utils/frontmatter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../../src/pieces/utils/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PieceFrontmatter, PieceFrontMatterValue, PieceFrontmatterSchemaField } from './frontmatter.js';
|
|
2
|
+
export declare function getFrontmatterValue(obj: PieceFrontmatter, path: string): PieceFrontMatterValue | undefined;
|
|
3
|
+
export declare function setFrontmatterValue(obj: PieceFrontmatter, path: string, value: PieceFrontMatterValue): void;
|
|
4
|
+
export declare function unsetFrontmatterValue(obj: PieceFrontmatter, path: string): void;
|
|
5
|
+
export declare function findFrontmatterField(fields: PieceFrontmatterSchemaField[], path: string): PieceFrontmatterSchemaField | undefined;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export function getFrontmatterValue(obj, path) {
|
|
2
|
+
const parts = path.split('.');
|
|
3
|
+
let current = obj;
|
|
4
|
+
for (const part of parts) {
|
|
5
|
+
if (current === null || typeof current !== 'object') {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
current = current[part];
|
|
9
|
+
}
|
|
10
|
+
return current;
|
|
11
|
+
}
|
|
12
|
+
export function setFrontmatterValue(obj, path, value) {
|
|
13
|
+
const parts = path.split('.');
|
|
14
|
+
const lastPart = parts.pop();
|
|
15
|
+
let current = obj;
|
|
16
|
+
for (const part of parts) {
|
|
17
|
+
if (!(part in current) || current[part] === null || typeof current[part] !== 'object') {
|
|
18
|
+
current[part] = {};
|
|
19
|
+
}
|
|
20
|
+
current = current[part];
|
|
21
|
+
}
|
|
22
|
+
const existing = current[lastPart];
|
|
23
|
+
if (Array.isArray(existing)) {
|
|
24
|
+
existing.push(value);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
current[lastPart] = value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function unsetFrontmatterValue(obj, path) {
|
|
31
|
+
const parts = path.split('.');
|
|
32
|
+
const lastPart = parts.pop();
|
|
33
|
+
let current = obj;
|
|
34
|
+
for (const part of parts) {
|
|
35
|
+
if (current === null ||
|
|
36
|
+
typeof current !== 'object' ||
|
|
37
|
+
!(part in current)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
current = current[part];
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(current)) {
|
|
43
|
+
const index = parseInt(lastPart, 10);
|
|
44
|
+
if (!isNaN(index)) {
|
|
45
|
+
current.splice(index, 1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (current !== null && typeof current === 'object') {
|
|
49
|
+
delete current[lastPart];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function findFrontmatterField(fields, path) {
|
|
53
|
+
const parts = path.split('.');
|
|
54
|
+
let currentFields = fields;
|
|
55
|
+
let result;
|
|
56
|
+
for (let i = 0; i < parts.length; i++) {
|
|
57
|
+
const part = parts[i];
|
|
58
|
+
if (result?.type === 'array') {
|
|
59
|
+
const index = parseInt(part, 10);
|
|
60
|
+
if (isNaN(index)) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
result = { ...result.items, name: part };
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
result = currentFields.find((f) => f.name === part);
|
|
67
|
+
}
|
|
68
|
+
if (!result) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
if (i === parts.length - 1) {
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
if (result.type === 'object') {
|
|
75
|
+
const props = result.properties;
|
|
76
|
+
currentFields = Object.keys(props).map((name) => ({ ...props[name], name }));
|
|
77
|
+
}
|
|
78
|
+
else if (result.type === 'array') {
|
|
79
|
+
const nextPart = parts[i + 1];
|
|
80
|
+
const nextIsIndex = nextPart !== undefined && !isNaN(parseInt(nextPart, 10));
|
|
81
|
+
if (!nextIsIndex && result.items.type === 'object') {
|
|
82
|
+
const props = result.items.properties;
|
|
83
|
+
currentFields = Object.keys(props).map((name) => ({ ...props[name], name }));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
currentFields = [];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=frontmatter.path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.path.js","sourceRoot":"","sources":["../../../../src/pieces/utils/frontmatter.path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import * as paths from './frontmatter.path.js';
|
|
3
|
+
describe('pieces/utils/frontmatter.path.ts', () => {
|
|
4
|
+
describe('getFrontmatterValue', () => {
|
|
5
|
+
test('gets top level value', () => {
|
|
6
|
+
const obj = { title: 'hello' };
|
|
7
|
+
expect(paths.getFrontmatterValue(obj, 'title')).toBe('hello');
|
|
8
|
+
});
|
|
9
|
+
test('gets nested value', () => {
|
|
10
|
+
const obj = { meta: { author: 'Bob' } };
|
|
11
|
+
expect(paths.getFrontmatterValue(obj, 'meta.author')).toBe('Bob');
|
|
12
|
+
});
|
|
13
|
+
test('gets array value', () => {
|
|
14
|
+
const obj = { tags: ['a', 'b'] };
|
|
15
|
+
expect(paths.getFrontmatterValue(obj, 'tags.1')).toBe('b');
|
|
16
|
+
});
|
|
17
|
+
test('returns undefined for missing path', () => {
|
|
18
|
+
const obj = { title: 'hello' };
|
|
19
|
+
expect(paths.getFrontmatterValue(obj, 'missing')).toBeUndefined();
|
|
20
|
+
expect(paths.getFrontmatterValue(obj, 'title.sub')).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('setFrontmatterValue', () => {
|
|
24
|
+
test('sets top level value', () => {
|
|
25
|
+
const obj = { title: 'old' };
|
|
26
|
+
paths.setFrontmatterValue(obj, 'title', 'new');
|
|
27
|
+
expect(obj.title).toBe('new');
|
|
28
|
+
});
|
|
29
|
+
test('sets nested value (creates objects)', () => {
|
|
30
|
+
const obj = { title: 't' };
|
|
31
|
+
paths.setFrontmatterValue(obj, 'meta.author', 'Bob');
|
|
32
|
+
expect(obj.meta.author).toBe('Bob');
|
|
33
|
+
});
|
|
34
|
+
test('appends to existing array', () => {
|
|
35
|
+
const obj = { tags: ['a'] };
|
|
36
|
+
paths.setFrontmatterValue(obj, 'tags', 'b');
|
|
37
|
+
expect(obj.tags).toEqual(['a', 'b']);
|
|
38
|
+
});
|
|
39
|
+
test('overwrites non-object intermediate paths', () => {
|
|
40
|
+
const obj = { meta: 'not-an-object' };
|
|
41
|
+
paths.setFrontmatterValue(obj, 'meta.author', 'Bob');
|
|
42
|
+
expect(obj.meta.author).toBe('Bob');
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('unsetFrontmatterValue', () => {
|
|
46
|
+
test('unsets top level value', () => {
|
|
47
|
+
const obj = { title: 'hello', other: 'v' };
|
|
48
|
+
paths.unsetFrontmatterValue(obj, 'title');
|
|
49
|
+
expect(obj.title).toBeUndefined();
|
|
50
|
+
expect(obj.other).toBe('v');
|
|
51
|
+
});
|
|
52
|
+
test('unsets nested value', () => {
|
|
53
|
+
const obj = { meta: { author: 'Bob', date: '2023' } };
|
|
54
|
+
paths.unsetFrontmatterValue(obj, 'meta.author');
|
|
55
|
+
expect(obj.meta.author).toBeUndefined();
|
|
56
|
+
expect(obj.meta.date).toBe('2023');
|
|
57
|
+
});
|
|
58
|
+
test('removes from array by index', () => {
|
|
59
|
+
const obj = { tags: ['a', 'b', 'c'] };
|
|
60
|
+
paths.unsetFrontmatterValue(obj, 'tags.1');
|
|
61
|
+
expect(obj.tags).toEqual(['a', 'c']);
|
|
62
|
+
});
|
|
63
|
+
test('handles missing paths gracefully', () => {
|
|
64
|
+
const obj = { title: 't' };
|
|
65
|
+
expect(() => paths.unsetFrontmatterValue(obj, 'missing.path')).not.toThrow();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('findFrontmatterField', () => {
|
|
69
|
+
const fields = [
|
|
70
|
+
{ name: 'title', type: 'string' },
|
|
71
|
+
{
|
|
72
|
+
name: 'meta',
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
author: { type: 'string' },
|
|
76
|
+
tags: { type: 'array', items: { type: 'string' } }
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'gallery',
|
|
81
|
+
type: 'array',
|
|
82
|
+
items: {
|
|
83
|
+
type: 'object',
|
|
84
|
+
properties: {
|
|
85
|
+
url: { type: 'string' }
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
test('finds top level field', () => {
|
|
91
|
+
const field = paths.findFrontmatterField(fields, 'title');
|
|
92
|
+
expect(field?.name).toBe('title');
|
|
93
|
+
expect(field?.type).toBe('string');
|
|
94
|
+
});
|
|
95
|
+
test('finds nested field', () => {
|
|
96
|
+
const field = paths.findFrontmatterField(fields, 'meta.author');
|
|
97
|
+
expect(field?.name).toBe('author');
|
|
98
|
+
expect(field?.type).toBe('string');
|
|
99
|
+
});
|
|
100
|
+
test('finds array item field via index', () => {
|
|
101
|
+
const field = paths.findFrontmatterField(fields, 'meta.tags.0');
|
|
102
|
+
expect(field?.type).toBe('string');
|
|
103
|
+
});
|
|
104
|
+
test('finds nested field inside array of objects', () => {
|
|
105
|
+
const field = paths.findFrontmatterField(fields, 'gallery.0.url');
|
|
106
|
+
expect(field?.name).toBe('url');
|
|
107
|
+
expect(field?.type).toBe('string');
|
|
108
|
+
});
|
|
109
|
+
test('finds nested field inside array of objects', () => {
|
|
110
|
+
const field = paths.findFrontmatterField(fields, 'gallery.oops.url');
|
|
111
|
+
expect(field).toBeUndefined();
|
|
112
|
+
});
|
|
113
|
+
test('returns undefined for invalid paths', () => {
|
|
114
|
+
expect(paths.findFrontmatterField(fields, 'missing')).toBeUndefined();
|
|
115
|
+
expect(paths.findFrontmatterField(fields, 'title.nested')).toBeUndefined();
|
|
116
|
+
expect(paths.findFrontmatterField(fields, 'meta.missing')).toBeUndefined();
|
|
117
|
+
});
|
|
118
|
+
test('returns undefined for index on non-array', () => {
|
|
119
|
+
expect(paths.findFrontmatterField(fields, 'title.0')).toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
test('returns undefined for scalar subpath', () => {
|
|
122
|
+
expect(paths.findFrontmatterField(fields, 'meta.author.deep')).toBeUndefined();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=frontmatter.path.test.js.map
|