@happyvertical/smrt-places 0.57.36 → 0.57.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -7,6 +7,7 @@ Hierarchical geographic database with organic growth via geocoding integration.
7
7
  - **Place** (STI): hierarchical via `parentId`. Optional geo fields (all nullable — supports abstract places like game zones). `externalId`/`source` from geocoder. Metadata JSON.
8
8
  - **PlaceAsset**: dedicated owned-asset join in `place_assets` with `relationship` and `sortOrder`.
9
9
  - **PlaceType**: slug-based classification (country, city, building, zone, room, region).
10
+ - **Recipe `places.locations`** (`src/recipes.ts`, help in `src/locations.recipe.md`): lists places and place types for the planner and other catalog hosts; `PlaceAsset` is closed and stays out. Fields it shows carry `@field({ description })` in plain words; `parentId` (inherited) is described by the recipe's `options` help. Keep both when editing the models.
10
11
 
11
12
  ## Key Collection Methods
12
13
 
@@ -50,7 +50,11 @@ var PlaceType = class extends SmrtObject {
50
50
  }
51
51
  };
52
52
  __publicField(PlaceType, "__smrtPackage__", "@happyvertical/smrt-places");
53
- __decorateClass([field({ required: true })], PlaceType.prototype, "name", 2);
53
+ __decorateClass([field({
54
+ required: true,
55
+ description: "The name of the kind of place, such as \"Building\", \"Room\" or \"Zone\"."
56
+ })], PlaceType.prototype, "name", 2);
57
+ __decorateClass([field({ description: "A few words about when to use this kind of place." })], PlaceType.prototype, "description", 2);
54
58
  PlaceType = __decorateClass([smrt({
55
59
  tableStrategy: "sti",
56
60
  api: { include: [
@@ -157,4 +161,4 @@ var PlaceTypeCollection = class extends SmrtCollection {
157
161
  //#endregion
158
162
  export { __exportAll as i, PlaceTypeCollection_exports as n, PlaceType as r, PlaceTypeCollection as t };
159
163
 
160
- //# sourceMappingURL=PlaceTypeCollection-BKbKjUK4.js.map
164
+ //# sourceMappingURL=PlaceTypeCollection-52f-CRIf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceTypeCollection-BKbKjUK4.js","names":[],"sources":["../../src/models/PlaceType.ts","../../src/collections/PlaceTypeCollection.ts"],"sourcesContent":["/**\n * PlaceType model - Defines types/categories of places\n *\n * Examples: 'country', 'city', 'building', 'zone', 'room', 'region'\n */\n\nimport { field, SmrtObject, smrt } from '@happyvertical/smrt-core';\nimport type { PlaceTypeOptions } from '../types';\n\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create'] },\n cli: { skipApiCheck: true },\n})\nexport class PlaceType extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-places\";\n // id and slug are inherited from SmrtObject\n @field({ required: true })\n name: string = ''; // Type name (e.g., 'Town', 'City', 'Country')\n\n description?: string; // Optional description\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: PlaceTypeOptions = {}) {\n super(options);\n if (options.name) this.name = options.name;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Convenience method for slug-based lookup\n *\n * @param slug - The slug to search for\n * @returns PlaceType instance or null if not found\n */\n static async getBySlug(_slug: string): Promise<PlaceType | null> {\n // Will be auto-implemented by SMRT\n return null;\n }\n}\n","/**\n * PlaceTypeCollection - Collection manager for PlaceType objects\n *\n * Provides simple lookup and creation for place types.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { PlaceType } from '../models/PlaceType';\n\nexport class PlaceTypeCollection extends SmrtCollection<PlaceType> {\n static readonly _itemClass = PlaceType;\n\n /**\n * Get or create a place type by slug\n *\n * @param slug - PlaceType slug (e.g., 'city', 'building')\n * @param name - Optional display name (defaults to capitalized slug)\n * @returns PlaceType instance\n */\n async getOrCreate(slug: string, name?: string): Promise<PlaceType> {\n // First try to find existing type with this slug\n const existing = await this.get({ slug });\n\n if (existing) {\n return existing;\n }\n\n // Create new type with auto-generated name if not provided\n const displayName =\n name || slug.replace(/-/g, ' ').replace(/\\b\\w/g, (l) => l.toUpperCase());\n\n return await this.create({\n slug,\n name: displayName,\n });\n }\n\n /**\n * Get a place type by slug\n *\n * @param slug - PlaceType slug to search for\n * @returns PlaceType instance or null if not found\n */\n async getBySlug(slug: string): Promise<PlaceType | null> {\n return await this.get({ slug });\n }\n\n /**\n * Initialize default place types\n *\n * Creates standard types if they don't exist:\n * - country\n * - region (state/province)\n * - city\n * - address\n * - building\n * - room\n * - zone (for abstract/virtual places)\n *\n * @returns Array of created/existing place types\n */\n async initializeDefaults(): Promise<PlaceType[]> {\n const defaults = [\n { slug: 'country', name: 'Country' },\n { slug: 'region', name: 'Region' },\n { slug: 'city', name: 'City' },\n { slug: 'address', name: 'Address' },\n { slug: 'building', name: 'Building' },\n { slug: 'room', name: 'Room' },\n { slug: 'zone', name: 'Zone' },\n { slug: 'point_of_interest', name: 'Point of Interest' },\n ];\n\n const types: PlaceType[] = [];\n for (const def of defaults) {\n const type = await this.getOrCreate(def.slug, def.name);\n types.push(type);\n }\n\n return types;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,IAAM,YAAN,cAAwB,WAAW;CAGxC,OAAe;CAEf;CAGA,4BAAY,IAAI,KAAK;CACrB,4BAAY,IAAI,KAAK;CAErB,YAAY,UAA4B,CAAC,GAAG;EAC1C,MAAM,OAAO;EACb,IAAI,QAAQ,MAAM,KAAK,OAAO,QAAQ;EACtC,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,KAAK,cAAc,QAAQ;EAC7B,IAAI,QAAQ,WAAW,KAAK,YAAY,QAAQ;EAChD,IAAI,QAAQ,WAAW,KAAK,YAAY,QAAQ;CAClD;;;;;;;CAQA,aAAa,UAAU,OAA0C;EAE/D,OAAO;CACT;AACF;AA9B4C,cAA/B,WAAsC,mBAAkB,4BAAA;AAGnE,gBAAA,CADC,MAAM,EAAE,UAAU,KAAK,CAAC,CAAA,GAFd,UAGX,WAAA,QAAA,CAAA;AAHW,YAAN,gBAAA,CANN,KAAK;CACJ,eAAe;CACf,KAAK,EAAE,SAAS;EAAC;EAAQ;EAAO;EAAU;EAAU;CAAQ,EAAE;CAC9D,KAAK,EAAE,SAAS;EAAC;EAAQ;EAAO;CAAQ,EAAE;CAC1C,KAAK,EAAE,cAAc,KAAK;AAC5B,CAAC,CAAA,GACY,SAAA;;;;ACNN,IAAM,sBAAN,cAAkC,eAA0B;CACjE,OAAgB,aAAa;;;;;;;;CAS7B,MAAM,YAAY,MAAc,MAAmC;EAEjE,MAAM,WAAW,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC;EAExC,IAAI,UACF,OAAO;EAIT,MAAM,cACJ,QAAQ,KAAK,QAAQ,MAAM,GAAG,CAAA,CAAE,QAAQ,UAAU,MAAM,EAAE,YAAY,CAAC;EAEzE,OAAO,MAAM,KAAK,OAAO;GACvB;GACA,MAAM;EACR,CAAC;CACH;;;;;;;CAQA,MAAM,UAAU,MAAyC;EACvD,OAAO,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC;CAChC;;;;;;;;;;;;;;;CAgBA,MAAM,qBAA2C;EAC/C,MAAM,WAAW;GACf;IAAE,MAAM;IAAW,MAAM;GAAU;GACnC;IAAE,MAAM;IAAU,MAAM;GAAS;GACjC;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAW,MAAM;GAAU;GACnC;IAAE,MAAM;IAAY,MAAM;GAAW;GACrC;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAqB,MAAM;GAAoB;EACzD;EAEA,MAAM,QAAqB,CAAC;EAC5B,KAAA,MAAW,OAAO,UAAU;GAC1B,MAAM,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,IAAI,IAAI;GACtD,MAAM,KAAK,IAAI;EACjB;EAEA,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"PlaceTypeCollection-52f-CRIf.js","names":[],"sources":["../../src/models/PlaceType.ts","../../src/collections/PlaceTypeCollection.ts"],"sourcesContent":["/**\n * PlaceType model - Defines types/categories of places\n *\n * Examples: 'country', 'city', 'building', 'zone', 'room', 'region'\n */\n\nimport { field, SmrtObject, smrt } from '@happyvertical/smrt-core';\nimport type { PlaceTypeOptions } from '../types';\n\n@smrt({\n tableStrategy: 'sti',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get', 'create'] },\n cli: { skipApiCheck: true },\n})\nexport class PlaceType extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-places\";\n // id and slug are inherited from SmrtObject\n @field({\n required: true,\n description:\n 'The name of the kind of place, such as \"Building\", \"Room\" or \"Zone\".',\n })\n name: string = ''; // Type name (e.g., 'Town', 'City', 'Country')\n\n @field({ description: 'A few words about when to use this kind of place.' })\n description?: string; // Optional description\n\n // Timestamps\n createdAt = new Date();\n updatedAt = new Date();\n\n constructor(options: PlaceTypeOptions = {}) {\n super(options);\n if (options.name) this.name = options.name;\n if (options.description !== undefined)\n this.description = options.description;\n if (options.createdAt) this.createdAt = options.createdAt;\n if (options.updatedAt) this.updatedAt = options.updatedAt;\n }\n\n /**\n * Convenience method for slug-based lookup\n *\n * @param slug - The slug to search for\n * @returns PlaceType instance or null if not found\n */\n static async getBySlug(_slug: string): Promise<PlaceType | null> {\n // Will be auto-implemented by SMRT\n return null;\n }\n}\n","/**\n * PlaceTypeCollection - Collection manager for PlaceType objects\n *\n * Provides simple lookup and creation for place types.\n */\n\nimport { SmrtCollection } from '@happyvertical/smrt-core';\nimport { PlaceType } from '../models/PlaceType';\n\nexport class PlaceTypeCollection extends SmrtCollection<PlaceType> {\n static readonly _itemClass = PlaceType;\n\n /**\n * Get or create a place type by slug\n *\n * @param slug - PlaceType slug (e.g., 'city', 'building')\n * @param name - Optional display name (defaults to capitalized slug)\n * @returns PlaceType instance\n */\n async getOrCreate(slug: string, name?: string): Promise<PlaceType> {\n // First try to find existing type with this slug\n const existing = await this.get({ slug });\n\n if (existing) {\n return existing;\n }\n\n // Create new type with auto-generated name if not provided\n const displayName =\n name || slug.replace(/-/g, ' ').replace(/\\b\\w/g, (l) => l.toUpperCase());\n\n return await this.create({\n slug,\n name: displayName,\n });\n }\n\n /**\n * Get a place type by slug\n *\n * @param slug - PlaceType slug to search for\n * @returns PlaceType instance or null if not found\n */\n async getBySlug(slug: string): Promise<PlaceType | null> {\n return await this.get({ slug });\n }\n\n /**\n * Initialize default place types\n *\n * Creates standard types if they don't exist:\n * - country\n * - region (state/province)\n * - city\n * - address\n * - building\n * - room\n * - zone (for abstract/virtual places)\n *\n * @returns Array of created/existing place types\n */\n async initializeDefaults(): Promise<PlaceType[]> {\n const defaults = [\n { slug: 'country', name: 'Country' },\n { slug: 'region', name: 'Region' },\n { slug: 'city', name: 'City' },\n { slug: 'address', name: 'Address' },\n { slug: 'building', name: 'Building' },\n { slug: 'room', name: 'Room' },\n { slug: 'zone', name: 'Zone' },\n { slug: 'point_of_interest', name: 'Point of Interest' },\n ];\n\n const types: PlaceType[] = [];\n for (const def of defaults) {\n const type = await this.getOrCreate(def.slug, def.name);\n types.push(type);\n }\n\n return types;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,IAAM,YAAN,cAAwB,WAAW;CAOxC,OAAe;CAGf;CAGA,4BAAY,IAAI,KAAK;CACrB,4BAAY,IAAI,KAAK;CAErB,YAAY,UAA4B,CAAC,GAAG;EAC1C,MAAM,OAAO;EACb,IAAI,QAAQ,MAAM,KAAK,OAAO,QAAQ;EACtC,IAAI,QAAQ,gBAAgB,KAAA,GAC1B,KAAK,cAAc,QAAQ;EAC7B,IAAI,QAAQ,WAAW,KAAK,YAAY,QAAQ;EAChD,IAAI,QAAQ,WAAW,KAAK,YAAY,QAAQ;CAClD;;;;;;;CAQA,aAAa,UAAU,OAA0C;EAE/D,OAAO;CACT;AACF;AAnC4C,cAA/B,WAAsC,mBAAkB,4BAAA;AAOnE,gBAAA,CALC,MAAM;CACL,UAAU;CACV,aACE;AACJ,CAAC,CAAA,GANU,UAOX,WAAA,QAAA,CAAA;AAGA,gBAAA,CADC,MAAM,EAAE,aAAa,oDAAoD,CAAC,CAAA,GAThE,UAUX,WAAA,eAAA,CAAA;AAVW,YAAN,gBAAA,CANN,KAAK;CACJ,eAAe;CACf,KAAK,EAAE,SAAS;EAAC;EAAQ;EAAO;EAAU;EAAU;CAAQ,EAAE;CAC9D,KAAK,EAAE,SAAS;EAAC;EAAQ;EAAO;CAAQ,EAAE;CAC1C,KAAK,EAAE,cAAc,KAAK;AAC5B,CAAC,CAAA,GACY,SAAA;;;;ACNN,IAAM,sBAAN,cAAkC,eAA0B;CACjE,OAAgB,aAAa;;;;;;;;CAS7B,MAAM,YAAY,MAAc,MAAmC;EAEjE,MAAM,WAAW,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC;EAExC,IAAI,UACF,OAAO;EAIT,MAAM,cACJ,QAAQ,KAAK,QAAQ,MAAM,GAAG,CAAA,CAAE,QAAQ,UAAU,MAAM,EAAE,YAAY,CAAC;EAEzE,OAAO,MAAM,KAAK,OAAO;GACvB;GACA,MAAM;EACR,CAAC;CACH;;;;;;;CAQA,MAAM,UAAU,MAAyC;EACvD,OAAO,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC;CAChC;;;;;;;;;;;;;;;CAgBA,MAAM,qBAA2C;EAC/C,MAAM,WAAW;GACf;IAAE,MAAM;IAAW,MAAM;GAAU;GACnC;IAAE,MAAM;IAAU,MAAM;GAAS;GACjC;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAW,MAAM;GAAU;GACnC;IAAE,MAAM;IAAY,MAAM;GAAW;GACrC;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAQ,MAAM;GAAO;GAC7B;IAAE,MAAM;IAAqB,MAAM;GAAoB;EACzD;EAEA,MAAM,QAAqB,CAAC;EAC5B,KAAA,MAAW,OAAO,UAAU;GAC1B,MAAM,OAAO,MAAM,KAAK,YAAY,IAAI,MAAM,IAAI,IAAI;GACtD,MAAM,KAAK,IAAI;EACjB;EAEA,OAAO;CACT;AACF"}
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export { PLACE_MAIN_ASSET_RELATIONSHIP, Place } from "./models/Place.js";
13
13
  export type { PlaceAssetOptions } from "./models/PlaceAsset.js";
14
14
  export { PlaceAsset } from "./models/PlaceAsset.js";
15
15
  export { PlaceType } from "./models/PlaceType.js";
16
+ export { PlacesLocationsRecipe } from "./recipes.js";
16
17
  export type { DiscoverNearbyOptions, GeoData, LookupOrCreateOptions, PlaceHierarchy, PlaceOptions, PlaceTypeOptions, ResolveTrackPlacesOptions, TrackPlacesResult, TrackPoint, } from "./types.js";
17
18
  export { areCoordinatesNear, calculateDistance, formatCoordinates, generateDisplayName, locationToGeoData, mapLocationTypeToPlaceType, normalizeAddressComponents, parseCoordinates, validateCoordinates, } from "./utils.js";
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,wBAAwB,CAAC;AAGhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAmC,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,mBAAgB,CAAC;AAEtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAoB,CAAC;AAG/C,YAAY,EACV,qBAAqB,EACrB,OAAO,EACP,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,wBAAwB,CAAC;AAGhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAoC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAmC,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,MAAM,mBAAgB,CAAC;AAEtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAqB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAoB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAW,CAAC;AAGlD,YAAY,EACV,qBAAqB,EACrB,OAAO,EACP,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,UAAU,GACX,MAAM,YAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { i as __exportAll, r as PlaceType, t as PlaceTypeCollection } from "./chunks/PlaceTypeCollection-BKbKjUK4.js";
1
+ import { i as __exportAll, r as PlaceType, t as PlaceTypeCollection } from "./chunks/PlaceTypeCollection-52f-CRIf.js";
2
2
  import { areCoordinatesNear, calculateDistance, formatCoordinates, generateDisplayName, locationToGeoData, mapLocationTypeToPlaceType, normalizeAddressComponents, parseCoordinates, validateCoordinates } from "./utils.js";
3
- import { ObjectRegistry, SmrtCollection, SmrtHierarchical, SmrtJunction, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
3
+ import { ObjectRegistry, SmrtCollection, SmrtHierarchical, SmrtJunction, SmrtObject, SmrtRecipe, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
4
4
  import { addOwnedAssetFromCollection, assertAssetLinkable, assertValidOwnedAssetRelationship, assertValidOwnedAssetSortOrder, getOwnedAssetsFromCollection, removeOwnedAssetFromCollection, resolveOwnedAssetsById } from "@happyvertical/smrt-assets";
5
5
  import { TenantScoped, queryGlobal, queryWithGlobals, tenantId } from "@happyvertical/smrt-tenancy";
6
6
  import { getGeoAdapter } from "@happyvertical/geo";
7
7
  //#region src/__smrt-register__.ts
8
- ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-places","packageVersion":"0.57.36","objects":{"@happyvertical/smrt-places:PlaceAssetCollection":{"name":"placeassetcollection","className":"PlaceAssetCollection","qualifiedName":"@happyvertical/smrt-places:PlaceAssetCollection","collection":"placeassets","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceAssetCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"byRight":{"name":"byRight","async":true,"parameters":[{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<TItem[]>","isStatic":false,"isPublic":true},"byLeft":{"name":"byLeft","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<TItem[]>","isStatic":false,"isPublic":true},"attach":{"name":"attach","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionAttachOptions","optional":true}],"returnType":"Promise<TItem>","isStatic":false,"isPublic":true},"detach":{"name":"detach","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setLinks":{"name":"setLinks","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightIds","type":"string[]","optional":false},{"name":"opts","type":"JunctionAttachOptions","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":false,"mcp":false,"cli":false,"tableName":"place_assets"},"extends":"SmrtJunction","extendsTypeArg":"PlaceAsset","exportName":"PlaceAssetCollection","collectionExportName":"PlaceAssetCollectionCollection","schema":{"tableName":"place_assets","ddl":"CREATE TABLE IF NOT EXISTS \\"place_assets\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"place_id\\" UUID NOT NULL,\\n \\"asset_id\\" UUID NOT NULL,\\n \\"relationship\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER NOT NULL DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"place_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"places","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"relationship":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":true,"unique":false,"default":0}},"indexes":[{"name":"place_assets_place_id_asset_id_idx","columns":["place_id","asset_id","relationship"],"unique":true},{"name":"place_assets_slug_context_idx","columns":["slug","context"]},{"name":"place_assets_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"place_assets_asset_id_idx","columns":["asset_id"]}],"version":"adf47666"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceCollection":{"name":"placecollection","className":"PlaceCollection","qualifiedName":"@happyvertical/smrt-places:PlaceCollection","collection":"places","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"lookupOrCreate":{"name":"lookupOrCreate","async":true,"parameters":[{"name":"query","type":"string","optional":false},{"name":"options","type":"LookupOrCreateOptions","optional":true}],"returnType":"Promise<Place | null>","isStatic":false,"isPublic":true},"discoverNearby":{"name":"discoverNearby","async":true,"parameters":[{"name":"latitude","type":"number","optional":false},{"name":"longitude","type":"number","optional":false},{"name":"radiusMeters","type":"number","optional":false},{"name":"options","type":"DiscoverNearbyOptions","optional":true}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"resolveTrackPlaces":{"name":"resolveTrackPlaces","async":true,"parameters":[{"name":"points","type":"ReadonlyArray<TrackPoint>","optional":false},{"name":"options","type":"ResolveTrackPlacesOptions","optional":true}],"returnType":"Promise<TrackPlacesResult>","isStatic":false,"isPublic":true},"getChildren":{"name":"getChildren","async":true,"parameters":[{"name":"parentId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getRootPlaces":{"name":"getRootPlaces","async":true,"parameters":[],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getByType":{"name":"getByType","async":true,"parameters":[{"name":"typeSlug","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getHierarchy":{"name":"getHierarchy","async":true,"parameters":[{"name":"placeId","type":"string","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"searchByProximity":{"name":"searchByProximity","async":true,"parameters":[{"name":"latitude","type":"number","optional":false},{"name":"longitude","type":"number","optional":false},{"name":"radiusKm","type":"number","optional":true}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create","update"]}},"extends":"SmrtCollection","extendsTypeArg":"Place","exportName":"PlaceCollection","collectionExportName":"PlaceCollectionCollection","schema":{"tableName":"places","ddl":"CREATE TABLE IF NOT EXISTS \\"places\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"parent_id\\" UUID,\\n \\"tenant_id\\" UUID,\\n \\"type_id\\" UUID,\\n \\"name\\" TEXT,\\n \\"description\\" TEXT,\\n \\"latitude\\" REAL,\\n \\"longitude\\" REAL,\\n \\"street_number\\" TEXT,\\n \\"street_name\\" TEXT,\\n \\"city\\" TEXT,\\n \\"region\\" TEXT,\\n \\"country\\" TEXT,\\n \\"postal_code\\" TEXT,\\n \\"country_code\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"external_id\\" TEXT,\\n \\"source\\" TEXT,\\n \\"metadata\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"parent_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"places","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"place_types","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"latitude":{"type":"REAL","notNull":false},"longitude":{"type":"REAL","notNull":false},"street_number":{"type":"TEXT","notNull":false},"street_name":{"type":"TEXT","notNull":false},"city":{"type":"TEXT","notNull":false},"region":{"type":"TEXT","notNull":false},"country":{"type":"TEXT","notNull":false},"postal_code":{"type":"TEXT","notNull":false},"country_code":{"type":"TEXT","notNull":false},"timezone":{"type":"TEXT","notNull":false},"external_id":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"metadata":{"type":"TEXT","notNull":false}},"indexes":[{"name":"places_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"places_meta_type_idx","columns":["_meta_type"]},{"name":"places_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"places_parent_id_idx","columns":["parent_id"]},{"name":"places_type_id_idx","columns":["type_id"]}],"version":"f670088c"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceTypeCollection":{"name":"placetypecollection","className":"PlaceTypeCollection","qualifiedName":"@happyvertical/smrt-places:PlaceTypeCollection","collection":"placetypes","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceTypeCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"getOrCreate":{"name":"getOrCreate","async":true,"parameters":[{"name":"slug","type":"string","optional":false},{"name":"name","type":"string","optional":true}],"returnType":"Promise<PlaceType>","isStatic":false,"isPublic":true},"getBySlug":{"name":"getBySlug","async":true,"parameters":[{"name":"slug","type":"string","optional":false}],"returnType":"Promise<PlaceType | null>","isStatic":false,"isPublic":true},"initializeDefaults":{"name":"initializeDefaults","async":true,"parameters":[],"returnType":"Promise<PlaceType[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"PlaceType","exportName":"PlaceTypeCollection","collectionExportName":"PlaceTypeCollectionCollection","schema":{"tableName":"place_types","ddl":"CREATE TABLE IF NOT EXISTS \\"place_types\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false}},"indexes":[{"name":"place_types_slug_context_meta_type_idx","columns":["slug","context","_meta_type"],"unique":true},{"name":"place_types_meta_type_idx","columns":["_meta_type"]},{"name":"place_types_created_at_idx","columns":["created_at"]}],"version":"8c3bb691"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:Place":{"name":"place","className":"Place","qualifiedName":"@happyvertical/smrt-places:Place","collection":"places","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/Place.ts","packageName":"@happyvertical/smrt-places","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"parentId":{"type":"foreignKey","required":false,"related":"Place","_meta":{"nullable":true}},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"typeId":{"type":"foreignKey","required":false,"related":"PlaceType"},"name":{"type":"text","required":false},"description":{"type":"text","required":false},"latitude":{"type":"decimal","required":false,"_meta":{}},"longitude":{"type":"decimal","required":false,"_meta":{}},"streetNumber":{"type":"text","required":false},"streetName":{"type":"text","required":false},"city":{"type":"text","required":false},"region":{"type":"text","required":false},"country":{"type":"text","required":false},"postalCode":{"type":"text","required":false},"countryCode":{"type":"text","required":false},"timezone":{"type":"text","required":false},"externalId":{"type":"text","required":false},"source":{"type":"text","required":false},"metadata":{"type":"text","required":false},"createdAt":{"type":"text","required":false},"updatedAt":{"type":"text","required":false}},"methods":{"getParent":{"name":"getParent","async":true,"parameters":[],"returnType":"Promise<this | null>","isStatic":false,"isPublic":true},"getChildren":{"name":"getChildren","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getAncestors":{"name":"getAncestors","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getDescendants":{"name":"getDescendants","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getHierarchy":{"name":"getHierarchy","async":true,"parameters":[],"returnType":"Promise<HierarchyView<this>>","isStatic":false,"isPublic":true},"moveTo":{"name":"moveTo","async":true,"parameters":[{"name":"newParent","type":"this | string | null","optional":false,"unionBranches":[{"type":"this"},{"type":"string"},{"type":"null"}]}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getGeoData":{"name":"getGeoData","async":false,"parameters":[],"returnType":"GeoData","isStatic":false,"isPublic":true},"hasCoordinates":{"name":"hasCoordinates","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"updates","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getType":{"name":"getType","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMainAsset":{"name":"getMainAsset","async":true,"parameters":[],"returnType":"Promise<Asset | null>","isStatic":false,"isPublic":true},"setMainAsset":{"name":"setMainAsset","async":true,"parameters":[{"name":"asset","type":"Asset | null","optional":false,"unionBranches":[{"type":"Asset"},{"type":"null"}]}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtHierarchical","exportName":"Place","collectionExportName":"PlaceCollection","displayLabelField":"name","schema":{"tableName":"places","ddl":"CREATE TABLE IF NOT EXISTS \\"places\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"parent_id\\" UUID,\\n \\"tenant_id\\" UUID,\\n \\"type_id\\" UUID,\\n \\"name\\" TEXT,\\n \\"description\\" TEXT,\\n \\"latitude\\" REAL,\\n \\"longitude\\" REAL,\\n \\"street_number\\" TEXT,\\n \\"street_name\\" TEXT,\\n \\"city\\" TEXT,\\n \\"region\\" TEXT,\\n \\"country\\" TEXT,\\n \\"postal_code\\" TEXT,\\n \\"country_code\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"external_id\\" TEXT,\\n \\"source\\" TEXT,\\n \\"metadata\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"parent_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"places","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"place_types","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"latitude":{"type":"REAL","notNull":false},"longitude":{"type":"REAL","notNull":false},"street_number":{"type":"TEXT","notNull":false},"street_name":{"type":"TEXT","notNull":false},"city":{"type":"TEXT","notNull":false},"region":{"type":"TEXT","notNull":false},"country":{"type":"TEXT","notNull":false},"postal_code":{"type":"TEXT","notNull":false},"country_code":{"type":"TEXT","notNull":false},"timezone":{"type":"TEXT","notNull":false},"external_id":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"metadata":{"type":"TEXT","notNull":false}},"indexes":[{"name":"places_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"places_meta_type_idx","columns":["_meta_type"]},{"name":"places_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"places_parent_id_idx","columns":["parent_id"]},{"name":"places_type_id_idx","columns":["type_id"]}],"version":"f670088c"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceAsset":{"name":"placeasset","className":"PlaceAsset","qualifiedName":"@happyvertical/smrt-places:PlaceAsset","collection":"placeassets","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/PlaceAsset.ts","packageName":"@happyvertical/smrt-places","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"placeId":{"type":"foreignKey","required":true,"related":"Place","_meta":{"required":true,"onDelete":"CASCADE"}},"assetId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-assets:Asset","_meta":{"onDelete":"CASCADE"}},"relationship":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":true,"default":0}},"methods":{},"decoratorConfig":{"tableName":"place_assets","conflictColumns":["place_id","asset_id","relationship"],"api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"optional"}},"extends":"SmrtObject","exportName":"PlaceAsset","collectionExportName":"PlaceAssetCollection","validationRules":[{"field":"placeId","rule":"required","fieldType":"foreignKey"},{"field":"assetId","rule":"required","fieldType":"crossPackageRef"},{"field":"relationship","rule":"required","fieldType":"text"},{"field":"sortOrder","rule":"required","fieldType":"integer"}],"schema":{"tableName":"place_assets","ddl":"CREATE TABLE IF NOT EXISTS \\"place_assets\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"place_id\\" UUID NOT NULL,\\n \\"asset_id\\" UUID NOT NULL,\\n \\"relationship\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER NOT NULL DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"place_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"places","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"relationship":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":true,"unique":false,"default":0}},"indexes":[{"name":"place_assets_place_id_asset_id_idx","columns":["place_id","asset_id","relationship"],"unique":true},{"name":"place_assets_slug_context_idx","columns":["slug","context"]},{"name":"place_assets_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"place_assets_asset_id_idx","columns":["asset_id"]}],"version":"adf47666"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceType":{"name":"placetype","className":"PlaceType","qualifiedName":"@happyvertical/smrt-places:PlaceType","collection":"placetypes","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/PlaceType.ts","packageName":"@happyvertical/smrt-places","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"name":{"type":"text","required":true,"default":"","_meta":{"required":true}},"description":{"type":"text","required":false},"createdAt":{"type":"text","required":false},"updatedAt":{"type":"text","required":false}},"methods":{"getBySlug":{"name":"getBySlug","async":true,"parameters":[{"name":"_slug","type":"string","optional":false}],"returnType":"Promise<PlaceType | null>","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"PlaceType","collectionExportName":"PlaceTypeCollection","displayLabelField":"name","validationRules":[{"field":"name","rule":"required","fieldType":"text"}],"schema":{"tableName":"place_types","ddl":"CREATE TABLE IF NOT EXISTS \\"place_types\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false}},"indexes":[{"name":"place_types_slug_context_meta_type_idx","columns":["slug","context","_meta_type"],"unique":true},{"name":"place_types_meta_type_idx","columns":["_meta_type"]},{"name":"place_types_created_at_idx","columns":["created_at"]}],"version":"8c3bb691"},"importPath":"@happyvertical/smrt-places"}},"moduleType":"smrt","smrtDependencies":["@happyvertical/smrt-assets","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624","#3627"],"reason":"geo -> cache -> redis, node:zlib; url-signature node:crypto","via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
8
+ ObjectRegistry.registerPackageManifest(JSON.parse(`{"version":"1.0.0","timestamp":0,"packageName":"@happyvertical/smrt-places","packageVersion":"0.57.38","objects":{"@happyvertical/smrt-places:PlaceAssetCollection":{"name":"placeassetcollection","className":"PlaceAssetCollection","qualifiedName":"@happyvertical/smrt-places:PlaceAssetCollection","collection":"placeassets","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceAssetCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"byRight":{"name":"byRight","async":true,"parameters":[{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<TItem[]>","isStatic":false,"isPublic":true},"byLeft":{"name":"byLeft","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<TItem[]>","isStatic":false,"isPublic":true},"attach":{"name":"attach","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionAttachOptions","optional":true}],"returnType":"Promise<TItem>","isStatic":false,"isPublic":true},"detach":{"name":"detach","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightId","type":"string","optional":false},{"name":"opts","type":"JunctionFilterOptions","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"setLinks":{"name":"setLinks","async":true,"parameters":[{"name":"leftId","type":"string","optional":false},{"name":"rightIds","type":"string[]","optional":false},{"name":"opts","type":"JunctionAttachOptions","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":false,"mcp":false,"cli":false,"tableName":"place_assets"},"extends":"SmrtJunction","extendsTypeArg":"PlaceAsset","exportName":"PlaceAssetCollection","collectionExportName":"PlaceAssetCollectionCollection","schema":{"tableName":"place_assets","ddl":"CREATE TABLE IF NOT EXISTS \\"place_assets\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"place_id\\" UUID NOT NULL,\\n \\"asset_id\\" UUID NOT NULL,\\n \\"relationship\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER NOT NULL DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"place_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"places","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"relationship":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":true,"unique":false,"default":0}},"indexes":[{"name":"place_assets_place_id_asset_id_idx","columns":["place_id","asset_id","relationship"],"unique":true},{"name":"place_assets_slug_context_idx","columns":["slug","context"]},{"name":"place_assets_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"place_assets_asset_id_idx","columns":["asset_id"]}],"version":"adf47666"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceCollection":{"name":"placecollection","className":"PlaceCollection","qualifiedName":"@happyvertical/smrt-places:PlaceCollection","collection":"places","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"lookupOrCreate":{"name":"lookupOrCreate","async":true,"parameters":[{"name":"query","type":"string","optional":false},{"name":"options","type":"LookupOrCreateOptions","optional":true}],"returnType":"Promise<Place | null>","isStatic":false,"isPublic":true},"discoverNearby":{"name":"discoverNearby","async":true,"parameters":[{"name":"latitude","type":"number","optional":false},{"name":"longitude","type":"number","optional":false},{"name":"radiusMeters","type":"number","optional":false},{"name":"options","type":"DiscoverNearbyOptions","optional":true}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"resolveTrackPlaces":{"name":"resolveTrackPlaces","async":true,"parameters":[{"name":"points","type":"ReadonlyArray<TrackPoint>","optional":false},{"name":"options","type":"ResolveTrackPlacesOptions","optional":true}],"returnType":"Promise<TrackPlacesResult>","isStatic":false,"isPublic":true},"getChildren":{"name":"getChildren","async":true,"parameters":[{"name":"parentId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getRootPlaces":{"name":"getRootPlaces","async":true,"parameters":[],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getByType":{"name":"getByType","async":true,"parameters":[{"name":"typeSlug","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"getHierarchy":{"name":"getHierarchy","async":true,"parameters":[{"name":"placeId","type":"string","optional":false}],"returnType":"any","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"placeId","type":"string","optional":false},{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"searchByProximity":{"name":"searchByProximity","async":true,"parameters":[{"name":"latitude","type":"number","optional":false},{"name":"longitude","type":"number","optional":false},{"name":"radiusKm","type":"number","optional":true}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findByTenant":{"name":"findByTenant","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findGlobal":{"name":"findGlobal","async":true,"parameters":[],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true},"findWithGlobals":{"name":"findWithGlobals","async":true,"parameters":[{"name":"tenantId","type":"string","optional":false}],"returnType":"Promise<Place[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create","update"]}},"extends":"SmrtCollection","extendsTypeArg":"Place","exportName":"PlaceCollection","collectionExportName":"PlaceCollectionCollection","schema":{"tableName":"places","ddl":"CREATE TABLE IF NOT EXISTS \\"places\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"parent_id\\" UUID,\\n \\"tenant_id\\" UUID,\\n \\"type_id\\" UUID,\\n \\"name\\" TEXT,\\n \\"description\\" TEXT,\\n \\"latitude\\" REAL,\\n \\"longitude\\" REAL,\\n \\"street_number\\" TEXT,\\n \\"street_name\\" TEXT,\\n \\"city\\" TEXT,\\n \\"region\\" TEXT,\\n \\"country\\" TEXT,\\n \\"postal_code\\" TEXT,\\n \\"country_code\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"external_id\\" TEXT,\\n \\"source\\" TEXT,\\n \\"metadata\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"parent_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"places","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"place_types","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"latitude":{"type":"REAL","notNull":false},"longitude":{"type":"REAL","notNull":false},"street_number":{"type":"TEXT","notNull":false},"street_name":{"type":"TEXT","notNull":false},"city":{"type":"TEXT","notNull":false},"region":{"type":"TEXT","notNull":false},"country":{"type":"TEXT","notNull":false},"postal_code":{"type":"TEXT","notNull":false},"country_code":{"type":"TEXT","notNull":false},"timezone":{"type":"TEXT","notNull":false},"external_id":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"metadata":{"type":"TEXT","notNull":false}},"indexes":[{"name":"places_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"places_meta_type_idx","columns":["_meta_type"]},{"name":"places_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"places_parent_id_idx","columns":["parent_id"]},{"name":"places_type_id_idx","columns":["type_id"]}],"version":"f670088c"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceTypeCollection":{"name":"placetypecollection","className":"PlaceTypeCollection","qualifiedName":"@happyvertical/smrt-places:PlaceTypeCollection","collection":"placetypes","filePath":"/home/runner/work/smrt/smrt/packages/places/src/collections/PlaceTypeCollection.ts","packageName":"@happyvertical/smrt-places","fields":{},"methods":{"getOrCreate":{"name":"getOrCreate","async":true,"parameters":[{"name":"slug","type":"string","optional":false},{"name":"name","type":"string","optional":true}],"returnType":"Promise<PlaceType>","isStatic":false,"isPublic":true},"getBySlug":{"name":"getBySlug","async":true,"parameters":[{"name":"slug","type":"string","optional":false}],"returnType":"Promise<PlaceType | null>","isStatic":false,"isPublic":true},"initializeDefaults":{"name":"initializeDefaults","async":true,"parameters":[],"returnType":"Promise<PlaceType[]>","isStatic":false,"isPublic":true}},"decoratorConfig":{"api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create"]}},"extends":"SmrtCollection","extendsTypeArg":"PlaceType","exportName":"PlaceTypeCollection","collectionExportName":"PlaceTypeCollectionCollection","schema":{"tableName":"place_types","ddl":"CREATE TABLE IF NOT EXISTS \\"place_types\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false}},"indexes":[{"name":"place_types_slug_context_meta_type_idx","columns":["slug","context","_meta_type"],"unique":true},{"name":"place_types_meta_type_idx","columns":["_meta_type"]},{"name":"place_types_created_at_idx","columns":["created_at"]}],"version":"8c3bb691"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:Place":{"name":"place","className":"Place","qualifiedName":"@happyvertical/smrt-places:Place","collection":"places","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/Place.ts","packageName":"@happyvertical/smrt-places","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"parentId":{"type":"foreignKey","required":false,"related":"Place","_meta":{"nullable":true}},"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"typeId":{"type":"foreignKey","required":false,"related":"PlaceType","description":"What kind of place this is, such as a building, a room or a storage zone.","_meta":{"description":"What kind of place this is, such as a building, a room or a storage zone."}},"name":{"type":"text","required":false,"description":"What the place is called, such as \\"Main warehouse\\" or \\"Aisle 4\\".","_meta":{"description":"What the place is called, such as \\"Main warehouse\\" or \\"Aisle 4\\"."}},"description":{"type":"text","required":false,"description":"A few words about the place and what happens there.","_meta":{"description":"A few words about the place and what happens there."}},"latitude":{"type":"decimal","required":false,"description":"How far north or south the place is on a map. Leave empty for a place that is not on a map.","_meta":{"description":"How far north or south the place is on a map. Leave empty for a place that is not on a map."}},"longitude":{"type":"decimal","required":false,"description":"How far east or west the place is on a map. Leave empty for a place that is not on a map.","_meta":{"description":"How far east or west the place is on a map. Leave empty for a place that is not on a map."}},"streetNumber":{"type":"text","required":false,"description":"The number of the building on its street.","_meta":{"description":"The number of the building on its street."}},"streetName":{"type":"text","required":false,"description":"The name of the street the place is on.","_meta":{"description":"The name of the street the place is on."}},"city":{"type":"text","required":false,"description":"The town or city the place is in.","_meta":{"description":"The town or city the place is in."}},"region":{"type":"text","required":false,"description":"The state, province or region the place is in.","_meta":{"description":"The state, province or region the place is in."}},"country":{"type":"text","required":false,"description":"The country the place is in.","_meta":{"description":"The country the place is in."}},"postalCode":{"type":"text","required":false,"description":"The postal or zip code of the address.","_meta":{"description":"The postal or zip code of the address."}},"countryCode":{"type":"text","required":false,"description":"The short two-letter code for the country, such as CA or US.","_meta":{"description":"The short two-letter code for the country, such as CA or US."}},"timezone":{"type":"text","required":false,"description":"The time zone the place keeps, such as America/Toronto.","_meta":{"description":"The time zone the place keeps, such as America/Toronto."}},"externalId":{"type":"text","required":false,"description":"The reference the map provider uses for this place, filled in when the app looks it up.","_meta":{"description":"The reference the map provider uses for this place, filled in when the app looks it up."}},"source":{"type":"text","required":false,"description":"Which map provider the place was looked up from, if any.","_meta":{"description":"Which map provider the place was looked up from, if any."}},"metadata":{"type":"text","required":false},"createdAt":{"type":"text","required":false},"updatedAt":{"type":"text","required":false}},"methods":{"getParent":{"name":"getParent","async":true,"parameters":[],"returnType":"Promise<this | null>","isStatic":false,"isPublic":true},"getChildren":{"name":"getChildren","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getAncestors":{"name":"getAncestors","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getDescendants":{"name":"getDescendants","async":true,"parameters":[],"returnType":"Promise<this[]>","isStatic":false,"isPublic":true},"getHierarchy":{"name":"getHierarchy","async":true,"parameters":[],"returnType":"Promise<HierarchyView<this>>","isStatic":false,"isPublic":true},"moveTo":{"name":"moveTo","async":true,"parameters":[{"name":"newParent","type":"this | string | null","optional":false,"unionBranches":[{"type":"this"},{"type":"string"},{"type":"null"}]}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getGeoData":{"name":"getGeoData","async":false,"parameters":[],"returnType":"GeoData","isStatic":false,"isPublic":true},"hasCoordinates":{"name":"hasCoordinates","async":false,"parameters":[],"returnType":"boolean","isStatic":false,"isPublic":true},"getMetadata":{"name":"getMetadata","async":false,"parameters":[],"returnType":"Record<string, unknown>","isStatic":false,"isPublic":true},"setMetadata":{"name":"setMetadata","async":false,"parameters":[{"name":"data","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"updateMetadata":{"name":"updateMetadata","async":false,"parameters":[{"name":"updates","type":"Record<string, unknown>","optional":false}],"returnType":"void","isStatic":false,"isPublic":true},"getType":{"name":"getType","async":true,"parameters":[],"returnType":"any","isStatic":false,"isPublic":true},"getAssets":{"name":"getAssets","async":true,"parameters":[{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<Asset[]>","isStatic":false,"isPublic":true},"addAsset":{"name":"addAsset","async":true,"parameters":[{"name":"asset","type":"Asset","optional":false},{"name":"relationship","type":"any","optional":true,"default":"attachment"},{"name":"sortOrder","type":"any","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"getMainAsset":{"name":"getMainAsset","async":true,"parameters":[],"returnType":"Promise<Asset | null>","isStatic":false,"isPublic":true},"setMainAsset":{"name":"setMainAsset","async":true,"parameters":[{"name":"asset","type":"Asset | null","optional":false,"unionBranches":[{"type":"Asset"},{"type":"null"}]}],"returnType":"Promise<void>","isStatic":false,"isPublic":true},"removeAsset":{"name":"removeAsset","async":true,"parameters":[{"name":"assetId","type":"string","optional":false},{"name":"relationship","type":"string","optional":true}],"returnType":"Promise<void>","isStatic":false,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create","update"]},"cli":{"skipApiCheck":true},"tenantScoped":{"mode":"optional"},"conflictColumns":["tenant_id","slug","context","_meta_type"]},"extends":"SmrtHierarchical","exportName":"Place","collectionExportName":"PlaceCollection","displayLabelField":"name","schema":{"tableName":"places","ddl":"CREATE TABLE IF NOT EXISTS \\"places\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"parent_id\\" UUID,\\n \\"tenant_id\\" UUID,\\n \\"type_id\\" UUID,\\n \\"name\\" TEXT,\\n \\"description\\" TEXT,\\n \\"latitude\\" REAL,\\n \\"longitude\\" REAL,\\n \\"street_number\\" TEXT,\\n \\"street_name\\" TEXT,\\n \\"city\\" TEXT,\\n \\"region\\" TEXT,\\n \\"country\\" TEXT,\\n \\"postal_code\\" TEXT,\\n \\"country_code\\" TEXT,\\n \\"timezone\\" TEXT,\\n \\"external_id\\" TEXT,\\n \\"source\\" TEXT,\\n \\"metadata\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"parent_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"places","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false},"type_id":{"type":"UUID","referenceKind":"foreignKey","notNull":false,"foreignKey":{"table":"place_types","column":"id","onDelete":"NO ACTION","onUpdate":"CASCADE"}},"name":{"type":"TEXT","notNull":false},"description":{"type":"TEXT","notNull":false},"latitude":{"type":"REAL","notNull":false},"longitude":{"type":"REAL","notNull":false},"street_number":{"type":"TEXT","notNull":false},"street_name":{"type":"TEXT","notNull":false},"city":{"type":"TEXT","notNull":false},"region":{"type":"TEXT","notNull":false},"country":{"type":"TEXT","notNull":false},"postal_code":{"type":"TEXT","notNull":false},"country_code":{"type":"TEXT","notNull":false},"timezone":{"type":"TEXT","notNull":false},"external_id":{"type":"TEXT","notNull":false},"source":{"type":"TEXT","notNull":false},"metadata":{"type":"TEXT","notNull":false}},"indexes":[{"name":"places_slug_context_meta_type_idx","columns":["tenant_id","slug","context","_meta_type"],"unique":true,"nullsNotDistinct":true},{"name":"places_meta_type_idx","columns":["_meta_type"]},{"name":"places_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"places_parent_id_idx","columns":["parent_id"]},{"name":"places_type_id_idx","columns":["type_id"]}],"version":"f670088c"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceAsset":{"name":"placeasset","className":"PlaceAsset","qualifiedName":"@happyvertical/smrt-places:PlaceAsset","collection":"placeassets","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/PlaceAsset.ts","packageName":"@happyvertical/smrt-places","fields":{"tenantId":{"type":"text","required":false,"_meta":{"sqlType":"UUID","nullable":true,"__tenancy":{"isTenantIdField":true,"autoFilter":true,"required":false,"autoPopulate":true,"nullable":true,"mode":"optional","field":"tenantId","allowSuperAdminBypass":false}}},"placeId":{"type":"foreignKey","required":true,"related":"Place","_meta":{"required":true,"onDelete":"CASCADE"}},"assetId":{"type":"crossPackageRef","required":true,"related":"@happyvertical/smrt-assets:Asset","_meta":{"onDelete":"CASCADE"}},"relationship":{"type":"text","required":true,"_meta":{"required":true}},"sortOrder":{"type":"integer","required":true,"default":0}},"methods":{},"decoratorConfig":{"tableName":"place_assets","conflictColumns":["place_id","asset_id","relationship"],"api":false,"mcp":false,"cli":false,"tenantScoped":{"mode":"optional"}},"extends":"SmrtObject","exportName":"PlaceAsset","collectionExportName":"PlaceAssetCollection","validationRules":[{"field":"placeId","rule":"required","fieldType":"foreignKey"},{"field":"assetId","rule":"required","fieldType":"crossPackageRef"},{"field":"relationship","rule":"required","fieldType":"text"},{"field":"sortOrder","rule":"required","fieldType":"integer"}],"schema":{"tableName":"place_assets","ddl":"CREATE TABLE IF NOT EXISTS \\"place_assets\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"tenant_id\\" UUID,\\n \\"place_id\\" UUID NOT NULL,\\n \\"asset_id\\" UUID NOT NULL,\\n \\"relationship\\" TEXT NOT NULL,\\n \\"sort_order\\" INTEGER NOT NULL DEFAULT 0\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"tenant_id":{"type":"UUID","referenceKind":"tenantId","notNull":false,"unique":false},"place_id":{"type":"UUID","referenceKind":"foreignKey","notNull":true,"unique":false,"foreignKey":{"table":"places","column":"id","onDelete":"CASCADE","onUpdate":"CASCADE"}},"asset_id":{"type":"UUID","referenceKind":"crossPackageRef","notNull":true,"unique":false},"relationship":{"type":"TEXT","notNull":true,"unique":false},"sort_order":{"type":"INTEGER","notNull":true,"unique":false,"default":0}},"indexes":[{"name":"place_assets_place_id_asset_id_idx","columns":["place_id","asset_id","relationship"],"unique":true},{"name":"place_assets_slug_context_idx","columns":["slug","context"]},{"name":"place_assets_tenant_id_created_at_idx","columns":["tenant_id","created_at"]},{"name":"place_assets_asset_id_idx","columns":["asset_id"]}],"version":"adf47666"},"importPath":"@happyvertical/smrt-places"},"@happyvertical/smrt-places:PlaceType":{"name":"placetype","className":"PlaceType","qualifiedName":"@happyvertical/smrt-places:PlaceType","collection":"placetypes","filePath":"/home/runner/work/smrt/smrt/packages/places/src/models/PlaceType.ts","packageName":"@happyvertical/smrt-places","fields":{"created_at":{"type":"datetime","required":false},"updated_at":{"type":"datetime","required":false},"name":{"type":"text","required":true,"default":"","description":"The name of the kind of place, such as \\"Building\\", \\"Room\\" or \\"Zone\\".","_meta":{"required":true,"description":"The name of the kind of place, such as \\"Building\\", \\"Room\\" or \\"Zone\\"."}},"description":{"type":"text","required":false,"description":"A few words about when to use this kind of place.","_meta":{"description":"A few words about when to use this kind of place."}},"createdAt":{"type":"text","required":false},"updatedAt":{"type":"text","required":false}},"methods":{"getBySlug":{"name":"getBySlug","async":true,"parameters":[{"name":"_slug","type":"string","optional":false}],"returnType":"Promise<PlaceType | null>","isStatic":true,"isPublic":true}},"decoratorConfig":{"tableStrategy":"sti","api":{"include":["list","get","create","update","delete"]},"mcp":{"include":["list","get","create"]},"cli":{"skipApiCheck":true}},"extends":"SmrtObject","exportName":"PlaceType","collectionExportName":"PlaceTypeCollection","displayLabelField":"name","validationRules":[{"field":"name","rule":"required","fieldType":"text"}],"schema":{"tableName":"place_types","ddl":"CREATE TABLE IF NOT EXISTS \\"place_types\\" (\\n \\"id\\" UUID PRIMARY KEY NOT NULL,\\n \\"slug\\" TEXT NOT NULL,\\n \\"context\\" TEXT NOT NULL DEFAULT '',\\n \\"_meta_type\\" TEXT NOT NULL,\\n \\"_meta_data\\" JSON,\\n \\"created_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"updated_at\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\"name\\" TEXT DEFAULT '',\\n \\"description\\" TEXT\\n);","columns":{"id":{"type":"UUID","primaryKey":true,"referenceKind":"id","notNull":true},"slug":{"type":"TEXT","notNull":true},"context":{"type":"TEXT","notNull":true,"default":""},"_meta_type":{"type":"TEXT","notNull":true},"_meta_data":{"type":"JSON","notNull":false},"created_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"updated_at":{"type":"TIMESTAMP","notNull":true,"default":"current_timestamp"},"name":{"type":"TEXT","notNull":false,"default":""},"description":{"type":"TEXT","notNull":false}},"indexes":[{"name":"place_types_slug_context_meta_type_idx","columns":["slug","context","_meta_type"],"unique":true},{"name":"place_types_meta_type_idx","columns":["_meta_type"]},{"name":"place_types_created_at_idx","columns":["created_at"]}],"version":"8c3bb691"},"importPath":"@happyvertical/smrt-places"}},"moduleType":"smrt","recipes":[{"id":"places.locations","className":"PlacesLocationsRecipe","label":"Places","summary":"Keep a list of the places your work happens, such as sites, buildings, rooms and storage zones, one inside another.","synonyms":["places","locations","sites","buildings","rooms","addresses","warehouses"],"models":["@happyvertical/smrt-places:Place","@happyvertical/smrt-places:PlaceType"],"nav":[{"label":"Places","model":"@happyvertical/smrt-places:Place","icon":"home","description":"Every site, building, room and zone, with its address and what it is inside.","noun":"place"},{"label":"Place types","model":"@happyvertical/smrt-places:PlaceType","icon":"tag","description":"The kinds of place you keep, such as building or room.","noun":"place type"}],"requires":[],"section":{"id":"places","label":"Locations","icon":"home","description":"The places your work happens."},"options":{"@happyvertical/smrt-places:Place":{"fields":{"name":{"order":1},"typeId":{"label":"Type","order":2},"parentId":{"label":"Inside","help":"The larger place this one is part of, such as the building a room is in.","order":3},"description":{"order":4},"streetNumber":{"label":"Street number","order":5},"streetName":{"label":"Street name","order":6},"city":{"order":7},"region":{"order":8},"country":{"order":9},"postalCode":{"label":"Postal code","order":10},"latitude":{"visibility":"advanced"},"longitude":{"visibility":"advanced"},"countryCode":{"label":"Country code","visibility":"advanced"},"timezone":{"label":"Time zone","visibility":"advanced"},"externalId":{"label":"Map reference","visibility":"advanced"},"source":{"label":"Map provider","visibility":"advanced"},"metadata":{"visibility":"hidden"},"tenantId":{"visibility":"hidden"},"createdAt":{"visibility":"hidden"},"updatedAt":{"visibility":"hidden"}}},"@happyvertical/smrt-places:PlaceType":{"fields":{"name":{"order":1},"description":{"order":2},"createdAt":{"visibility":"hidden"},"updatedAt":{"visibility":"hidden"}}}},"help":{"markdown":"## Overview\\n\\nPlaces is where you keep the sites, buildings, rooms and storage zones your\\nwork happens in. Each place has a name, a type and, when it is somewhere real,\\nan address. A place can sit inside a larger one, so a room belongs to a\\nbuilding and a shelf to a room, and you can follow that chain either way. A\\nplace does not have to be on a map: a storage zone or a work area with no\\naddress is fine.\\n\\n## Tasks\\n\\n### Add a place\\n\\n1. Open the list of places and choose **New**.\\n2. Type the **{field:Place.name}**, for example \\"Main warehouse\\".\\n3. Pick its **{field:Place.typeId}**, such as building or room. Add a type first if the one you need is missing.\\n4. Fill in the address: the **{field:Place.streetNumber}**, **{field:Place.streetName}**, **{field:Place.city}**, **{field:Place.region}**, **{field:Place.country}** and **{field:Place.postalCode}**. Leave these empty for a place that is not on a map.\\n5. Save. When your app searches a map for a place, it can add the place for you with the address filled in from the map provider.\\n\\n### Put a place inside another\\n\\n1. Open the place and choose to edit it.\\n2. In **{field:Place.parentId}**, pick the larger place it belongs to, such as the building a room is in.\\n3. Save. The place now shows up under the one you chose.\\n\\n### Change or remove a place\\n\\n1. Open the place and choose to edit it.\\n2. Change the **{field:Place.name}**, **{field:Place.description}** or address, then save.\\n3. To remove a place you no longer use, open it and choose to delete it. Move anything inside it first.\\n\\n### Add a place type\\n\\n1. Open the list of place types and choose **New**.\\n2. Type the **{field:PlaceType.name}**, for example \\"Room\\".\\n3. Add a **{field:PlaceType.description}** so others know when to use it.\\n4. Save. The type can now be picked when you add a place.\\n","fieldRefs":["Place.city","Place.country","Place.description","Place.name","Place.parentId","Place.postalCode","Place.region","Place.streetName","Place.streetNumber","Place.typeId","PlaceType.description","PlaceType.name"]},"demo":{"mode":"server","reasons":["Needs a server because its package does not build for a browser: geo -> cache -> redis, node:zlib; url-signature node:crypto; and its package depends on @happyvertical/smrt-tenancy, which do not build for a browser (#3624, #3627)."]}}],"smrtDependencies":["@happyvertical/smrt-assets","@happyvertical/smrt-core","@happyvertical/smrt-tenancy"],"browser":{"status":"server-only","issues":["#3624","#3627"],"reason":"geo -> cache -> redis, node:zlib; url-signature node:crypto","via":["@happyvertical/smrt-tenancy"]},"stampsConstructors":true}`));
9
9
  //#endregion
10
10
  //#region src/models/PlaceAsset.ts
11
11
  var __defProp$2 = Object.defineProperty;
@@ -236,7 +236,7 @@ var Place = class extends SmrtHierarchical {
236
236
  */
237
237
  async getType() {
238
238
  if (!this.typeId) return null;
239
- const { PlaceTypeCollection } = await import("./chunks/PlaceTypeCollection-BKbKjUK4.js").then((n) => n.n);
239
+ const { PlaceTypeCollection } = await import("./chunks/PlaceTypeCollection-52f-CRIf.js").then((n) => n.n);
240
240
  return await (await PlaceTypeCollection.create(this.options)).get({ id: this.typeId });
241
241
  }
242
242
  async getPlaceAssetCollection() {
@@ -289,9 +289,27 @@ var Place = class extends SmrtHierarchical {
289
289
  };
290
290
  __publicField(Place, "__smrtPackage__", "@happyvertical/smrt-places");
291
291
  __decorateClass([tenantId({ nullable: true })], Place.prototype, "tenantId", 2);
292
- __decorateClass([foreignKey("PlaceType")], Place.prototype, "typeId", 2);
293
- __decorateClass([field({ type: "decimal" })], Place.prototype, "latitude", 2);
294
- __decorateClass([field({ type: "decimal" })], Place.prototype, "longitude", 2);
292
+ __decorateClass([field({ description: "What kind of place this is, such as a building, a room or a storage zone." }), foreignKey("PlaceType")], Place.prototype, "typeId", 2);
293
+ __decorateClass([field({ description: "What the place is called, such as \"Main warehouse\" or \"Aisle 4\"." })], Place.prototype, "name", 2);
294
+ __decorateClass([field({ description: "A few words about the place and what happens there." })], Place.prototype, "description", 2);
295
+ __decorateClass([field({
296
+ type: "decimal",
297
+ description: "How far north or south the place is on a map. Leave empty for a place that is not on a map."
298
+ })], Place.prototype, "latitude", 2);
299
+ __decorateClass([field({
300
+ type: "decimal",
301
+ description: "How far east or west the place is on a map. Leave empty for a place that is not on a map."
302
+ })], Place.prototype, "longitude", 2);
303
+ __decorateClass([field({ description: "The number of the building on its street." })], Place.prototype, "streetNumber", 2);
304
+ __decorateClass([field({ description: "The name of the street the place is on." })], Place.prototype, "streetName", 2);
305
+ __decorateClass([field({ description: "The town or city the place is in." })], Place.prototype, "city", 2);
306
+ __decorateClass([field({ description: "The state, province or region the place is in." })], Place.prototype, "region", 2);
307
+ __decorateClass([field({ description: "The country the place is in." })], Place.prototype, "country", 2);
308
+ __decorateClass([field({ description: "The postal or zip code of the address." })], Place.prototype, "postalCode", 2);
309
+ __decorateClass([field({ description: "The short two-letter code for the country, such as CA or US." })], Place.prototype, "countryCode", 2);
310
+ __decorateClass([field({ description: "The time zone the place keeps, such as America/Toronto." })], Place.prototype, "timezone", 2);
311
+ __decorateClass([field({ description: "The reference the map provider uses for this place, filled in when the app looks it up." })], Place.prototype, "externalId", 2);
312
+ __decorateClass([field({ description: "Which map provider the place was looked up from, if any." })], Place.prototype, "source", 2);
295
313
  Place = __decorateClass([TenantScoped({ mode: "optional" }), smrt({
296
314
  tableStrategy: "sti",
297
315
  api: { include: [
@@ -709,6 +727,101 @@ var PlaceCollection = class extends SmrtCollection {
709
727
  }
710
728
  };
711
729
  //#endregion
712
- export { PLACE_MAIN_ASSET_RELATIONSHIP, Place, PlaceAsset, PlaceAssetCollection, PlaceCollection, PlaceType, PlaceTypeCollection, areCoordinatesNear, calculateDistance, formatCoordinates, generateDisplayName, locationToGeoData, mapLocationTypeToPlaceType, normalizeAddressComponents, parseCoordinates, validateCoordinates };
730
+ //#region src/recipes.ts
731
+ var PlacesLocationsRecipe = class extends SmrtRecipe {
732
+ static id = "places.locations";
733
+ static help = "./locations.recipe.md";
734
+ static label = "Places";
735
+ static summary = "Keep a list of the places your work happens, such as sites, buildings, rooms and storage zones, one inside another.";
736
+ static synonyms = [
737
+ "places",
738
+ "locations",
739
+ "sites",
740
+ "buildings",
741
+ "rooms",
742
+ "addresses",
743
+ "warehouses"
744
+ ];
745
+ static section = {
746
+ id: "places",
747
+ label: "Locations",
748
+ icon: "home",
749
+ description: "The places your work happens."
750
+ };
751
+ static models = [Place, PlaceType];
752
+ static nav = [{
753
+ label: "Places",
754
+ model: Place,
755
+ icon: "home",
756
+ description: "Every site, building, room and zone, with its address and what it is inside.",
757
+ noun: "place"
758
+ }, {
759
+ label: "Place types",
760
+ model: PlaceType,
761
+ icon: "tag",
762
+ description: "The kinds of place you keep, such as building or room.",
763
+ noun: "place type"
764
+ }];
765
+ static options = {
766
+ Place: { fields: {
767
+ name: { order: 1 },
768
+ typeId: {
769
+ label: "Type",
770
+ order: 2
771
+ },
772
+ parentId: {
773
+ label: "Inside",
774
+ help: "The larger place this one is part of, such as the building a room is in.",
775
+ order: 3
776
+ },
777
+ description: { order: 4 },
778
+ streetNumber: {
779
+ label: "Street number",
780
+ order: 5
781
+ },
782
+ streetName: {
783
+ label: "Street name",
784
+ order: 6
785
+ },
786
+ city: { order: 7 },
787
+ region: { order: 8 },
788
+ country: { order: 9 },
789
+ postalCode: {
790
+ label: "Postal code",
791
+ order: 10
792
+ },
793
+ latitude: { visibility: "advanced" },
794
+ longitude: { visibility: "advanced" },
795
+ countryCode: {
796
+ label: "Country code",
797
+ visibility: "advanced"
798
+ },
799
+ timezone: {
800
+ label: "Time zone",
801
+ visibility: "advanced"
802
+ },
803
+ externalId: {
804
+ label: "Map reference",
805
+ visibility: "advanced"
806
+ },
807
+ source: {
808
+ label: "Map provider",
809
+ visibility: "advanced"
810
+ },
811
+ metadata: { visibility: "hidden" },
812
+ tenantId: { visibility: "hidden" },
813
+ createdAt: { visibility: "hidden" },
814
+ updatedAt: { visibility: "hidden" }
815
+ } },
816
+ PlaceType: { fields: {
817
+ name: { order: 1 },
818
+ description: { order: 2 },
819
+ createdAt: { visibility: "hidden" },
820
+ updatedAt: { visibility: "hidden" }
821
+ } }
822
+ };
823
+ };
824
+ //#endregion
825
+ export { PLACE_MAIN_ASSET_RELATIONSHIP, Place, PlaceAsset, PlaceAssetCollection, PlaceCollection, PlaceType, PlaceTypeCollection, PlacesLocationsRecipe, areCoordinatesNear, calculateDistance, formatCoordinates, generateDisplayName, locationToGeoData, mapLocationTypeToPlaceType, normalizeAddressComponents, parseCoordinates, validateCoordinates };
713
826
 
714
827
  //# sourceMappingURL=index.js.map