New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@stackbit/utils

Package Overview
Dependencies
Maintainers
11
Versions
331
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stackbit/utils - npm Package Compare versions

Comparing version
0.8.1-staging.1
to
0.8.1
+382
__tests__/field-path-utils.ts
import { describe, test, expect } from '@jest/globals';
import { DocumentWithSource } from '@stackbit/types';
import { fieldPathToString, getDocumentFieldValueAtFieldPath, stringToFieldPath } from '../src';
describe('test fieldPathToString', () => {
test('should convert single item fieldPath', () => {
const result = fieldPathToString(['title']);
expect(result).toEqual('title');
});
test('should separate multi item fieldPath with dot', () => {
const result = fieldPathToString(['section', 'title']);
expect(result).toEqual('section.title');
});
test('should wrap first non-alphanumeric field path item with square brackets and single quotes', () => {
const result = fieldPathToString(['hero-section', 'title']);
expect(result).toEqual("['hero-section'].title");
});
test('should wrap middle non-alphanumeric field path item with square brackets', () => {
const result = fieldPathToString(['sections', 'hero-section', 'title']);
expect(result).toEqual("sections['hero-section'].title");
});
test('should wrap successive non-alphanumeric field names with square brackets', () => {
const result = fieldPathToString(['banner', 'sub-component-1', 'sub.component.2']);
expect(result).toEqual("banner['sub-component-1']['sub.component.2']");
});
test('should wrap list indexes with square brackets', () => {
const result = fieldPathToString(['sections', 2, 'title']);
expect(result).toEqual('sections[2].title');
});
test('should not wrap string-numbers with square brackets', () => {
const result = fieldPathToString(['sections', '2', 'title']);
expect(result).toEqual('sections.2.title');
});
});
describe('test stringToFieldPath', () => {
test('should convert single item fieldPath', () => {
const result = stringToFieldPath('title');
expect(result).toEqual(['title']);
});
test('should separate multi item fieldPath with dot', () => {
const result = stringToFieldPath('section.title');
expect(result).toEqual(['section', 'title']);
});
test('should unwrap first non-alphanumeric field path item from square brackets', () => {
const result = stringToFieldPath("['hero-section'].title");
expect(result).toEqual(['hero-section', 'title']);
});
test('should unwrap middle non-alphanumeric field path item from square brackets', () => {
const result = stringToFieldPath("sections['hero-section'].title");
expect(result).toEqual(['sections', 'hero-section', 'title']);
});
test('should wrap successive non-alphanumeric field names with square brackets', () => {
const result = stringToFieldPath("banner['sub-component-1']['sub.component.2']");
expect(result).toEqual(['banner', 'sub-component-1', 'sub.component.2']);
});
test('should wrap list indexes with square brackets', () => {
const result = stringToFieldPath('sections[2].title');
expect(result).toEqual(['sections', 2, 'title']);
});
test('should not wrap string-numbers with square brackets', () => {
const result = stringToFieldPath('sections.2.title');
expect(result).toEqual(['sections', '2', 'title']);
});
});
describe('test getDocumentFieldValueAtFieldPath', () => {
const documents: DocumentWithSource[] = [
{
type: 'document',
id: 'doc-1',
srcType: 'src-1',
srcProjectId: 'src-project-1',
manageUrl: 'https://www.example.com',
modelName: 'page',
status: 'published',
createdAt: '2025-01-01T10:00:00.000Z',
updatedAt: '2025-01-01T10:00:00.000Z',
context: null,
fields: {
title: { type: 'string', value: 'Title Value' },
localizedString: {
type: 'string',
localized: true,
locales: {
en: {
locale: 'en',
value: 'Hello'
},
es: {
locale: 'es',
value: 'Hola'
}
}
},
modelField: {
type: 'model',
modelName: 'heroSection',
fields: {
label: { type: 'string', value: 'Label Value' }
}
},
localizedModelField: {
type: 'model',
localized: true,
locales: {
en: {
locale: 'en',
modelName: 'heroSection',
fields: {
label: { type: 'string', value: 'Localized Label Value' },
localizedString: {
type: 'string',
localized: true,
locales: {
es: {
locale: 'es',
value: 'Spanish value'
}
}
}
}
}
}
},
listField: {
type: 'list',
items: [
{
type: 'string',
value: 'one'
},
{
type: 'string',
value: 'two'
}
]
},
referenceField: {
type: 'reference',
refType: 'document',
refId: 'doc-2'
}
}
},
{
type: 'document',
id: 'doc-2',
srcType: 'src-1',
srcProjectId: 'src-project-1',
manageUrl: 'https://www.example.com',
modelName: 'page',
status: 'published',
createdAt: '2025-01-01T10:00:00.000Z',
updatedAt: '2025-01-01T10:00:00.000Z',
context: null,
fields: {
title: { type: 'string', value: 'Doc 2 Title Value' }
}
}
];
const document = documents[0]!;
function getDocumentById(options: { id: string; srcType?: string; srcProjectId?: string }) {
return documents.find((doc) => doc.id === options.id);
}
test('should throw an error if fieldPath is empty', () => {
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: '',
getDocumentById
});
}).toThrow("Illegal fieldPath ''. The fieldPath cannot be empty");
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: [],
getDocumentById
});
}).toThrow("Illegal fieldPath ''. The fieldPath cannot be empty");
});
test('should return value of a string field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'title',
getDocumentById
});
expect(result).toEqual('Title Value');
});
test('should throw an error if a primitive field is followed by another field path', () => {
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'title.noField',
getDocumentById
});
}).toThrow(
"Illegal fieldPath 'title.noField'. The field at path 'title' is a primitive field of type 'string' and cannot be followed by another field path."
);
});
test('should return undefined for non existing field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'no_such_field',
getDocumentById
});
expect(result).toBeUndefined();
});
test('should return value of a localized string field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedString.es',
getDocumentById
});
expect(result).toEqual('Hola');
});
test('should return undefined for a non existing locale value of a localized field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedString.fr',
getDocumentById
});
expect(result).toBeUndefined();
});
test('should throw if locale for a localized field was not specified', () => {
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedString',
getDocumentById
});
}).toThrow("Illegal fieldPath 'localizedString'. The field at path 'localizedString' is a localized field and must be followed by a locale specifier.");
});
test('should return a flattened object of a model field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'modelField',
getDocumentById
});
expect(result).toEqual({
__metadata: { modelName: 'heroSection' },
label: 'Label Value'
});
});
test('should return a value of a field in a nested object', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'modelField.label',
getDocumentById
});
expect(result).toEqual('Label Value');
});
test('should return undefined for a non-existing field in a nested object', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'modelField.noField',
getDocumentById
});
expect(result).toBeUndefined();
});
test('should return undefined for a non-existing nested fields', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'noField1.noField2.noField3',
getDocumentById
});
expect(result).toBeUndefined();
});
test('should return a flattened object of a localized model field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedModelField.en',
getDocumentById
});
expect(result).toEqual({
__metadata: { modelName: 'heroSection' },
label: 'Localized Label Value'
});
});
test('should return a value of a field in a localized model field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedModelField.en.label',
getDocumentById
});
expect(result).toEqual('Localized Label Value');
});
test('should return undefined for a non existing locale of a localized model field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedModelField.es',
getDocumentById
});
expect(result).toBeUndefined();
});
test('should return a value for a localized string within a localized model field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedModelField.en.localizedString.es',
getDocumentById
});
expect(result).toEqual('Spanish value');
});
test('should throw if locale for a localized model field was not specified', () => {
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'localizedModelField',
getDocumentById
});
}).toThrow(
"Illegal fieldPath 'localizedModelField'. The field at path 'localizedModelField' is a localized field and must be followed by a locale specifier."
);
});
test('should return an item list value in a list at specified index', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'listField[1]',
getDocumentById
});
expect(result).toEqual('two');
});
test('should throw an error if list field is not followed by index', () => {
expect(() => {
getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'listField.fieldName',
getDocumentById
});
}).toThrow("Illegal fieldPath 'listField.fieldName'. The field at path 'listField' is a list field and must be followed by a list item index.");
});
test('should return a document id of a reference field', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'referenceField',
getDocumentById
});
expect(result).toEqual('doc-2');
});
test('should return a value of a field in a referenced document', () => {
const result = getDocumentFieldValueAtFieldPath({
document,
fieldPath: 'referenceField.title',
getDocumentById
});
expect(result).toEqual('Doc 2 Title Value');
});
});
+8
-0

@@ -6,2 +6,10 @@ # Change Log

## [0.8.1](https://github.com/stackbithq/utils/compare/@stackbit/utils@0.8.0...@stackbit/utils@0.8.1) (2025-03-12)
**Note:** Version bump only for package @stackbit/utils
# [0.8.0](https://github.com/stackbithq/utils/compare/@stackbit/utils@0.7.16-staging.1...@stackbit/utils@0.8.0) (2025-02-10)

@@ -8,0 +16,0 @@

@@ -73,2 +73,22 @@ import type * as StackbitTypes from '@stackbit/types';

}): FlatDocument;
/**
* Returns the value of a document field.
*
* If the document field is a primitive (string, url, slug, text, markdown, enum, date, number, boolean, etc.)
* then the value of the `value` property is returned.
*
* If the document is a field of type "object", "model" or "list", the value of the
* nested object is simplified and returned.
*
* If the document is a field of type "reference", the ID of the referenced
* document is returned.
*
* If the document field is localized, then the value for the provided "locale"
* is returned. If "locale" was not provided, or the document field does not
* have any values for the provided "locale", undefined is returned.
*/
export declare function getDocumentFieldValue({ documentField, locale }: {
documentField: StackbitTypes.DocumentField;
locale?: string;
}): any;
//# sourceMappingURL=document-utils.d.ts.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"document-utils.d.ts","sourceRoot":"","sources":["../src/document-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,aAAa,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC;IAC5H,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;CACvC,CAAC,CAAC;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,YAAY,EAAE,CAAC;CAC7B,CAAC,CAAC;AAyEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAOzH"}
{"version":3,"file":"document-utils.d.ts","sourceRoot":"","sources":["../src/document-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IACvB,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,aAAa,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC;IAC5H,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC;CACvC,CAAC,CAAC;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAC/H,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,YAAY,EAAE,CAAC;CAC7B,CAAC,CAAC;AAyEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAOzH;AAqBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;IAAE,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CAoErI"}

@@ -6,3 +6,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.flattenDocument = exports.getCSIDocuments = void 0;
exports.getDocumentFieldValue = exports.flattenDocument = exports.getCSIDocuments = void 0;
const http_1 = __importDefault(require("http"));

@@ -115,2 +115,18 @@ async function getCSIDocuments({ stackbitApiKey, srcDocumentIds, srcType, srcProjectId, documentSpecs, limit, offset, flatDocuments, flatLocale }) {

}
/**
* Returns the value of a document field.
*
* If the document field is a primitive (string, url, slug, text, markdown, enum, date, number, boolean, etc.)
* then the value of the `value` property is returned.
*
* If the document is a field of type "object", "model" or "list", the value of the
* nested object is simplified and returned.
*
* If the document is a field of type "reference", the ID of the referenced
* document is returned.
*
* If the document field is localized, then the value for the provided "locale"
* is returned. If "locale" was not provided, or the document field does not
* have any values for the provided "locale", undefined is returned.
*/
function getDocumentFieldValue({ documentField, locale }) {

@@ -185,5 +201,6 @@ const nonLocalizedDocField = getLocalizedFieldForLocale(documentField, locale);

}
// This method was copied from @stackbit/utils => getLocalizedFieldForLocale
exports.getDocumentFieldValue = getDocumentFieldValue;
// This method was copied from @stackbit/types => getLocalizedFieldForLocale
// instead of importing it directly, to allow bundling this file (document-utils.ts)
// by Webpack without bundling the whole @stackbit/utils when it is imported
// by Webpack without bundling the whole @stackbit/types when it is imported
// inside frameworks like Next.js.

@@ -190,0 +207,0 @@ function getLocalizedFieldForLocale(field, locale) {

@@ -1,1 +0,1 @@

{"version":3,"file":"document-utils.js","sourceRoot":"","sources":["../src/document-utils.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"document-utils.js","sourceRoot":"","sources":["../src/document-utils.ts"],"names":[],"mappings":"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"}

@@ -1,2 +0,18 @@

import type { Model, Field, FieldListItems, Document, DocumentField, DocumentFieldNonLocalized, DocumentListFieldItems } from '@stackbit/types';
import type { Model, Field, FieldListItems, FieldPath, Document, DocumentWithSource, DocumentField, DocumentFieldNonLocalized, DocumentListFieldItems } from '@stackbit/types';
/**
* Converts a FieldPath into a string.
* Puts complex strings inside single quotes '',
* and uses square brackets [] for number keys.
*/
export declare function fieldPathToString(fieldPath: FieldPath): string;
/**
* Converts string into FieldPath
*
* ```js
* stringToFieldPath("sections[0].button['button-label']")
* =>
* ["sections", 0, "button", "button-label"]
* ```
*/
export declare function stringToFieldPath(fieldPath: string): FieldPath;
export declare function getModelFieldAtFieldPath({ document, fieldPath, modelMap, locale }: {

@@ -8,2 +24,15 @@ document: Document;

}): Field | FieldListItems;
export type GetDocumentFieldAtFieldPathOptions = {
document: Document;
fieldPath: FieldPath;
locale?: string;
isFullFieldPath?: boolean;
returnUndefined?: boolean;
};
export type GetDocumentFieldAtFieldPathOptionsThrow = GetDocumentFieldAtFieldPathOptions & {
returnUndefined?: false;
};
export type GetDocumentFieldAtFieldPathOptionsUndefined = GetDocumentFieldAtFieldPathOptions & {
returnUndefined: true;
};
/**

@@ -14,3 +43,3 @@ * This function receives a `document` and returns DocumentFieldNonLocalized at

*
* @example
* ```ts
* getDocumentFieldAtFieldPath({

@@ -21,2 +50,3 @@ * document,

* })
* ```
*

@@ -27,14 +57,23 @@ * For improved localization support, use the getModelAndDocumentFieldForLocalizedFieldPath

* The `isFullFieldPath` flag specifies if the `fieldPath` includes container
* specifiers such as "fields" and "items".
* specifiers such as "fields" and "items":
*
* @example
* isFullFieldPath: false => fieldPath: ['sections', 1, 'title']
* isFullFieldPath: true => fieldPath: ['fields', 'sections', 'items', 1, 'fields', 'title']
* ```ts
* getDocumentFieldAtFieldPath({
* document,
* isFullFieldPath: false,
* fieldPath: ['sections', 1, 'title']
* })
* getDocumentFieldAtFieldPath({
* document,
* isFullFieldPath: true,
* fieldPath: ['fields', 'sections', 'items', 1, 'fields', 'title']
* })
* ```
*
* By default, if the document field at the specified `fieldPath` not found, this
* function will throw exception. Setting `returnUndefined` to true will allow
* the function to return `undefined` if the document field is not found.
*/
export declare function getDocumentFieldAtFieldPath({ document, fieldPath, locale, isFullFieldPath }: {
document: Document;
fieldPath: (string | number)[];
locale?: string;
isFullFieldPath?: boolean;
}): DocumentFieldNonLocalized;
export declare function getDocumentFieldAtFieldPath(options: GetDocumentFieldAtFieldPathOptionsThrow): DocumentFieldNonLocalized;
export declare function getDocumentFieldAtFieldPath(options: GetDocumentFieldAtFieldPathOptionsUndefined): DocumentFieldNonLocalized | undefined;
/**

@@ -108,2 +147,45 @@ * This function receives a `document` and a `modelMap` and returns an object

};
/**
* This function returns the value of a field in the specified `document` at the
* specified `fieldPath`.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title'
* })
* ```
*
* The `fieldPath` can also contain locale specifiers for localized fields.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title.es'
* })
* ```
*
* Note: getting a value of a localized field without using a locale specifier
* will throw an exception.
*
* The `fieldPath` can be a string following the standard JavaScript notation
* for getting nested properties and array values, or a {@link FieldPath}.
*
* If the document field at the specified `fieldPath` not found, undefined is returned.
*
* @param document The parent document
* @param fieldPath The field path to the target field
* @param getDocumentById A function
* @param isFullFieldPath
*/
export declare function getDocumentFieldValueAtFieldPath({ document, fieldPath, getDocumentById, isFullFieldPath }: {
document: DocumentWithSource;
fieldPath: FieldPath | string;
getDocumentById?: (options: {
id: string;
srcType?: string;
srcProjectId?: string;
}) => DocumentWithSource | undefined;
isFullFieldPath?: boolean;
}): unknown;
//# sourceMappingURL=field-path-utils.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"field-path-utils.d.ts","sourceRoot":"","sources":["../src/field-path-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,KAAK,EACL,KAAK,EACL,cAAc,EAGd,QAAQ,EACR,aAAa,EACb,yBAAyB,EACzB,sBAAsB,EACzB,MAAM,iBAAiB,CAAC;AAGzB,wBAAgB,wBAAwB,CAAC,EACrC,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACT,EAAE;IACC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,KAAK,GAAG,cAAc,CAwGzB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,2BAA2B,CAAC,EACxC,QAAQ,EACR,SAAS,EACT,MAAM,EACN,eAAe,EAClB,EAAE;IACC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,yBAAyB,CAiG5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mCAAmC,CAAC,EAChD,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,MAAM,EACN,eAAe,EAClB,EAAE;IACC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG;IAAE,UAAU,EAAE,KAAK,GAAG,cAAc,CAAC;IAAC,aAAa,EAAE,yBAAyB,CAAA;CAAE,CA6LnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,6CAA6C,CAAC,EAC1D,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,eAAe,EAClB,EAAE;IACC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG;IAAE,UAAU,EAAE,KAAK,GAAG,cAAc,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,GAAG,sBAAsB,CAAA;CAAE,CAsMjG"}
{"version":3,"file":"field-path-utils.d.ts","sourceRoot":"","sources":["../src/field-path-utils.ts"],"names":[],"mappings":"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"}

@@ -6,5 +6,67 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.getModelAndDocumentFieldForLocalizedFieldPath = exports.getDocumentAndModelFieldAtFieldPath = exports.getDocumentFieldAtFieldPath = exports.getModelFieldAtFieldPath = void 0;
exports.getDocumentFieldValueAtFieldPath = exports.getModelAndDocumentFieldForLocalizedFieldPath = exports.getDocumentAndModelFieldAtFieldPath = exports.getDocumentFieldAtFieldPath = exports.getModelFieldAtFieldPath = exports.stringToFieldPath = exports.fieldPathToString = void 0;
const lodash_1 = __importDefault(require("lodash"));
const types_1 = require("@stackbit/types");
const document_utils_1 = require("./document-utils");
/**
* Converts a FieldPath into a string.
* Puts complex strings inside single quotes '',
* and uses square brackets [] for number keys.
*/
function fieldPathToString(fieldPath) {
return lodash_1.default.reduce(fieldPath, (accumulator, fieldName, index) => {
if (lodash_1.default.isString(fieldName) && /\W/.test(fieldName)) {
// field name is a string with non-alphanumeric character
accumulator += `['${fieldName}']`;
}
else if (lodash_1.default.isNumber(fieldName)) {
accumulator += `[${fieldName}]`;
}
else {
if (index > 0) {
accumulator += '.';
}
accumulator += fieldName;
}
return accumulator;
}, '');
}
exports.fieldPathToString = fieldPathToString;
/**
* Converts string into FieldPath
*
* ```js
* stringToFieldPath("sections[0].button['button-label']")
* =>
* ["sections", 0, "button", "button-label"]
* ```
*/
function stringToFieldPath(fieldPath) {
const re = /\.|\[([^\]]+)\]\.?/g;
const result = [];
let match = null;
let prevLastIndex = 0;
while ((match = re.exec(fieldPath)) !== null) {
if (prevLastIndex < match.index) {
result.push(fieldPath.substring(prevLastIndex, match.index));
}
if (match[1]) {
// matched [...]
if (/^\d+$/.test(match[1])) {
result.push(parseInt(match[1]));
}
else {
// remove quotes inside brackets
// "hero['field-name'][2]" => ["hero", "field-name", 2]
result.push(match[1].replace(/^'(.*)'$/, '$1').replace(/^"(.*)"$/, '$1'));
}
}
prevLastIndex = re.lastIndex;
}
if (prevLastIndex < fieldPath.length) {
result.push(fieldPath.substring(prevLastIndex));
}
return result;
}
exports.stringToFieldPath = stringToFieldPath;
function getModelFieldAtFieldPath({ document, fieldPath, modelMap, locale }) {

@@ -109,28 +171,16 @@ if (lodash_1.default.isEmpty(fieldPath)) {

exports.getModelFieldAtFieldPath = getModelFieldAtFieldPath;
/**
* This function receives a `document` and returns DocumentFieldNonLocalized at
* the specified `fieldPath` while resolving any localized fields with the
* specified `locale`.
*
* @example
* getDocumentFieldAtFieldPath({
* document,
* locale,
* fieldPath: ['sections', 1, 'title']
* })
*
* For improved localization support, use the getModelAndDocumentFieldForLocalizedFieldPath
* method instead.
*
* The `isFullFieldPath` flag specifies if the `fieldPath` includes container
* specifiers such as "fields" and "items".
*
* @example
* isFullFieldPath: false => fieldPath: ['sections', 1, 'title']
* isFullFieldPath: true => fieldPath: ['fields', 'sections', 'items', 1, 'fields', 'title']
*/
function getDocumentFieldAtFieldPath({ document, fieldPath, locale, isFullFieldPath }) {
function getDocumentFieldAtFieldPath({ document, fieldPath, locale, isFullFieldPath, returnUndefined }) {
function throwOrReturnUndefined(errorMessage) {
if (returnUndefined) {
return undefined;
}
else {
throw new Error(errorMessage);
}
}
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'fields') {
throw new Error('fieldPath must start with "fields" specifier');
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath must start with "fields" specifier when 'isFullFieldPath' is set.`);
}

@@ -140,8 +190,6 @@ fieldPath = lodash_1.default.tail(fieldPath);

if (lodash_1.default.isEmpty(fieldPath)) {
throw new Error('the fieldPath cannot be empty');
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath cannot be empty`);
}
const docId = document.id;
const modelName = document.modelName;
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
function getPrefixOf(fieldPath, include = 0) {

@@ -153,4 +201,4 @@ return origFieldPath.slice(0, origFieldPath.length - fieldPath.length + include).join('.');

if (!localizedField) {
throw new Error(`the value of a field at fieldPath '${getPrefixOf(fieldPath)}' is undefined ` +
`for the document '${docId}' of type '${modelName}' for the '${locale}' locale.`);
return throwOrReturnUndefined(`Illegal fieldPath '${origFieldPathStr}'. The value of a field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') for the '${locale}' locale is undefined.`);
}

@@ -166,3 +214,4 @@ // if no more items in fieldPath return the found document and model fields

if (lodash_1.default.head(fieldPath) !== 'fields') {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath, 1)}' must contain "fields" specifier before a field's name`);
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is an object field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`);
}

@@ -173,3 +222,4 @@ fieldPath = lodash_1.default.tail(fieldPath);

if (typeof fieldName === 'undefined') {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath, 1)}' of a document '${docId}' of type '${modelName}' must point to a field name`);
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') is an object field and must be followed by a field name.`);
}

@@ -179,3 +229,4 @@ fieldPath = lodash_1.default.tail(fieldPath);

if (!childDocField) {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath)}' points to a non existing field in a document '${docId}' of type '${modelName}'`);
return throwOrReturnUndefined(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') points to a non existing field.`);
}

@@ -187,3 +238,4 @@ return getField(childDocField, fieldPath);

if (lodash_1.default.head(fieldPath) !== 'items') {
throw new Error(`fieldPath '${getPrefixOf(fieldPath, 1)}' must contain "items" specifier after a "list" field`);
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by the "items" specifier when 'isFullFieldPath' is set.`);
}

@@ -194,3 +246,4 @@ fieldPath = lodash_1.default.tail(fieldPath);

if (typeof itemIndex === 'undefined') {
throw new Error(`fieldPath '${getPrefixOf(fieldPath, 1)}' of a document '${docId}' of type '${modelName}' must point to a list item index`);
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') is a list field and must be followed by a list item index.`);
}

@@ -200,3 +253,4 @@ fieldPath = lodash_1.default.tail(fieldPath);

if (!listItem) {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath)}' points to a non existing list item in a document '${docId}' of type '${modelName}'`);
return throwOrReturnUndefined(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') points to a non existing list item.`);
}

@@ -206,4 +260,4 @@ return getField(listItem, fieldPath);

default: {
const primitiveFieldName = origFieldPath[origFieldPath.length - fieldPath.length - 1];
throw new Error(`the fieldPath '${origFieldPathStr}' is illegal, a primitive field '${primitiveFieldName}' of type '${localizedField.type}' cannot be followed by additional field paths`);
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a primitive field of type '${docField.type}' and cannot be followed by another field path.`);
}

@@ -215,7 +269,7 @@ }

if (typeof fieldName !== 'string') {
throw new Error('the first fieldPath item must be string');
return throwOrReturnUndefined('the first fieldPath item must be string');
}
const childDocField = document.fields[fieldName];
if (!childDocField) {
throw new Error(`document '${docId}' of type '${modelName}' doesn't have a field named '${fieldName}'`);
return throwOrReturnUndefined(`document '${docId}' of type '${modelName}' doesn't have a field named '${fieldName}'`);
}

@@ -596,2 +650,174 @@ return getField(childDocField, restFieldPath);

exports.getModelAndDocumentFieldForLocalizedFieldPath = getModelAndDocumentFieldForLocalizedFieldPath;
/**
* This function returns the value of a field in the specified `document` at the
* specified `fieldPath`.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title'
* })
* ```
*
* The `fieldPath` can also contain locale specifiers for localized fields.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title.es'
* })
* ```
*
* Note: getting a value of a localized field without using a locale specifier
* will throw an exception.
*
* The `fieldPath` can be a string following the standard JavaScript notation
* for getting nested properties and array values, or a {@link FieldPath}.
*
* If the document field at the specified `fieldPath` not found, undefined is returned.
*
* @param document The parent document
* @param fieldPath The field path to the target field
* @param getDocumentById A function
* @param isFullFieldPath
*/
function getDocumentFieldValueAtFieldPath({ document, fieldPath, getDocumentById, isFullFieldPath }) {
if (typeof fieldPath === 'string') {
fieldPath = stringToFieldPath(fieldPath);
}
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'fields') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath must start with "fields" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
}
if (lodash_1.default.isEmpty(fieldPath)) {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath cannot be empty`);
}
function getPrefixOf(fieldPath, include = 0) {
return origFieldPath.slice(0, origFieldPath.length - fieldPath.length + include).join('.');
}
function getField(docField, fieldPath) {
if (docField.localized) {
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'locales') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a localized field and must be followed by the "locales" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
}
const locale = lodash_1.default.head(fieldPath);
if (typeof locale !== 'string') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a localized field and must be followed by a locale specifier.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
const localizedDocField = (0, types_1.getLocalizedFieldForLocale)(docField, locale);
if (!localizedDocField) {
return undefined;
}
docField = localizedDocField;
}
// if no more items in fieldPath return the found document fields
if (fieldPath.length === 0) {
return (0, document_utils_1.getDocumentFieldValue)({ documentField: docField });
}
switch (docField.type) {
case 'object':
case 'model': {
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'fields') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a '${docField.type}' field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
}
const fieldName = lodash_1.default.head(fieldPath);
if (typeof fieldName === 'undefined') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is an '${docField.type}' field and must be followed by a field name.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
const childDocField = docField.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, fieldPath);
}
case 'reference': {
if (docField.refType !== 'document') {
return undefined;
}
if (!getDocumentById) {
throw new Error(`Can't get the field value for a field at the fieldPath '${origFieldPathStr}'. ` +
`The getDocumentById() function was not provided, ` +
`and the field at path '${getPrefixOf(fieldPath)}' is a reference field.`);
}
const refDocument = getDocumentById({
id: docField.refId,
srcType: document.srcType,
srcProjectId: document.srcProjectId
});
if (!refDocument) {
return undefined;
}
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'fields') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a reference field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
}
const fieldName = lodash_1.default.head(fieldPath);
if (typeof fieldName === 'undefined') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a reference field and must be followed by a field name.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
const childDocField = refDocument.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, fieldPath);
}
case 'list': {
if (isFullFieldPath) {
if (lodash_1.default.head(fieldPath) !== 'items') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by the "items" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
}
const itemIndex = lodash_1.default.head(fieldPath);
if (typeof itemIndex === 'undefined' || (typeof itemIndex !== 'number' && !/\d+/.test(itemIndex))) {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by a list item index.`);
}
fieldPath = lodash_1.default.tail(fieldPath);
const listItem = docField.items && docField.items[itemIndex];
if (!listItem) {
return;
}
return getField(listItem, fieldPath);
}
default: {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a primitive field of type '${docField.type}' and cannot be followed by another field path.`);
}
}
}
const fieldName = lodash_1.default.head(fieldPath);
const childFieldPath = lodash_1.default.tail(fieldPath);
if (typeof fieldName !== 'string') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The first fieldPath item must be a string specifying a document's field name.`);
}
const childDocField = document.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, childFieldPath);
}
exports.getDocumentFieldValueAtFieldPath = getDocumentFieldValueAtFieldPath;
//# sourceMappingURL=field-path-utils.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"field-path-utils.js","sourceRoot":"","sources":["../src/field-path-utils.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"field-path-utils.js","sourceRoot":"","sources":["../src/field-path-utils.ts"],"names":[],"mappings":"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"}

@@ -1,4 +0,3 @@

export declare function fieldPathToString(fieldPath: (string | number)[]): string;
export declare function failFunctionWithTag(tag: string): (message: string) => never;
export declare function assertFunctionWithFail(fail: (message: string) => void): (value: any, message: string) => void;
//# sourceMappingURL=utils.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,UAmB/D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,aACb,MAAM,WAGvC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,WACpC,GAAG,WAAW,MAAM,UAKrD"}
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,aACb,MAAM,WAGvC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,WACpC,GAAG,WAAW,MAAM,UAKrD"}
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertFunctionWithFail = exports.failFunctionWithTag = exports.fieldPathToString = void 0;
const lodash_1 = __importDefault(require("lodash"));
function fieldPathToString(fieldPath) {
return lodash_1.default.reduce(fieldPath, (accumulator, fieldName, index) => {
if (lodash_1.default.isString(fieldName) && /\W/.test(fieldName)) {
// field name is a string with non alphanumeric character
accumulator += `['${fieldName}']`;
}
else if (lodash_1.default.isNumber(fieldName)) {
accumulator += `[${fieldName}]`;
}
else {
if (index > 0) {
accumulator += '.';
}
accumulator += fieldName;
}
return accumulator;
}, '');
}
exports.fieldPathToString = fieldPathToString;
exports.assertFunctionWithFail = exports.failFunctionWithTag = void 0;
function failFunctionWithTag(tag) {

@@ -28,0 +5,0 @@ return function fail(message) {

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,SAAgB,iBAAiB,CAAC,SAA8B;IAC5D,OAAO,gBAAC,CAAC,MAAM,CACX,SAAS,EACT,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,gBAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAC/C,yDAAyD;YACzD,WAAW,IAAI,KAAK,SAAS,IAAI,CAAC;SACrC;aAAM,IAAI,gBAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC9B,WAAW,IAAI,IAAI,SAAS,GAAG,CAAC;SACnC;aAAM;YACH,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,WAAW,IAAI,GAAG,CAAC;aACtB;YACD,WAAW,IAAI,SAAS,CAAC;SAC5B;QACD,OAAO,WAAW,CAAC;IACvB,CAAC,EACD,EAAE,CACL,CAAC;AACN,CAAC;AAnBD,8CAmBC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,SAAS,IAAI,CAAC,OAAe;QAChC,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;AACN,CAAC;AAJD,kDAIC;AAED,SAAgB,sBAAsB,CAAC,IAA+B;IAClE,OAAO,SAAS,MAAM,CAAC,KAAU,EAAE,OAAe;QAC9C,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,CAAC;SACjB;IACL,CAAC,CAAC;AACN,CAAC;AAND,wDAMC"}
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,mBAAmB,CAAC,GAAW;IAC3C,OAAO,SAAS,IAAI,CAAC,OAAe;QAChC,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;AACN,CAAC;AAJD,kDAIC;AAED,SAAgB,sBAAsB,CAAC,IAA+B;IAClE,OAAO,SAAS,MAAM,CAAC,KAAU,EAAE,OAAe;QAC9C,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,CAAC;SACjB;IACL,CAAC,CAAC;AACN,CAAC;AAND,wDAMC"}
{
"name": "@stackbit/utils",
"version": "0.8.1-staging.1",
"version": "0.8.1",
"description": "Stackbit utilities",

@@ -30,3 +30,3 @@ "main": "dist/index.js",

"@notionhq/client": "^2.2.15",
"@stackbit/types": "2.1.15-staging.1",
"@stackbit/types": "2.1.14",
"axios": "^1.7.7",

@@ -46,3 +46,3 @@ "eventsource": "^2.0.2",

},
"gitHead": "10f179eaffbb19523eb7df47a7ffb3fe3ee1dd6b"
"gitHead": "ea6512cb172c274f7bf39be153c6cea8a67840ea"
}

@@ -165,3 +165,19 @@ import http, { IncomingMessage } from 'http';

function getDocumentFieldValue({ documentField, locale }: { documentField: StackbitTypes.DocumentField; locale?: string }): any {
/**
* Returns the value of a document field.
*
* If the document field is a primitive (string, url, slug, text, markdown, enum, date, number, boolean, etc.)
* then the value of the `value` property is returned.
*
* If the document is a field of type "object", "model" or "list", the value of the
* nested object is simplified and returned.
*
* If the document is a field of type "reference", the ID of the referenced
* document is returned.
*
* If the document field is localized, then the value for the provided "locale"
* is returned. If "locale" was not provided, or the document field does not
* have any values for the provided "locale", undefined is returned.
*/
export function getDocumentFieldValue({ documentField, locale }: { documentField: StackbitTypes.DocumentField; locale?: string }): any {
const nonLocalizedDocField = getLocalizedFieldForLocale(documentField, locale);

@@ -236,5 +252,5 @@ if (typeof nonLocalizedDocField === 'undefined') {

// This method was copied from @stackbit/utils => getLocalizedFieldForLocale
// This method was copied from @stackbit/types => getLocalizedFieldForLocale
// instead of importing it directly, to allow bundling this file (document-utils.ts)
// by Webpack without bundling the whole @stackbit/utils when it is imported
// by Webpack without bundling the whole @stackbit/types when it is imported
// inside frameworks like Next.js.

@@ -241,0 +257,0 @@ function getLocalizedFieldForLocale<Type extends StackbitTypes.FieldType>(

import _ from 'lodash';
import { getLocalizedFieldForLocale } from '@stackbit/types';
import type {

@@ -8,3 +9,5 @@ Model,

FieldObjectProps,
FieldPath,
Document,
DocumentWithSource,
DocumentField,

@@ -14,4 +17,66 @@ DocumentFieldNonLocalized,

} from '@stackbit/types';
import { getLocalizedFieldForLocale } from '@stackbit/types';
import { getDocumentFieldValue } from './document-utils';
/**
* Converts a FieldPath into a string.
* Puts complex strings inside single quotes '',
* and uses square brackets [] for number keys.
*/
export function fieldPathToString(fieldPath: FieldPath) {
return _.reduce(
fieldPath,
(accumulator, fieldName, index) => {
if (_.isString(fieldName) && /\W/.test(fieldName)) {
// field name is a string with non-alphanumeric character
accumulator += `['${fieldName}']`;
} else if (_.isNumber(fieldName)) {
accumulator += `[${fieldName}]`;
} else {
if (index > 0) {
accumulator += '.';
}
accumulator += fieldName;
}
return accumulator;
},
''
);
}
/**
* Converts string into FieldPath
*
* ```js
* stringToFieldPath("sections[0].button['button-label']")
* =>
* ["sections", 0, "button", "button-label"]
* ```
*/
export function stringToFieldPath(fieldPath: string): FieldPath {
const re = /\.|\[([^\]]+)\]\.?/g;
const result = [];
let match: RegExpExecArray | null = null;
let prevLastIndex = 0;
while ((match = re.exec(fieldPath)) !== null) {
if (prevLastIndex < match.index) {
result.push(fieldPath.substring(prevLastIndex, match.index));
}
if (match[1]) {
// matched [...]
if (/^\d+$/.test(match[1])) {
result.push(parseInt(match[1]));
} else {
// remove quotes inside brackets
// "hero['field-name'][2]" => ["hero", "field-name", 2]
result.push(match[1].replace(/^'(.*)'$/, '$1').replace(/^"(.*)"$/, '$1'));
}
}
prevLastIndex = re.lastIndex;
}
if (prevLastIndex < fieldPath.length) {
result.push(fieldPath.substring(prevLastIndex));
}
return result;
}
export function getModelFieldAtFieldPath({

@@ -133,2 +198,16 @@ document,

export type GetDocumentFieldAtFieldPathOptions = {
document: Document;
fieldPath: FieldPath;
locale?: string;
isFullFieldPath?: boolean;
returnUndefined?: boolean;
};
export type GetDocumentFieldAtFieldPathOptionsThrow = GetDocumentFieldAtFieldPathOptions & {
returnUndefined?: false;
};
export type GetDocumentFieldAtFieldPathOptionsUndefined = GetDocumentFieldAtFieldPathOptions & {
returnUndefined: true;
};
/**

@@ -139,3 +218,3 @@ * This function receives a `document` and returns DocumentFieldNonLocalized at

*
* @example
* ```ts
* getDocumentFieldAtFieldPath({

@@ -146,2 +225,3 @@ * document,

* })
* ```
*

@@ -152,8 +232,23 @@ * For improved localization support, use the getModelAndDocumentFieldForLocalizedFieldPath

* The `isFullFieldPath` flag specifies if the `fieldPath` includes container
* specifiers such as "fields" and "items".
* specifiers such as "fields" and "items":
*
* @example
* isFullFieldPath: false => fieldPath: ['sections', 1, 'title']
* isFullFieldPath: true => fieldPath: ['fields', 'sections', 'items', 1, 'fields', 'title']
* ```ts
* getDocumentFieldAtFieldPath({
* document,
* isFullFieldPath: false,
* fieldPath: ['sections', 1, 'title']
* })
* getDocumentFieldAtFieldPath({
* document,
* isFullFieldPath: true,
* fieldPath: ['fields', 'sections', 'items', 1, 'fields', 'title']
* })
* ```
*
* By default, if the document field at the specified `fieldPath` not found, this
* function will throw exception. Setting `returnUndefined` to true will allow
* the function to return `undefined` if the document field is not found.
*/
export function getDocumentFieldAtFieldPath(options: GetDocumentFieldAtFieldPathOptionsThrow): DocumentFieldNonLocalized;
export function getDocumentFieldAtFieldPath(options: GetDocumentFieldAtFieldPathOptionsUndefined): DocumentFieldNonLocalized | undefined;
export function getDocumentFieldAtFieldPath({

@@ -163,12 +258,19 @@ document,

locale,
isFullFieldPath
}: {
document: Document;
fieldPath: (string | number)[];
locale?: string;
isFullFieldPath?: boolean;
}): DocumentFieldNonLocalized {
isFullFieldPath,
returnUndefined
}: GetDocumentFieldAtFieldPathOptions): DocumentFieldNonLocalized | undefined {
function throwOrReturnUndefined(errorMessage: string) {
if (returnUndefined) {
return undefined;
} else {
throw new Error(errorMessage);
}
}
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'fields') {
throw new Error('fieldPath must start with "fields" specifier');
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath must start with "fields" specifier when 'isFullFieldPath' is set.`);
}

@@ -179,3 +281,3 @@ fieldPath = _.tail(fieldPath);

if (_.isEmpty(fieldPath)) {
throw new Error('the fieldPath cannot be empty');
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath cannot be empty`);
}

@@ -185,15 +287,13 @@

const modelName = document.modelName;
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
function getPrefixOf(fieldPath: (string | number)[], include = 0) {
function getPrefixOf(fieldPath: FieldPath, include = 0) {
return origFieldPath.slice(0, origFieldPath.length - fieldPath.length + include).join('.');
}
function getField(docField: DocumentField | DocumentListFieldItems, fieldPath: (string | number)[]): DocumentFieldNonLocalized {
function getField(docField: DocumentField | DocumentListFieldItems, fieldPath: FieldPath): DocumentFieldNonLocalized | undefined {
const localizedField = getLocalizedFieldForLocale(docField, locale);
if (!localizedField) {
throw new Error(
`the value of a field at fieldPath '${getPrefixOf(fieldPath)}' is undefined ` +
`for the document '${docId}' of type '${modelName}' for the '${locale}' locale.`
return throwOrReturnUndefined(
`Illegal fieldPath '${origFieldPathStr}'. The value of a field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') for the '${locale}' locale is undefined.`
);

@@ -212,3 +312,6 @@ }

if (_.head(fieldPath) !== 'fields') {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath, 1)}' must contain "fields" specifier before a field's name`);
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is an object field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`
);
}

@@ -219,3 +322,6 @@ fieldPath = _.tail(fieldPath);

if (typeof fieldName === 'undefined') {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath, 1)}' of a document '${docId}' of type '${modelName}' must point to a field name`);
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') is an object field and must be followed by a field name.`
);
}

@@ -225,3 +331,6 @@ fieldPath = _.tail(fieldPath);

if (!childDocField) {
throw new Error(`the fieldPath '${getPrefixOf(fieldPath)}' points to a non existing field in a document '${docId}' of type '${modelName}'`);
return throwOrReturnUndefined(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') points to a non existing field.`
);
}

@@ -233,3 +342,6 @@ return getField(childDocField, fieldPath);

if (_.head(fieldPath) !== 'items') {
throw new Error(`fieldPath '${getPrefixOf(fieldPath, 1)}' must contain "items" specifier after a "list" field`);
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by the "items" specifier when 'isFullFieldPath' is set.`
);
}

@@ -240,3 +352,6 @@ fieldPath = _.tail(fieldPath);

if (typeof itemIndex === 'undefined') {
throw new Error(`fieldPath '${getPrefixOf(fieldPath, 1)}' of a document '${docId}' of type '${modelName}' must point to a list item index`);
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') is a list field and must be followed by a list item index.`
);
}

@@ -246,4 +361,5 @@ fieldPath = _.tail(fieldPath);

if (!listItem) {
throw new Error(
`the fieldPath '${getPrefixOf(fieldPath)}' points to a non existing list item in a document '${docId}' of type '${modelName}'`
return throwOrReturnUndefined(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`of a document '${docId}' (model: '${modelName}') points to a non existing list item.`
);

@@ -254,5 +370,5 @@ }

default: {
const primitiveFieldName = origFieldPath[origFieldPath.length - fieldPath.length - 1];
throw new Error(
`the fieldPath '${origFieldPathStr}' is illegal, a primitive field '${primitiveFieldName}' of type '${localizedField.type}' cannot be followed by additional field paths`
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a primitive field of type '${docField.type}' and cannot be followed by another field path.`
);

@@ -267,3 +383,3 @@ }

if (typeof fieldName !== 'string') {
throw new Error('the first fieldPath item must be string');
return throwOrReturnUndefined('the first fieldPath item must be string');
}

@@ -273,3 +389,3 @@

if (!childDocField) {
throw new Error(`document '${docId}' of type '${modelName}' doesn't have a field named '${fieldName}'`);
return throwOrReturnUndefined(`document '${docId}' of type '${modelName}' doesn't have a field named '${fieldName}'`);
}

@@ -741,1 +857,213 @@

}
/**
* This function returns the value of a field in the specified `document` at the
* specified `fieldPath`.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title'
* })
* ```
*
* The `fieldPath` can also contain locale specifiers for localized fields.
*
* ```ts
* getDocumentFieldValueAtFieldPath({
* document,
* fieldPath: 'sections[1].title.es'
* })
* ```
*
* Note: getting a value of a localized field without using a locale specifier
* will throw an exception.
*
* The `fieldPath` can be a string following the standard JavaScript notation
* for getting nested properties and array values, or a {@link FieldPath}.
*
* If the document field at the specified `fieldPath` not found, undefined is returned.
*
* @param document The parent document
* @param fieldPath The field path to the target field
* @param getDocumentById A function
* @param isFullFieldPath
*/
export function getDocumentFieldValueAtFieldPath({
document,
fieldPath,
getDocumentById,
isFullFieldPath
}: {
document: DocumentWithSource;
fieldPath: FieldPath | string;
getDocumentById?: (options: { id: string; srcType?: string; srcProjectId?: string }) => DocumentWithSource | undefined;
isFullFieldPath?: boolean;
}): unknown {
if (typeof fieldPath === 'string') {
fieldPath = stringToFieldPath(fieldPath);
}
const origFieldPath = fieldPath;
const origFieldPathStr = fieldPath.join('.');
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'fields') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath must start with "fields" specifier when 'isFullFieldPath' is set.`);
}
fieldPath = _.tail(fieldPath);
}
if (_.isEmpty(fieldPath)) {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The fieldPath cannot be empty`);
}
function getPrefixOf(fieldPath: FieldPath, include = 0) {
return origFieldPath.slice(0, origFieldPath.length - fieldPath.length + include).join('.');
}
function getField(docField: DocumentField | DocumentListFieldItems, fieldPath: FieldPath): unknown {
if (docField.localized) {
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'locales') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a localized field and must be followed by the "locales" specifier when 'isFullFieldPath' is set.`
);
}
fieldPath = _.tail(fieldPath);
}
const locale = _.head(fieldPath);
if (typeof locale !== 'string') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a localized field and must be followed by a locale specifier.`
);
}
fieldPath = _.tail(fieldPath);
const localizedDocField = getLocalizedFieldForLocale(docField, locale);
if (!localizedDocField) {
return undefined;
}
docField = localizedDocField;
}
// if no more items in fieldPath return the found document fields
if (fieldPath.length === 0) {
return getDocumentFieldValue({ documentField: docField });
}
switch (docField.type) {
case 'object':
case 'model': {
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'fields') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a '${docField.type}' field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`
);
}
fieldPath = _.tail(fieldPath);
}
const fieldName = _.head(fieldPath);
if (typeof fieldName === 'undefined') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is an '${docField.type}' field and must be followed by a field name.`
);
}
fieldPath = _.tail(fieldPath);
const childDocField = docField.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, fieldPath);
}
case 'reference': {
if (docField.refType !== 'document') {
return undefined;
}
if (!getDocumentById) {
throw new Error(
`Can't get the field value for a field at the fieldPath '${origFieldPathStr}'. ` +
`The getDocumentById() function was not provided, ` +
`and the field at path '${getPrefixOf(fieldPath)}' is a reference field.`
);
}
const refDocument = getDocumentById({
id: docField.refId,
srcType: document.srcType,
srcProjectId: document.srcProjectId
});
if (!refDocument) {
return undefined;
}
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'fields') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a reference field and must be followed by the "fields" specifier when 'isFullFieldPath' is set.`
);
}
fieldPath = _.tail(fieldPath);
}
const fieldName = _.head(fieldPath);
if (typeof fieldName === 'undefined') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a reference field and must be followed by a field name.`
);
}
fieldPath = _.tail(fieldPath);
const childDocField = refDocument.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, fieldPath);
}
case 'list': {
if (isFullFieldPath) {
if (_.head(fieldPath) !== 'items') {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by the "items" specifier when 'isFullFieldPath' is set.`
);
}
fieldPath = _.tail(fieldPath);
}
const itemIndex = _.head(fieldPath) as number;
if (typeof itemIndex === 'undefined' || (typeof itemIndex !== 'number' && !/\d+/.test(itemIndex))) {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a list field and must be followed by a list item index.`
);
}
fieldPath = _.tail(fieldPath);
const listItem = docField.items && docField.items[itemIndex];
if (!listItem) {
return;
}
return getField(listItem, fieldPath);
}
default: {
throw new Error(
`Illegal fieldPath '${origFieldPathStr}'. The field at path '${getPrefixOf(fieldPath)}' ` +
`is a primitive field of type '${docField.type}' and cannot be followed by another field path.`
);
}
}
}
const fieldName = _.head(fieldPath);
const childFieldPath = _.tail(fieldPath);
if (typeof fieldName !== 'string') {
throw new Error(`Illegal fieldPath '${origFieldPathStr}'. The first fieldPath item must be a string specifying a document's field name.`);
}
const childDocField: DocumentField | undefined = document.fields[fieldName];
if (!childDocField) {
return undefined;
}
return getField(childDocField, childFieldPath);
}

@@ -1,24 +0,1 @@

import _ from 'lodash';
export function fieldPathToString(fieldPath: (string | number)[]) {
return _.reduce(
fieldPath,
(accumulator, fieldName, index) => {
if (_.isString(fieldName) && /\W/.test(fieldName)) {
// field name is a string with non alphanumeric character
accumulator += `['${fieldName}']`;
} else if (_.isNumber(fieldName)) {
accumulator += `[${fieldName}]`;
} else {
if (index > 0) {
accumulator += '.';
}
accumulator += fieldName;
}
return accumulator;
},
''
);
}
export function failFunctionWithTag(tag: string) {

@@ -25,0 +2,0 @@ return function fail(message: string) {