obsidian-bases by davila7/claude-code-templates
npx skills add https://github.com/davila7/claude-code-templates --skill obsidian-bases此技能使 Claude Code 能够创建和编辑有效的 Obsidian Bases(.base 文件),包括视图、过滤器、公式以及所有相关配置。
Obsidian Bases 是基于 YAML 的文件,用于定义 Obsidian 知识库中笔记的动态视图。一个 Base 文件可以包含多个视图、全局过滤器、公式、属性配置和自定义摘要。
Base 文件使用 .base 扩展名并包含有效的 YAML。它们也可以嵌入到 Markdown 代码块中。
# 全局过滤器应用于 Base 中的所有视图
filters:
# 可以是单个过滤器字符串
# 或者包含 and/or/not 的递归过滤器对象
and: []
or: []
not: []
# 定义可在所有视图中使用的公式属性
formulas:
formula_name: 'expression'
# 配置属性的显示名称和设置
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# 定义自定义摘要公式
summaries:
custom_summary_name: 'values.mean().round(3)'
# 定义一个或多个视图
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # 可选:限制结果数量
groupBy: # 可选:对结果进行分组
property: property_name
direction: ASC | DESC
filters: # 视图特定过滤器
and: []
order: # 按顺序显示的属性
- file.name
- property_name
- formula.formula_name
summaries: # 将属性映射到摘要公式
property_name: Average
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
过滤器用于缩小结果范围。可以全局应用或按视图应用。
# 单个过滤器
filters: 'status == "done"'
# AND - 所有条件必须为真
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - 任何条件可以为真
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - 排除匹配项
filters:
not:
- 'file.hasTag("archived")'
# 嵌套过滤器
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
| 运算符 | 描述 |
|---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
&& | 逻辑与 |
| ` | |
! | 逻辑非 |
note.author 或仅 authorfile.name、file.mtime 等formula.my_formula| 属性 | 类型 | 描述 |
|---|---|---|
file.name | 字符串 | 文件名 |
file.basename | 字符串 | 不带扩展名的文件名 |
file.path | 字符串 | 文件的完整路径 |
file.folder | 字符串 | 父文件夹路径 |
file.ext | 字符串 | 文件扩展名 |
file.size | 数字 | 文件大小(字节) |
file.ctime | 日期 | 创建时间 |
file.mtime | 日期 | 修改时间 |
file.tags | 列表 | 文件中的所有标签 |
file.links | 列表 | 文件中的内部链接 |
file.backlinks | 列表 | 链接到此文件的文件 |
file.embeds | 列表 | 笔记中的嵌入内容 |
file.properties | 对象 | 所有 frontmatter 属性 |
this 关键字公式根据属性计算值。在 formulas 部分定义。
formulas:
# 简单算术
total: "price * quantity"
# 条件逻辑
status_icon: 'if(done, "✅", "⏳")'
# 字符串格式化
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# 日期格式化
created: 'file.ctime.format("YYYY-MM-DD")'
# 复杂表达式
days_old: '((now() - file.ctime) / 86400000).round(0)'
| 函数 | 签名 | 描述 |
|---|---|---|
date() | date(string): date | 将字符串解析为日期。格式:YYYY-MM-DD HH:mm:ss |
duration() | duration(string): duration | 解析持续时间字符串 |
now() | now(): date | 当前日期和时间 |
today() | today(): date | 当前日期(时间 = 00:00:00) |
if() | if(condition, trueResult, falseResult?) | 条件判断 |
min() | min(n1, n2, ...): number | 最小数字 |
max() | max(n1, n2, ...): number | 最大数字 |
number() | number(any): number | 转换为数字 |
link() | link(path, display?): Link | 创建链接 |
list() | list(element): List | 如果尚未是列表则包装为列表 |
file() | file(path): file | 获取文件对象 |
image() | image(path): image | 创建用于渲染的图像 |
icon() | icon(name): icon | 按名称获取 Lucide 图标 |
html() | html(string): html | 渲染为 HTML |
escapeHTML() | escapeHTML(string): string | 转义 HTML 字符 |
| 函数 | 签名 | 描述 |
|---|---|---|
isTruthy() | any.isTruthy(): boolean | 强制转换为布尔值 |
isType() | any.isType(type): boolean | 检查类型 |
toString() | any.toString(): string | 转换为字符串 |
字段: date.year、date.month、date.day、date.hour、date.minute、date.second、date.millisecond
| 函数 | 签名 | 描述 |
|---|---|---|
date() | date.date(): date | 移除时间部分 |
format() | date.format(string): string | 使用 Moment.js 模式格式化 |
time() | date.time(): string | 获取时间字符串 |
relative() | date.relative(): string | 人类可读的相对时间 |
isEmpty() | date.isEmpty(): boolean | 对于日期始终为 false |
# 持续时间单位:y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
# 添加/减去持续时间
"date + \"1M\"" # 添加 1 个月
"date - \"2h\"" # 减去 2 小时
"now() + \"1 day\"" # 明天
"today() + \"7d\"" # 从今天起一周后
# 减去日期以获得毫秒差
"now() - file.ctime"
# 复杂的持续时间运算
"now() + (duration('1d') * 2)"
字段: string.length
| 函数 | 签名 | 描述 |
|---|---|---|
contains() | string.contains(value): boolean | 检查子字符串 |
containsAll() | string.containsAll(...values): boolean | 所有子字符串都存在 |
containsAny() | string.containsAny(...values): boolean | 任何子字符串存在 |
startsWith() | string.startsWith(query): boolean | 以查询开头 |
endsWith() | string.endsWith(query): boolean | 以查询结尾 |
isEmpty() | string.isEmpty(): boolean | 为空或不存在 |
lower() | string.lower(): string | 转换为小写 |
title() | string.title(): string | 转换为标题大小写 |
trim() | string.trim(): string | 移除空白字符 |
replace() | string.replace(pattern, replacement): string | 替换模式 |
repeat() | string.repeat(count): string | 重复字符串 |
reverse() | string.reverse(): string | 反转字符串 |
slice() | string.slice(start, end?): string | 子字符串 |
split() | string.split(separator, n?): list | 拆分为列表 |
| 函数 | 签名 | 描述 |
|---|---|---|
abs() | number.abs(): number | 绝对值 |
ceil() | number.ceil(): number | 向上取整 |
floor() | number.floor(): number | 向下取整 |
round() | number.round(digits?): number | 四舍五入到指定位数 |
toFixed() | number.toFixed(precision): string | 定点表示法 |
isEmpty() | number.isEmpty(): boolean | 不存在 |
字段: list.length
| 函数 | 签名 | 描述 |
|---|---|---|
contains() | list.contains(value): boolean | 元素存在 |
containsAll() | list.containsAll(...values): boolean | 所有元素都存在 |
containsAny() | list.containsAny(...values): boolean | 任何元素存在 |
filter() | list.filter(expression): list | 按条件过滤(使用 value、index) |
map() | list.map(expression): list | 转换元素(使用 value、index) |
reduce() | list.reduce(expression, initial): any | 归约为单个值(使用 value、index、acc) |
flat() | list.flat(): list | 展平嵌套列表 |
join() | list.join(separator): string | 连接为字符串 |
reverse() | list.reverse(): list | 反转顺序 |
slice() | list.slice(start, end?): list | 子列表 |
sort() | list.sort(): list | 升序排序 |
unique() | list.unique(): list | 移除重复项 |
isEmpty() | list.isEmpty(): boolean | 无元素 |
| 函数 | 签名 | 描述 |
|---|---|---|
asLink() | file.asLink(display?): Link | 转换为链接 |
hasLink() | file.hasLink(otherFile): boolean | 有指向文件的链接 |
hasTag() | file.hasTag(...tags): boolean | 具有任何标签 |
hasProperty() | file.hasProperty(name): boolean | 具有属性 |
inFolder() | file.inFolder(folder): boolean | 在文件夹或子文件夹中 |
| 函数 | 签名 | 描述 |
|---|---|---|
asFile() | link.asFile(): file | 获取文件对象 |
linksTo() | link.linksTo(file): boolean | 链接到文件 |
| 函数 | 签名 | 描述 |
|---|---|---|
isEmpty() | object.isEmpty(): boolean | 无属性 |
keys() | object.keys(): list | 键列表 |
values() | object.values(): list | 值列表 |
| 函数 | 签名 | 描述 |
|---|---|---|
matches() | regexp.matches(string): boolean | 测试是否匹配 |
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
views:
- type: list
name: "Simple List"
order:
- file.name
- status
需要经纬度属性和 Maps 插件。
views:
- type: map
name: "Locations"
# 经纬度属性的地图特定设置
| 名称 | 输入类型 | 描述 |
|---|---|---|
Average | 数字 | 数学平均值 |
Min | 数字 | 最小数字 |
Max | 数字 | 最大数字 |
Sum | 数字 | 所有数字的总和 |
Range | 数字 | 最大值 - 最小值 |
Median | 数字 | 数学中位数 |
Stddev | 数字 | 标准差 |
Earliest | 日期 | 最早日期 |
Latest | 日期 | 最晚日期 |
Range | 日期 | 最晚 - 最早 |
Checked | 布尔值 | 真值计数 |
Unchecked | 布尔值 | 假值计数 |
Empty | 任意 | 空值计数 |
Filled | 任意 | 非空值计数 |
Unique | 任意 | 唯一值计数 |
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'
formulas:
days_until_due: 'if(due, ((date(due) - today()) / 86400000).round(0), "")'
is_overdue: 'if(due, date(due) < today() && status != "done", false)'
priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'
properties:
status:
displayName: Status
formula.days_until_due:
displayName: "Days Until Due"
formula.priority_label:
displayName: Priority
views:
- type: table
name: "Active Tasks"
filters:
and:
- 'status != "done"'
order:
- file.name
- status
- formula.priority_label
- due
- formula.days_until_due
groupBy:
property: status
direction: ASC
summaries:
formula.days_until_due: Average
- type: table
name: "Completed"
filters:
and:
- 'status == "done"'
order:
- file.name
- completed_date
filters:
or:
- file.hasTag("book")
- file.hasTag("article")
formulas:
reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
year_read: 'if(finished_date, date(finished_date).year, "")'
properties:
author:
displayName: Author
formula.status_icon:
displayName: ""
formula.reading_time:
displayName: "Est. Time"
views:
- type: cards
name: "Library"
order:
- cover
- file.name
- author
- formula.status_icon
filters:
not:
- 'status == "dropped"'
- type: table
name: "Reading List"
filters:
and:
- 'status == "to-read"'
order:
- file.name
- author
- pages
- formula.reading_time
filters:
and:
- file.inFolder("Projects")
- 'file.ext == "md"'
formulas:
last_updated: 'file.mtime.relative()'
link_count: 'file.links.length'
summaries:
avgLinks: 'values.filter(value.isType("number")).mean().round(1)'
properties:
formula.last_updated:
displayName: "Updated"
formula.link_count:
displayName: "Links"
views:
- type: table
name: "All Projects"
order:
- file.name
- status
- formula.last_updated
- formula.link_count
summaries:
formula.link_count: avgLinks
groupBy:
property: status
direction: ASC
- type: list
name: "Quick List"
order:
- file.name
- status
filters:
and:
- file.inFolder("Daily Notes")
- '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'
formulas:
word_estimate: '(file.size / 5).round(0)'
day_of_week: 'date(file.basename).format("dddd")'
properties:
formula.day_of_week:
displayName: "Day"
formula.word_estimate:
displayName: "~Words"
views:
- type: table
name: "Recent Notes"
limit: 30
order:
- file.name
- formula.day_of_week
- formula.word_estimate
- file.mtime
嵌入到 Markdown 文件中:
![[MyBase.base]]
<!-- 特定视图 -->
![[MyBase.base#View Name]]
'if(done, "Yes", "No")'"My View Name"filters:
and:
- file.hasTag("project")
filters:
and:
- file.inFolder("Notes")
filters:
and:
- 'file.mtime > now() - "7d"'
filters:
and:
- 'status == "active"'
- 'priority >= 3'
filters:
or:
- and:
- file.hasTag("important")
- 'status != "done"'
- and:
- 'priority == 1'
- 'due != ""'
每周安装数
211
仓库
GitHub 星标数
22.6K
首次出现
2026年1月21日
安全审计
安装于
opencode176
claude-code149
antigravity139
gemini-cli139
codex121
cursor118
This skill enables Claude Code to create and edit valid Obsidian Bases (.base files) including views, filters, formulas, and all related configurations.
Obsidian Bases are YAML-based files that define dynamic views of notes in an Obsidian vault. A Base file can contain multiple views, global filters, formulas, property configurations, and custom summaries.
Base files use the .base extension and contain valid YAML. They can also be embedded in Markdown code blocks.
# Global filters apply to ALL views in the base
filters:
# Can be a single filter string
# OR a recursive filter object with and/or/not
and: []
or: []
not: []
# Define formula properties that can be used across all views
formulas:
formula_name: 'expression'
# Configure display names and settings for properties
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# Define custom summary formulas
summaries:
custom_summary_name: 'values.mean().round(3)'
# Define one or more views
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # Optional: limit results
groupBy: # Optional: group results
property: property_name
direction: ASC | DESC
filters: # View-specific filters
and: []
order: # Properties to display in order
- file.name
- property_name
- formula.formula_name
summaries: # Map properties to summary formulas
property_name: Average
Filters narrow down results. They can be applied globally or per-view.
# Single filter
filters: 'status == "done"'
# AND - all conditions must be true
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - any condition can be true
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - exclude matching items
filters:
not:
- 'file.hasTag("archived")'
# Nested filters
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
| Operator | Description |
|---|---|
== | equals |
!= | not equal |
> | greater than |
< | less than |
>= | greater than or equal |
<= | less than or equal |
&& |
note.author or just authorfile.name, file.mtime, etc.formula.my_formula| Property | Type | Description |
|---|---|---|
file.name | String | File name |
file.basename | String | File name without extension |
file.path | String | Full path to file |
file.folder | String | Parent folder path |
file.ext | String | File extension |
this KeywordFormulas compute values from properties. Defined in the formulas section.
formulas:
# Simple arithmetic
total: "price * quantity"
# Conditional logic
status_icon: 'if(done, "✅", "⏳")'
# String formatting
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# Date formatting
created: 'file.ctime.format("YYYY-MM-DD")'
# Complex expressions
days_old: '((now() - file.ctime) / 86400000).round(0)'
| Function | Signature | Description |
|---|---|---|
date() | date(string): date | Parse string to date. Format: YYYY-MM-DD HH:mm:ss |
duration() | duration(string): duration | Parse duration string |
now() | now(): date | Current date and time |
| Function | Signature | Description |
|---|---|---|
isTruthy() | any.isTruthy(): boolean | Coerce to boolean |
isType() | any.isType(type): boolean | Check type |
toString() | any.toString(): string | Convert to string |
Fields: date.year, date.month, date.day, date.hour, date.minute, date.second, date.millisecond
| Function | Signature | Description |
|---|---|---|
date() | date.date(): date | Remove time portion |
format() | date.format(string): string | Format with Moment.js pattern |
time() | date.time(): string | Get time as string |
relative() |
# Duration units: y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
# Add/subtract durations
"date + \"1M\"" # Add 1 month
"date - \"2h\"" # Subtract 2 hours
"now() + \"1 day\"" # Tomorrow
"today() + \"7d\"" # A week from today
# Subtract dates for millisecond difference
"now() - file.ctime"
# Complex duration arithmetic
"now() + (duration('1d') * 2)"
Field: string.length
| Function | Signature | Description |
|---|---|---|
contains() | string.contains(value): boolean | Check substring |
containsAll() | string.containsAll(...values): boolean | All substrings present |
containsAny() | string.containsAny(...values): boolean | Any substring present |
| Function | Signature | Description |
|---|---|---|
abs() | number.abs(): number | Absolute value |
ceil() | number.ceil(): number | Round up |
floor() | number.floor(): number | Round down |
round() |
Field: list.length
| Function | Signature | Description |
|---|---|---|
contains() | list.contains(value): boolean | Element exists |
containsAll() | list.containsAll(...values): boolean | All elements exist |
containsAny() | list.containsAny(...values): boolean | Any element exists |
filter() |
| Function | Signature | Description |
|---|---|---|
asLink() | file.asLink(display?): Link | Convert to link |
hasLink() | file.hasLink(otherFile): boolean | Has link to file |
hasTag() | file.hasTag(...tags): boolean | Has any of the tags |
hasProperty() |
| Function | Signature | Description |
|---|---|---|
asFile() | link.asFile(): file | Get file object |
linksTo() | link.linksTo(file): boolean | Links to file |
| Function | Signature | Description |
|---|---|---|
isEmpty() | object.isEmpty(): boolean | No properties |
keys() | object.keys(): list | List of keys |
values() | object.values(): list | List of values |
| Function | Signature | Description |
|---|---|---|
matches() | regexp.matches(string): boolean | Test if matches |
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
views:
- type: list
name: "Simple List"
order:
- file.name
- status
Requires latitude/longitude properties and the Maps plugin.
views:
- type: map
name: "Locations"
# Map-specific settings for lat/lng properties
| Name | Input Type | Description |
|---|---|---|
Average | Number | Mathematical mean |
Min | Number | Smallest number |
Max | Number | Largest number |
Sum | Number | Sum of all numbers |
Range | Number | Max - Min |
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'
formulas:
days_until_due: 'if(due, ((date(due) - today()) / 86400000).round(0), "")'
is_overdue: 'if(due, date(due) < today() && status != "done", false)'
priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'
properties:
status:
displayName: Status
formula.days_until_due:
displayName: "Days Until Due"
formula.priority_label:
displayName: Priority
views:
- type: table
name: "Active Tasks"
filters:
and:
- 'status != "done"'
order:
- file.name
- status
- formula.priority_label
- due
- formula.days_until_due
groupBy:
property: status
direction: ASC
summaries:
formula.days_until_due: Average
- type: table
name: "Completed"
filters:
and:
- 'status == "done"'
order:
- file.name
- completed_date
filters:
or:
- file.hasTag("book")
- file.hasTag("article")
formulas:
reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
year_read: 'if(finished_date, date(finished_date).year, "")'
properties:
author:
displayName: Author
formula.status_icon:
displayName: ""
formula.reading_time:
displayName: "Est. Time"
views:
- type: cards
name: "Library"
order:
- cover
- file.name
- author
- formula.status_icon
filters:
not:
- 'status == "dropped"'
- type: table
name: "Reading List"
filters:
and:
- 'status == "to-read"'
order:
- file.name
- author
- pages
- formula.reading_time
filters:
and:
- file.inFolder("Projects")
- 'file.ext == "md"'
formulas:
last_updated: 'file.mtime.relative()'
link_count: 'file.links.length'
summaries:
avgLinks: 'values.filter(value.isType("number")).mean().round(1)'
properties:
formula.last_updated:
displayName: "Updated"
formula.link_count:
displayName: "Links"
views:
- type: table
name: "All Projects"
order:
- file.name
- status
- formula.last_updated
- formula.link_count
summaries:
formula.link_count: avgLinks
groupBy:
property: status
direction: ASC
- type: list
name: "Quick List"
order:
- file.name
- status
filters:
and:
- file.inFolder("Daily Notes")
- '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'
formulas:
word_estimate: '(file.size / 5).round(0)'
day_of_week: 'date(file.basename).format("dddd")'
properties:
formula.day_of_week:
displayName: "Day"
formula.word_estimate:
displayName: "~Words"
views:
- type: table
name: "Recent Notes"
limit: 30
order:
- file.name
- formula.day_of_week
- formula.word_estimate
- file.mtime
Embed in Markdown files:
![[MyBase.base]]
<!-- Specific view -->
![[MyBase.base#View Name]]
'if(done, "Yes", "No")'"My View Name"filters:
and:
- file.hasTag("project")
filters:
and:
- file.inFolder("Notes")
filters:
and:
- 'file.mtime > now() - "7d"'
filters:
and:
- 'status == "active"'
- 'priority >= 3'
filters:
or:
- and:
- file.hasTag("important")
- 'status != "done"'
- and:
- 'priority == 1'
- 'due != ""'
Weekly Installs
211
Repository
GitHub Stars
22.6K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode176
claude-code149
antigravity139
gemini-cli139
codex121
cursor118
Python PDF处理教程:合并拆分、提取文本表格、创建PDF文件
55,400 周安装
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
144,300 周安装
Remotion最佳实践指南:字幕处理、FFmpeg视频操作、音频可视化与音效使用
191,700 周安装
App Store Connect PPP定价工具:按地区定价与订阅价格批量管理
226 周安装
Vercel Web界面规范检查工具 - 自动检测代码是否符合Web设计指南
213,800 周安装
前端设计技能:创建独特生产级界面,避免AI生成美学,实现创意前端开发
224,600 周安装
Vercel React 最佳实践指南 | 58条Next.js性能优化规则与代码重构
265,000 周安装
| logical and |
| ` |
! | logical not |
file.size | Number | File size in bytes |
file.ctime | Date | Created time |
file.mtime | Date | Modified time |
file.tags | List | All tags in file |
file.links | List | Internal links in file |
file.backlinks | List | Files linking to this file |
file.embeds | List | Embeds in the note |
file.properties | Object | All frontmatter properties |
today() | today(): date | Current date (time = 00:00:00) |
if() | if(condition, trueResult, falseResult?) | Conditional |
min() | min(n1, n2, ...): number | Smallest number |
max() | max(n1, n2, ...): number | Largest number |
number() | number(any): number | Convert to number |
link() | link(path, display?): Link | Create a link |
list() | list(element): List | Wrap in list if not already |
file() | file(path): file | Get file object |
image() | image(path): image | Create image for rendering |
icon() | icon(name): icon | Lucide icon by name |
html() | html(string): html | Render as HTML |
escapeHTML() | escapeHTML(string): string | Escape HTML characters |
date.relative(): string |
| Human-readable relative time |
isEmpty() | date.isEmpty(): boolean | Always false for dates |
startsWith()string.startsWith(query): boolean |
| Starts with query |
endsWith() | string.endsWith(query): boolean | Ends with query |
isEmpty() | string.isEmpty(): boolean | Empty or not present |
lower() | string.lower(): string | To lowercase |
title() | string.title(): string | To Title Case |
trim() | string.trim(): string | Remove whitespace |
replace() | string.replace(pattern, replacement): string | Replace pattern |
repeat() | string.repeat(count): string | Repeat string |
reverse() | string.reverse(): string | Reverse string |
slice() | string.slice(start, end?): string | Substring |
split() | string.split(separator, n?): list | Split to list |
number.round(digits?): number |
| Round to digits |
toFixed() | number.toFixed(precision): string | Fixed-point notation |
isEmpty() | number.isEmpty(): boolean | Not present |
list.filter(expression): list |
Filter by condition (uses value, index) |
map() | list.map(expression): list | Transform elements (uses value, index) |
reduce() | list.reduce(expression, initial): any | Reduce to single value (uses value, index, acc) |
flat() | list.flat(): list | Flatten nested lists |
join() | list.join(separator): string | Join to string |
reverse() | list.reverse(): list | Reverse order |
slice() | list.slice(start, end?): list | Sublist |
sort() | list.sort(): list | Sort ascending |
unique() | list.unique(): list | Remove duplicates |
isEmpty() | list.isEmpty(): boolean | No elements |
file.hasProperty(name): boolean |
| Has property |
inFolder() | file.inFolder(folder): boolean | In folder or subfolder |
Median| Number |
| Mathematical median |
Stddev | Number | Standard deviation |
Earliest | Date | Earliest date |
Latest | Date | Latest date |
Range | Date | Latest - Earliest |
Checked | Boolean | Count of true values |
Unchecked | Boolean | Count of false values |
Empty | Any | Count of empty values |
Filled | Any | Count of non-empty values |
Unique | Any | Count of unique values |