@robbeverhelst/do 1.37.0 → 1.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/do.js +104 -34
  2. package/package.json +1 -1
package/dist/do.js CHANGED
@@ -4503,9 +4503,15 @@ var pushSubscriptions = pgTable("push_subscriptions", {
4503
4503
  var shoppingLists = pgTable("shopping_lists", {
4504
4504
  id: text("id").primaryKey().references(() => nodes.id),
4505
4505
  tenantId: text("tenant_id").notNull().references(() => tenants.id),
4506
- notes: text("notes")
4506
+ notes: text("notes"),
4507
+ groupByStore: boolean("group_by_store").notNull().default(false),
4508
+ recurrenceUnit: text("recurrence_unit").$type(),
4509
+ recurrenceInterval: integer("recurrence_interval").notNull().default(1),
4510
+ nextRestockAt: timestamp("next_restock_at", { withTimezone: true }),
4511
+ lastRestockedAt: timestamp("last_restocked_at", { withTimezone: true })
4507
4512
  }, (t) => [
4508
- index("shopping_lists_tenant_idx").on(t.tenantId)
4513
+ index("shopping_lists_tenant_idx").on(t.tenantId),
4514
+ index("shopping_lists_next_restock_idx").on(t.nextRestockAt)
4509
4515
  ]);
4510
4516
  var shoppingItems = pgTable("shopping_items", {
4511
4517
  id: text("id").primaryKey(),
@@ -4517,6 +4523,7 @@ var shoppingItems = pgTable("shopping_items", {
4517
4523
  isChecked: boolean("is_checked").notNull().default(false),
4518
4524
  sortOrder: integer("sort_order").notNull().default(0),
4519
4525
  notes: text("notes"),
4526
+ store: text("store"),
4520
4527
  facet: jsonb("facet").$type(),
4521
4528
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
4522
4529
  }, (t) => [
@@ -4533,7 +4540,8 @@ var inventoryItems = pgTable("inventory_items", {
4533
4540
  location: text("location"),
4534
4541
  lowStockThreshold: doublePrecision("low_stock_threshold"),
4535
4542
  expiresAt: timestamp("expires_at", { withTimezone: true }),
4536
- notes: text("notes")
4543
+ notes: text("notes"),
4544
+ facet: jsonb("facet").$type()
4537
4545
  }, (t) => [
4538
4546
  index("inventory_items_tenant_idx").on(t.tenantId)
4539
4547
  ]);
@@ -20040,7 +20048,16 @@ var reviewDayStatSchema = exports_external.object({
20040
20048
  });
20041
20049
  var reviewStatsSchema = exports_external.array(reviewDayStatSchema);
20042
20050
  // ../../packages/schema/src/contracts/shopping.ts
20043
- var shoppingListSchema = createSelectSchema(shoppingLists);
20051
+ var shoppingRecurrenceUnitSchema = exports_external.enum(["day", "week", "month"]);
20052
+ var shoppingListSchema = createSelectSchema(shoppingLists, {
20053
+ recurrenceUnit: shoppingRecurrenceUnitSchema.nullable(),
20054
+ nextRestockAt: exports_external.coerce.date().nullable(),
20055
+ lastRestockedAt: exports_external.coerce.date().nullable()
20056
+ });
20057
+ var shoppingRecurrenceInputSchema = exports_external.object({
20058
+ unit: shoppingRecurrenceUnitSchema,
20059
+ interval: exports_external.number().int().positive().default(1)
20060
+ }).strict();
20044
20061
  var itemFacetSchema = exports_external.record(exports_external.string(), exports_external.unknown());
20045
20062
  var shoppingItemSchema = createSelectSchema(shoppingItems, {
20046
20063
  createdAt: exports_external.coerce.date(),
@@ -20054,6 +20071,7 @@ var shoppingItemInputSchema = exports_external.object({
20054
20071
  isChecked: exports_external.boolean().optional(),
20055
20072
  sortOrder: exports_external.number().int().min(0).optional(),
20056
20073
  notes: exports_external.string().nullish(),
20074
+ store: exports_external.string().nullish(),
20057
20075
  facet: itemFacetSchema.nullish()
20058
20076
  });
20059
20077
  var createShoppingListInputSchema = exports_external.object({
@@ -20062,12 +20080,16 @@ var createShoppingListInputSchema = exports_external.object({
20062
20080
  parentId: ulidSchema.nullish(),
20063
20081
  notes: exports_external.string().nullish(),
20064
20082
  displayKind: exports_external.string().min(1).optional(),
20083
+ groupByStore: exports_external.boolean().optional(),
20084
+ recurrence: shoppingRecurrenceInputSchema.nullish(),
20065
20085
  items: exports_external.array(shoppingItemInputSchema).optional()
20066
20086
  });
20067
20087
  var updateShoppingListInputSchema = exports_external.object({
20068
20088
  title: exports_external.string().min(1).optional(),
20069
20089
  parentId: ulidSchema.nullish(),
20070
20090
  notes: exports_external.string().nullish(),
20091
+ groupByStore: exports_external.boolean().optional(),
20092
+ recurrence: shoppingRecurrenceInputSchema.nullish(),
20071
20093
  items: exports_external.array(shoppingItemInputSchema).optional()
20072
20094
  }).strict();
20073
20095
  var shoppingListViewSchema = shoppingListSchema.extend({
@@ -20084,9 +20106,78 @@ var shoppingListDetailSchema = shoppingListViewSchema.extend({
20084
20106
  items: exports_external.array(shoppingItemSchema)
20085
20107
  });
20086
20108
  var setShoppingItemCheckedInputSchema = exports_external.object({ isChecked: exports_external.boolean() }).strict();
20109
+ // ../../packages/schema/src/presets/facets.ts
20110
+ var MEDIA_SHELF_DISPLAY_KIND = "media-shelf";
20111
+ var bookStatusValues = ["to-read", "reading", "read"];
20112
+ var bookStatusSchema = exports_external.enum(bookStatusValues);
20113
+ var mediaShelfFacetSchema = exports_external.object({
20114
+ author: exports_external.string().min(1).max(200).nullish(),
20115
+ coverUrl: exports_external.string().url().max(2048).nullish(),
20116
+ status: bookStatusSchema.default("to-read"),
20117
+ rating: exports_external.number().int().min(1).max(5).nullish()
20118
+ }).strict();
20119
+ var PANTRY_DISPLAY_KIND = "pantry";
20120
+ var WARDROBE_DISPLAY_KIND = "wardrobe";
20121
+ var TOOLS_DISPLAY_KIND = "tools";
20122
+ var MEDS_DISPLAY_KIND = "meds";
20123
+ var INVENTORY_AREA_KINDS = [
20124
+ PANTRY_DISPLAY_KIND,
20125
+ WARDROBE_DISPLAY_KIND,
20126
+ TOOLS_DISPLAY_KIND,
20127
+ MEDS_DISPLAY_KIND
20128
+ ];
20129
+ var INVENTORY_DISPLAY_KINDS = ["default", ...INVENTORY_AREA_KINDS];
20130
+ var isoDateString = exports_external.string().regex(/^\d{4}-\d{2}-\d{2}$/, "must be an ISO date (YYYY-MM-DD)");
20131
+ var wardrobeSeasonValues = ["spring", "summer", "autumn", "winter", "all-season"];
20132
+ var wardrobeSeasonSchema = exports_external.enum(wardrobeSeasonValues);
20133
+ var toolConditionValues = ["new", "good", "worn", "broken"];
20134
+ var toolConditionSchema = exports_external.enum(toolConditionValues);
20135
+ var pantryFacetSchema = exports_external.object({
20136
+ brand: exports_external.string().min(1).max(200).nullish(),
20137
+ openedAt: isoDateString.nullish()
20138
+ }).strict();
20139
+ var wardrobeFacetSchema = exports_external.object({
20140
+ size: exports_external.string().min(1).max(50).nullish(),
20141
+ season: wardrobeSeasonSchema.nullish(),
20142
+ color: exports_external.string().min(1).max(50).nullish()
20143
+ }).strict();
20144
+ var toolsFacetSchema = exports_external.object({
20145
+ brand: exports_external.string().min(1).max(200).nullish(),
20146
+ condition: toolConditionSchema.nullish(),
20147
+ lastServicedAt: isoDateString.nullish()
20148
+ }).strict();
20149
+ var medsFacetSchema = exports_external.object({
20150
+ dose: exports_external.string().min(1).max(100).nullish(),
20151
+ refillBy: isoDateString.nullish(),
20152
+ prescription: exports_external.boolean().nullish()
20153
+ }).strict();
20154
+ var WATCH_SHELF_DISPLAY_KIND = "watch-shelf";
20155
+ var watchKindValues = ["movie", "show"];
20156
+ var watchKindSchema = exports_external.enum(watchKindValues);
20157
+ var watchStatusValues = ["to-watch", "watching", "watched"];
20158
+ var watchStatusSchema = exports_external.enum(watchStatusValues);
20159
+ var watchFacetSchema = exports_external.object({
20160
+ kind: watchKindSchema.default("movie"),
20161
+ status: watchStatusSchema.default("to-watch"),
20162
+ rating: exports_external.number().int().min(1).max(5).nullish(),
20163
+ year: exports_external.number().int().min(1888).max(2200).nullish(),
20164
+ posterUrl: exports_external.string().url().max(2048).nullish()
20165
+ }).strict();
20166
+ var facetSchemasByDisplayKind = {
20167
+ [MEDIA_SHELF_DISPLAY_KIND]: mediaShelfFacetSchema,
20168
+ [PANTRY_DISPLAY_KIND]: pantryFacetSchema,
20169
+ [WARDROBE_DISPLAY_KIND]: wardrobeFacetSchema,
20170
+ [TOOLS_DISPLAY_KIND]: toolsFacetSchema,
20171
+ [MEDS_DISPLAY_KIND]: medsFacetSchema,
20172
+ [WATCH_SHELF_DISPLAY_KIND]: watchFacetSchema
20173
+ };
20174
+
20087
20175
  // ../../packages/schema/src/contracts/inventory.ts
20176
+ var inventoryDisplayKindSchema = exports_external.enum(INVENTORY_DISPLAY_KINDS);
20177
+ var inventoryItemFacetSchema = exports_external.record(exports_external.string(), exports_external.unknown());
20088
20178
  var inventoryItemSchema = createSelectSchema(inventoryItems, {
20089
- expiresAt: exports_external.coerce.date().nullable()
20179
+ expiresAt: exports_external.coerce.date().nullable(),
20180
+ facet: inventoryItemFacetSchema.nullable()
20090
20181
  });
20091
20182
  var createInventoryItemInputSchema = exports_external.object({
20092
20183
  id: ulidSchema,
@@ -20098,7 +20189,9 @@ var createInventoryItemInputSchema = exports_external.object({
20098
20189
  location: exports_external.string().nullish(),
20099
20190
  lowStockThreshold: exports_external.number().min(0).nullish(),
20100
20191
  expiresAt: exports_external.coerce.date().nullish(),
20101
- notes: exports_external.string().nullish()
20192
+ notes: exports_external.string().nullish(),
20193
+ displayKind: inventoryDisplayKindSchema.optional(),
20194
+ facet: inventoryItemFacetSchema.nullish()
20102
20195
  });
20103
20196
  var updateInventoryItemInputSchema = exports_external.object({
20104
20197
  title: exports_external.string().min(1).optional(),
@@ -20109,11 +20202,14 @@ var updateInventoryItemInputSchema = exports_external.object({
20109
20202
  location: exports_external.string().nullish(),
20110
20203
  lowStockThreshold: exports_external.number().min(0).nullish(),
20111
20204
  expiresAt: exports_external.coerce.date().nullish(),
20112
- notes: exports_external.string().nullish()
20205
+ notes: exports_external.string().nullish(),
20206
+ displayKind: inventoryDisplayKindSchema.optional(),
20207
+ facet: inventoryItemFacetSchema.nullish()
20113
20208
  }).strict();
20114
20209
  var inventoryItemViewSchema = inventoryItemSchema.extend({
20115
20210
  title: exports_external.string(),
20116
20211
  parentId: ulidSchema.nullable(),
20212
+ displayKind: exports_external.string(),
20117
20213
  createdAt: exports_external.coerce.date(),
20118
20214
  updatedAt: exports_external.coerce.date(),
20119
20215
  deletedAt: exports_external.coerce.date().nullable()
@@ -21116,32 +21212,6 @@ function parseCapture(input) {
21116
21212
  const title = input.replace(TAG_RE, " ").replace(PRIORITY_RE, " ").replace(AREA_RE, " ").replace(/\s+/g, " ").trim();
21117
21213
  return { title, tags, ...priority ? { priority } : {}, ...area ? { area } : {} };
21118
21214
  }
21119
- // ../../packages/schema/src/presets/facets.ts
21120
- var MEDIA_SHELF_DISPLAY_KIND = "media-shelf";
21121
- var bookStatusValues = ["to-read", "reading", "read"];
21122
- var bookStatusSchema = exports_external.enum(bookStatusValues);
21123
- var mediaShelfFacetSchema = exports_external.object({
21124
- author: exports_external.string().min(1).max(200).nullish(),
21125
- coverUrl: exports_external.string().url().max(2048).nullish(),
21126
- status: bookStatusSchema.default("to-read"),
21127
- rating: exports_external.number().int().min(1).max(5).nullish()
21128
- }).strict();
21129
- var WATCH_SHELF_DISPLAY_KIND = "watch-shelf";
21130
- var watchKindValues = ["movie", "show"];
21131
- var watchKindSchema = exports_external.enum(watchKindValues);
21132
- var watchStatusValues = ["to-watch", "watching", "watched"];
21133
- var watchStatusSchema = exports_external.enum(watchStatusValues);
21134
- var watchFacetSchema = exports_external.object({
21135
- kind: watchKindSchema.default("movie"),
21136
- status: watchStatusSchema.default("to-watch"),
21137
- rating: exports_external.number().int().min(1).max(5).nullish(),
21138
- year: exports_external.number().int().min(1888).max(2200).nullish(),
21139
- posterUrl: exports_external.string().url().max(2048).nullish()
21140
- }).strict();
21141
- var facetSchemasByDisplayKind = {
21142
- [MEDIA_SHELF_DISPLAY_KIND]: mediaShelfFacetSchema,
21143
- [WATCH_SHELF_DISPLAY_KIND]: watchFacetSchema
21144
- };
21145
21215
  // ../../packages/schema/src/presets/recipe.ts
21146
21216
  var presetEntitySchema = exports_external.enum([
21147
21217
  "habit",
@@ -23018,7 +23088,7 @@ function parseCapture2(input) {
23018
23088
 
23019
23089
  // src/meta.ts
23020
23090
  var CLI_NAME = "do";
23021
- var VERSION = "1.37.0";
23091
+ var VERSION = "1.39.0";
23022
23092
  var API_PREFIX = "/api/v1";
23023
23093
  var DEFAULT_API_URL = "http://localhost:3001";
23024
23094
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robbeverhelst/do",
3
- "version": "1.37.0",
3
+ "version": "1.39.0",
4
4
  "private": false,
5
5
  "description": "do — the agent-drivable CLI over the public /api/v1 surface",
6
6
  "type": "module",