@aiquants/contact-map 0.11.0 → 0.13.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.
package/dist/index.d.mts CHANGED
@@ -1,7 +1,8 @@
1
- import { b as ContactRecordForTree, c as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-CDq16q63.mjs";
2
- export { D as DEFAULT_LIST_LAYOUT_SPEC, d as DEFAULT_TREE_LAYOUT_SPEC, R as ResponsiveLayoutSpec, a as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-CDq16q63.mjs";
1
+ import { a as ContactRecordForTree, b as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-B9J5unS2.mjs";
2
+ export { D as DEFAULT_LIST_LAYOUT_SPEC, c as DEFAULT_TREE_LAYOUT_SPEC, d as ResponsiveLayoutSpec, R as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-B9J5unS2.mjs";
3
3
  import { e as SearchResultEntry, C as ContactRecord } from "./wire-CVZNwmQx.mjs";
4
4
  export { d as ContactMapLogger, c as ContactMapOutletContext, b as ContactMapSearchOutletContext, a as ContactMapStreamPhase, f as ContactMapStreamState, F as FieldPerformanceMetric, I as IndexWorkerMetrics, J as JsonSerialized, L as LevenshteinWorkerMetrics, S as SerializedContactStreamRow, g as StreamChunkWire, h as StreamCursor, i as StreamErrorWire, j as StreamLineWire, k as StreamMetadataWire, l as defaultLogger } from "./wire-CVZNwmQx.mjs";
5
+ import { NormalizeOptions } from "@aiquants/select-box";
5
6
  import { z } from "zod";
6
7
  declare const assertContactMapTreeNaming: (naming: ContactMapTreeNaming) => void;
7
8
  declare class IncrementalTreeBuilder<T extends ContactRecordForTree = ContactRecordForTree> {
@@ -39,9 +40,11 @@ declare const getPrimaryEmail: (contact: ContactRecord | null) => PreferredValue
39
40
  declare const getPrimaryPhone: (contact: ContactRecord | null) => PreferredValueResult<PhoneFieldKey>;
40
41
  declare const getPhoneDialHref: (value: string | null | undefined) => string | null;
41
42
  declare const getEmailLinkHref: (value: string | null | undefined, preferGmail: boolean) => string | null;
42
- declare const formatDate: (value: string | number | Date | null | undefined) => string;
43
- declare const formatDateTime: (value: string | number | Date | null | undefined) => string;
44
- declare const toDisplayValue: (value: string | number | boolean | Date | null | undefined) => string;
43
+ declare const formatStoredDate: (value: Date) => string;
44
+ declare const formatStoredDateTime: (value: Date) => string;
45
+ declare const formatLocalDateTime: (value: Date) => string;
46
+ declare const formatRecordTimestamp: (value: string | Date | null | undefined, format: (value: Date) => string) => string;
47
+ declare const toDisplayValue: (value: string | number | boolean | null | undefined) => string;
45
48
  declare const normalizeLabel: (value: string | null | undefined, fallback: string) => string;
46
49
  type DepartmentChain = string[];
47
50
  type ParserContext = {
@@ -60,6 +63,7 @@ declare const splitDepartment: (dept: string, allDepts: Set<string>) => string[]
60
63
  declare const extractDepartmentsFromTitle: (title: string, context: ParserContext) => string[];
61
64
  declare const StandardDepartmentParser: DepartmentParser;
62
65
  declare const TitleBasedDepartmentParser: DepartmentParser;
66
+ declare const CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS: Readonly<Required<NormalizeOptions>>;
63
67
  declare const normalizeSearchInput: (value: string) => string;
64
68
  declare const getSearchQuerySpellings: (query: string) => string[];
65
69
  declare const createSearchQueryPattern: (query: string) => RegExp | null;
@@ -273,4 +277,4 @@ declare const schemaContactRecords: z.ZodArray<z.ZodObject<{
273
277
  updated_at?: string | Date | undefined;
274
278
  updated_by?: string | undefined;
275
279
  }>, "many">;
276
- export { type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatDate, formatDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
280
+ export { CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS, type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatLocalDateTime, formatRecordTimestamp, formatStoredDate, formatStoredDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { b as ContactRecordForTree, c as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-CDq16q63.js";
2
- export { D as DEFAULT_LIST_LAYOUT_SPEC, d as DEFAULT_TREE_LAYOUT_SPEC, R as ResponsiveLayoutSpec, a as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-CDq16q63.js";
1
+ import { a as ContactRecordForTree, b as ContactMapTreeNaming, C as ContactMapDirectoryEntry } from "./tree-types-B9J5unS2.js";
2
+ export { D as DEFAULT_LIST_LAYOUT_SPEC, c as DEFAULT_TREE_LAYOUT_SPEC, d as ResponsiveLayoutSpec, R as ResponsiveThresholds, e as calculateResponsiveThresholds, g as getHysteresisBreakpointState } from "./tree-types-B9J5unS2.js";
3
3
  import { e as SearchResultEntry, C as ContactRecord } from "./wire-CVZNwmQx.js";
4
4
  export { d as ContactMapLogger, c as ContactMapOutletContext, b as ContactMapSearchOutletContext, a as ContactMapStreamPhase, f as ContactMapStreamState, F as FieldPerformanceMetric, I as IndexWorkerMetrics, J as JsonSerialized, L as LevenshteinWorkerMetrics, S as SerializedContactStreamRow, g as StreamChunkWire, h as StreamCursor, i as StreamErrorWire, j as StreamLineWire, k as StreamMetadataWire, l as defaultLogger } from "./wire-CVZNwmQx.js";
5
+ import { NormalizeOptions } from "@aiquants/select-box";
5
6
  import { z } from "zod";
6
7
  declare const assertContactMapTreeNaming: (naming: ContactMapTreeNaming) => void;
7
8
  declare class IncrementalTreeBuilder<T extends ContactRecordForTree = ContactRecordForTree> {
@@ -39,9 +40,11 @@ declare const getPrimaryEmail: (contact: ContactRecord | null) => PreferredValue
39
40
  declare const getPrimaryPhone: (contact: ContactRecord | null) => PreferredValueResult<PhoneFieldKey>;
40
41
  declare const getPhoneDialHref: (value: string | null | undefined) => string | null;
41
42
  declare const getEmailLinkHref: (value: string | null | undefined, preferGmail: boolean) => string | null;
42
- declare const formatDate: (value: string | number | Date | null | undefined) => string;
43
- declare const formatDateTime: (value: string | number | Date | null | undefined) => string;
44
- declare const toDisplayValue: (value: string | number | boolean | Date | null | undefined) => string;
43
+ declare const formatStoredDate: (value: Date) => string;
44
+ declare const formatStoredDateTime: (value: Date) => string;
45
+ declare const formatLocalDateTime: (value: Date) => string;
46
+ declare const formatRecordTimestamp: (value: string | Date | null | undefined, format: (value: Date) => string) => string;
47
+ declare const toDisplayValue: (value: string | number | boolean | null | undefined) => string;
45
48
  declare const normalizeLabel: (value: string | null | undefined, fallback: string) => string;
46
49
  type DepartmentChain = string[];
47
50
  type ParserContext = {
@@ -60,6 +63,7 @@ declare const splitDepartment: (dept: string, allDepts: Set<string>) => string[]
60
63
  declare const extractDepartmentsFromTitle: (title: string, context: ParserContext) => string[];
61
64
  declare const StandardDepartmentParser: DepartmentParser;
62
65
  declare const TitleBasedDepartmentParser: DepartmentParser;
66
+ declare const CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS: Readonly<Required<NormalizeOptions>>;
63
67
  declare const normalizeSearchInput: (value: string) => string;
64
68
  declare const getSearchQuerySpellings: (query: string) => string[];
65
69
  declare const createSearchQueryPattern: (query: string) => RegExp | null;
@@ -273,4 +277,4 @@ declare const schemaContactRecords: z.ZodArray<z.ZodObject<{
273
277
  updated_at?: string | Date | undefined;
274
278
  updated_by?: string | undefined;
275
279
  }>, "many">;
276
- export { type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatDate, formatDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
280
+ export { CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS, type ContactEntrySource, ContactMapDirectoryEntry, ContactMapTreeNaming, ContactRecord, ContactRecordForTree, type DepartmentChain, type DepartmentParseSource, type DepartmentParser, type DepartmentParserMode, type EmailFieldKey, type ExactMatchRanker, IncrementalTreeBuilder, type ParserContext, type PhoneFieldKey, type PreferredValueResult, SearchResultEntry, StandardDepartmentParser, TitleBasedDepartmentParser, assertContactMapTreeNaming, buildDirectoryTree, createExactMatchRanker, createSearchQueryPattern, extractContactData, extractDepartmentsFromTitle, formatLocalDateTime, formatRecordTimestamp, formatStoredDate, formatStoredDateTime, getEmailLinkHref, getPhoneDialHref, getPrimaryEmail, getPrimaryPhone, getSearchQuerySpellings, normalizeLabel, normalizeSearchInput, normalizeString, schemaContactRecord, schemaContactRecords, splitDepartment, toDisplayValue };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var I=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var fe=(e,t)=>{for(var r in t)I(e,r,{get:t[r],enumerable:!0})},he=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of de(t))!me.call(e,a)&&a!==r&&I(e,a,{get:()=>t[a],enumerable:!(o=ue(t,a))||o.enumerable});return e};var ge=e=>he(I({},"__esModule",{value:!0}),e);var Ve={};fe(Ve,{DEFAULT_LIST_LAYOUT_SPEC:()=>ze,DEFAULT_TREE_LAYOUT_SPEC:()=>Ne,IncrementalTreeBuilder:()=>z,StandardDepartmentParser:()=>A,TitleBasedDepartmentParser:()=>$,assertContactMapTreeNaming:()=>V,buildDirectoryTree:()=>ke,calculateResponsiveThresholds:()=>Le,createExactMatchRanker:()=>Qe,createSearchQueryPattern:()=>le,defaultLogger:()=>Fe,extractContactData:()=>Re,extractDepartmentsFromTitle:()=>F,formatDate:()=>we,formatDateTime:()=>Y,getEmailLinkHref:()=>Oe,getHysteresisBreakpointState:()=>Ie,getPhoneDialHref:()=>Me,getPrimaryEmail:()=>_e,getPrimaryPhone:()=>Ee,getSearchQuerySpellings:()=>ie,normalizeLabel:()=>E,normalizeSearchInput:()=>se,normalizeString:()=>O,schemaContactRecord:()=>pe,schemaContactRecords:()=>He,splitDepartment:()=>Q,toDisplayValue:()=>We});module.exports=ge(Ve);var E=(e,t)=>e&&e.trim()||t;var ye={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,r]of Object.entries(ye))if(e.endsWith(t))return r;return{rank:99,type:"Other"}},v=e=>R(e).rank,be=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],_=e=>be.find(t=>e.endsWith(t)),De=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),Te=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),xe=(e,t)=>{if(!t)return!0;let r=R(e),o=R(t);if(r.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let a=_(e),m=_(t);return!(a&&m&&a!==m)},w=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...w(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...w(o,t)]}let r="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let a=e.slice(0,o);if(!De.has(a)&&t.has(a)){r=a;break}}if(r){let o=r,a=e.slice(r.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,b=a.match(m);b&&(o=e.slice(0,r.length+b[0].length));let c=e.slice(o.length),n=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let s of n){let y=new RegExp(`^\\s+${s}\\.?(?=$|[\\s,])`,"i"),p=c.match(y);if(p){o=e.slice(0,o.length+p[0].length);break}}let f=e.slice(o.length).trim();return[o,...w(f,t)]}return[e]},Q=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),a=[];for(let m of o){let b=m.trim();b&&a.push(...w(b,t))}return a},F=(e,t)=>{let r=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],a=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=a.length,b=new Set;for(let c=m;c>=1;c--)for(let n=0;n<=m-c;n++){let f=!1;for(let y=n;y<n+c;y++)if(b.has(y)){f=!0;break}if(f)continue;let s=a.slice(n,n+c).join(" ");if(!(s==="\u517C"||s==="\u517C\u52D9"||s==="\u4FC2"||s==="of"||s==="&"||s==="Quality"||s==="Innovation"||s==="R&D"||s==="Solutions"||s==="Development"||s==="Laboratory"||s==="and"||s==="Food"||s==="Beverage")&&t.allKnownDepartments.has(s)){r.push({name:s,index:n});for(let y=n;y<n+c;y++)b.add(y)}}for(let c=0;c<m;c++){if(b.has(c))continue;let n=a[c];for(n.endsWith("\u9577")&&n.length>1?n=n.slice(0,-1):n.endsWith("\u7D71\u62EC")&&n.length>2&&(n=n.slice(0,-2));;){let p=!1;if(n.startsWith("\u62C5\u5F53")&&n.length>2||n.startsWith("\u5C02\u4EFB")&&n.length>2||n.startsWith("\u517C\u52D9")&&n.length>2?(n=n.slice(2),p=!0):(n.startsWith("\u526F")||n.startsWith("\u517C"))&&n.length>1&&(n=n.slice(1),p=!0),!p)break}if(n.includes("\u30FB")&&!t.allKnownDepartments.has(n)){let p=n.split("\u30FB"),D=p[p.length-1],x=o.find(k=>D.endsWith(k));if(x){for(let k of p){let C=k;o.some(i=>C.endsWith(i))||(C=C+x);let S=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(C),d=o.some(i=>C.endsWith(i)),l=o.includes(C);(S||d&&!l)&&r.push({name:C,index:c})}continue}}let f=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(n),s=o.some(p=>n.endsWith(p)),y=o.includes(n);(f||s&&!y)&&r.push({name:n,index:c})}return r.sort((c,n)=>c.index-n.index),r.map(c=>c.name)},U=(e,t)=>{let r=0;for(let o of t)r<e.length&&o===e[r]&&r++;return r===e.length},A={name:"Standard",parse:(e,t,r="full")=>{let o=E(e.department,"");if(!o)return null;let a=Q(o,t.allKnownDepartments),m=new Map;for(let n of a)m.set(n,(m.get(n)||0)+1);let b=n=>{let f=[],s=[];for(let y=0;y<n.length;y++){let p=n[y];if(p==="\u517C"){s.length>0&&(f.push(s),s=[]);continue}let D=R(p),x=D.rank,k=m.get(p)||0,C=Te(p,k);if(s.length===0)s.push(p);else{let S=s[s.length-1],d=R(S),l=d.rank;if(s.includes(p))f.push(s),s=[p];else{let i=!1;if(C)i=!0;else if(d.type===D.type){let g=_(S),h=_(p);g&&h&&g!==h||S.endsWith("\u672C\u90E8")&&p.endsWith("\u672C\u90E8")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u4E8B\u696D\u90E8")||S.endsWith("\u4E8B\u696D\u90E8")&&p.endsWith("\u90E8\u9580")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<x}else i=x>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=x&&n.slice(y+1).includes(S)&&(i=!1);i?s.push(p):(f.push(s),s=[p])}}if(C){let S=y+1<n.length?n[y+1]:void 0;xe(p,S)&&s.length>0&&(f.push(s),s=[])}}return s.length>0&&f.push(s),f},c=[];if(r==="full"&&c.push(...b(a)),r==="pure_org"){let n=a.filter(f=>R(f).type!=="Location");n.length>0&&c.push(...b(n))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,s=e.title.split(f).filter(Boolean),y=[],p=(d,l)=>{let i=v(d),g=v(l),h=i<g;if(!h){let T=_(d),P=_(l);if(T&&P&&T!==P)h=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))h=!0;else{let L=R(d),ce=R(l);L.type==="Other"&&ce.type==="Other"&&(h=!0)}}return h};for(let d of s){let l=F(d,t);if(l.length===0)continue;let i=[];for(let g of l)if(i.length===0)i.push(g);else{let h=i[i.length-1];if(p(h,g))i.push(g);else{y.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let L=i[P];if(p(L,g)){i=[...i.slice(0,P+1),g],T=!0;break}}T||(i=[g])}}i.length>0&&y.push(i)}let D=[...c],x=d=>s.some(l=>l.includes(d)&&l.length>d.length);for(let d of y){let l=!1;for(let i of c){let g=i.findIndex(h=>d.includes(h));if(g!==-1){let h=i[g],T=d.indexOf(h);if(g>0&&T===0){let P=i.slice(0,g);D.push([...P,...d]),l=!0}else if(T>0&&g===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-g,l=!0}if(!l){let h=i[i.length-1],T=d[0];p(h,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],C=[],S=new Set;for(let d of D){let l=d.join("|");S.has(l)||(S.add(l),C.push(d))}for(let d=0;d<C.length;d++){let l=C[d],i=!1;for(let g=0;g<C.length;g++){if(d===g)continue;let h=C[g];if(h.length>l.length&&h.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(h.length>l.length&&U(l,h)){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(l.length===1&&h.length>0){let T=l[0],P=h[h.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(c.length>0){let n=[];for(let f=0;f<c.length;f++){let s=c[f],y=!1;for(let p=0;p<c.length;p++){if(f===p)continue;let D=c[p];if(D.length>s.length&&U(s,D)){y=!0;break}}y||n.push(s)}return n.length>0?n:null}return null}},$={name:"TitleBased",parse:(e,t,r="full")=>{let o=e.title;if(!o)return null;let a=F(o,t);return a.length>0?[a]:null}};var W=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":H(e);case"function":return H(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},H=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var Ce=["uncategorizedCompany","unnamedPerson"],V=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${W(e)}`);for(let t of Ce){let r=e[t];if(typeof r!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${W(r)}`);if(r.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${W(r)}`)}},Se=[A,$],Pe=(e,t)=>{let r=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${r} (${o})`:r},j=e=>e.sort((t,r)=>t.label.localeCompare(r.label,"ja")),B=(e,t,r)=>{let o=e.get(t);if(o)return o;let a=r();return e.set(t,a),a},K=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),q=e=>e.sort((t,r)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),a=!!(r.contact.title&&r.contact.title.trim().length>0);return o&&!a?-1:!o&&a?1:t.label.localeCompare(r.label,"ja")}),G=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),J=e=>{let t=j(Array.from(e.children.values())).map(J),r=q([...e.persons]).map(G);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...r,...t],memberCount:e.personCount}},z=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;V(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let r="full",o=!1;for(let a of t)if(!this.processedPersonIds.has(a.person_id)&&a.department){let m=a.department.split(/\u3000/);for(let b of m){let c=b.trim();if(!c||c==="\u517C"||c==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(c)){let f=c.split(" ").filter(s=>s.length>0&&s!=="\u517C"&&s!=="\u4FC2");for(let s of f)this.allDepts.add(s)}else this.allDepts.add(c)}}for(let a of t){let m=a.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let b=E(a.company_name,this.naming.uncategorizedCompany),c=Pe(a,this.naming.unnamedPerson),n=`company:${K(b)}`,f=B(this.companyMap,n,()=>({label:b,segment:n,path:`/${n}`,departments:new Map,persons:[],personCount:0})),s=[],y={allKnownDepartments:this.allDepts};for(let p of Se){let D=p.parse(a,y,r);if(D&&D.length>0){s=D;break}}s.length===0&&s.push([]);for(let p=0;p<s.length;p++){let D=s[p];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(h=>h.contact.person_id===m)||f.persons.push({contact:a,label:c,path:i,segment:l,isPrimary:!0});continue}let x=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${K(l)}`;x=B(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1;for(let g=1;g<D.length;g++){let h=D[g],T=`department:${K(h)}`;if(!x)throw new Error("[contact-map] unexpected null currentDepartmentNode");x=B(x.children,T,()=>({label:h,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1}}else continue;let C=`person:${m}`,S=`${x.path}/${C}`;x.persons.some(l=>l.contact.person_id===m)||x.persons.push({contact:a,label:c,path:S,segment:C,isPrimary:p===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},r=j(Array.from(this.companyMap.values())).map(o=>{let a=j(Array.from(o.departments.values())).map(J),m=q([...o.persons]).map(G),b={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...a],memberCount:o.personCount};return t[o.label]=b,b});return this.cachedResult={tree:r,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},ke=(e,t)=>{let r=new z(t);return r.appendRecords(e),r.getSnapshot()};var O=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Re=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,X=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let r of t){let o=O(e[r]);if(o)return{value:o,fieldKey:r}}return{value:null,fieldKey:null}},_e=e=>X(e,["custom_email","email"]),Ee=e=>X(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Me=e=>{let t=O(e);if(!t)return null;let r=t.replace(/[^0-9+#*]/g,"");return r.length===0?null:`tel:${r}`},Oe=(e,t)=>{let r=O(e);return r?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(r)}`:`mailto:${encodeURIComponent(r)}`:null},we=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString().split("T")[0]},Y=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString()},We=e=>e==null?"-":typeof e=="string"?O(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":e instanceof Date?Y(e):String(e);var ze={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ne={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Le(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,r=t+e.scrollbarSafetyBuffer,o=r+e.hysteresisSafetyMargin,a=o-r;return{physicalMinWidth:t,collapseThreshold:r,expandThreshold:o,hysteresisWidth:a}}function Ie(e,t,r){return e<=0||!Number.isFinite(e)?!1:t?e>=r.collapseThreshold:e>=r.expandThreshold}var Fe={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};var N=require("@aiquants/fuzzy-search"),M=require("@aiquants/select-box"),te=/[​]/g,Ae=/^[\s  ]+|[\s  ]+$/g,$e=/\s+/,Be=/^[\p{Script=Latin}\s]+$/u,Ke=/\p{Script=Latin}/u,ne=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1}),re="union",je=e=>(0,M.normalizeText)(e.replace(te,"").replace(Ae,""),ne),ve=e=>{if(!Be.test(e))return null;let t=(0,M.romajiToKatakana)(e);return Ke.test(t)?null:t},oe=e=>e.split($e).filter(Boolean),ae=e=>(0,N.parseQuerySets)(e,re).sets.map(({query:t})=>t),Z=e=>ae(e).flatMap(t=>oe(t)),ee=e=>(0,N.formatQuerySets)({combine:re,sets:Array.from(new Set(e),t=>({query:t}))}),se=e=>{let t=ae(e.replace(te,"")).map(o=>oe(je(o)).join(" ")).filter(o=>o!==""),r=[];for(let o of t){let a=ve(o);if(a===null)return ee(t);r.push(a)}return ee(r)},ie=e=>{let t=new Set([...Z(e),...Z(se(e))]),r=new Set;for(let o of t)for(let a of(0,M.getNormalizedVariants)(o,ne)){let m=a.trim();m&&r.add(m)}return Array.from(r)},Ue=/[.*+?^${}()|[\]\\]/g,le=e=>{let t=ie(e);if(t.length===0)return null;let r=t.map(o=>o.replace(Ue,"\\$&")).sort((o,a)=>a.length-o.length);return new RegExp(r.join("|"),"gi")},Qe=(e,t)=>{let r=le(e);if(r===null)return a=>a;let o=a=>t.some(m=>{let b=a[m];return typeof b=="string"&&b.search(r)!==-1});return a=>{let m=[],b=[];for(let c of a)o(c.item)?m.push(c):b.push(c);return[...m,...b]}};var u=require("zod"),pe=u.z.object({person_id:u.z.union([u.z.string(),u.z.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.z.number()),person_id_redirect_to:u.z.union([u.z.string(),u.z.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let r=parseInt(t,10);return Number.isNaN(r)?null:r}),full_name:u.z.string().nullable().optional(),full_name_reading:u.z.string().nullable().optional(),company_name:u.z.string().nullable().optional(),company_name_reading:u.z.string().nullable().optional(),department:u.z.string().nullable().optional(),title:u.z.string().nullable().optional(),address:u.z.string().nullable().optional(),postal_code:u.z.string().nullable().optional(),email:u.z.string().nullable().optional(),custom_email:u.z.string().nullable().optional(),company_phone_number:u.z.string().nullable().optional(),custom_company_phone_number:u.z.string().nullable().optional(),company_fax_number:u.z.string().nullable().optional(),mobile_phone_number:u.z.string().nullable().optional(),custom_mobile_phone_number:u.z.string().nullable().optional(),url:u.z.string().nullable().optional(),contacted_at:u.z.union([u.z.date(),u.z.string()]).nullable().optional(),contacted_by:u.z.string().nullable().optional(),is_in_eight:u.z.boolean().nullable().optional(),is_contact_synced:u.z.boolean().nullable().optional(),is_active:u.z.boolean(),is_incomplete:u.z.boolean().nullable().optional(),created_at:u.z.union([u.z.date(),u.z.string()]).optional(),created_by:u.z.string().optional(),updated_at:u.z.union([u.z.date(),u.z.string()]).optional(),updated_by:u.z.string().optional()}),He=u.z.array(pe);0&&(module.exports={DEFAULT_LIST_LAYOUT_SPEC,DEFAULT_TREE_LAYOUT_SPEC,IncrementalTreeBuilder,StandardDepartmentParser,TitleBasedDepartmentParser,assertContactMapTreeNaming,buildDirectoryTree,calculateResponsiveThresholds,createExactMatchRanker,createSearchQueryPattern,defaultLogger,extractContactData,extractDepartmentsFromTitle,formatDate,formatDateTime,getEmailLinkHref,getHysteresisBreakpointState,getPhoneDialHref,getPrimaryEmail,getPrimaryPhone,getSearchQuerySpellings,normalizeLabel,normalizeSearchInput,normalizeString,schemaContactRecord,schemaContactRecords,splitDepartment,toDisplayValue});
1
+ "use strict";var A=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var fe=Object.prototype.hasOwnProperty;var ge=(e,t)=>{for(var n in t)A(e,n,{get:t[n],enumerable:!0})},he=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of me(t))!fe.call(e,s)&&s!==n&&A(e,s,{get:()=>t[s],enumerable:!(o=de(t,s))||o.enumerable});return e};var ye=e=>he(A({},"__esModule",{value:!0}),e);var nt={};ge(nt,{CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS:()=>U,DEFAULT_LIST_LAYOUT_SPEC:()=>Ie,DEFAULT_TREE_LAYOUT_SPEC:()=>Ae,IncrementalTreeBuilder:()=>w,StandardDepartmentParser:()=>$,TitleBasedDepartmentParser:()=>K,assertContactMapTreeNaming:()=>q,buildDirectoryTree:()=>_e,calculateResponsiveThresholds:()=>Fe,createExactMatchRanker:()=>et,createSearchQueryPattern:()=>ce,defaultLogger:()=>Ke,extractContactData:()=>Re,extractDepartmentsFromTitle:()=>F,formatLocalDateTime:()=>Ne,formatRecordTimestamp:()=>we,formatStoredDate:()=>ee,formatStoredDateTime:()=>Le,getEmailLinkHref:()=>Oe,getHysteresisBreakpointState:()=>$e,getPhoneDialHref:()=>We,getPrimaryEmail:()=>Me,getPrimaryPhone:()=>Ee,getSearchQuerySpellings:()=>le,normalizeLabel:()=>E,normalizeSearchInput:()=>ie,normalizeString:()=>O,schemaContactRecord:()=>pe,schemaContactRecords:()=>tt,splitDepartment:()=>V,toDisplayValue:()=>ze});module.exports=ye(nt);var E=(e,t)=>e&&e.trim()||t;var be={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,n]of Object.entries(be))if(e.endsWith(t))return n;return{rank:99,type:"Other"}},H=e=>R(e).rank,De=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],M=e=>De.find(t=>e.endsWith(t)),Te=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),Ce=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),Se=(e,t)=>{if(!t)return!0;let n=R(e),o=R(t);if(n.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=M(e),m=M(t);return!(s&&m&&s!==m)},L=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...L(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...L(o,t)]}let n="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!Te.has(s)&&t.has(s)){n=s;break}}if(n){let o=n,s=e.slice(n.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,h=s.match(m);h&&(o=e.slice(0,n.length+h[0].length));let p=e.slice(o.length),r=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of r){let b=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),c=p.match(b);if(c){o=e.slice(0,o.length+c[0].length);break}}let f=e.slice(o.length).trim();return[o,...L(f,t)]}return[e]},V=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let h=m.trim();h&&s.push(...L(h,t))}return s},F=(e,t)=>{let n=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,h=new Set;for(let p=m;p>=1;p--)for(let r=0;r<=m-p;r++){let f=!1;for(let b=r;b<r+p;b++)if(h.has(b)){f=!0;break}if(f)continue;let a=s.slice(r,r+p).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){n.push({name:a,index:r});for(let b=r;b<r+p;b++)h.add(b)}}for(let p=0;p<m;p++){if(h.has(p))continue;let r=s[p];for(r.endsWith("\u9577")&&r.length>1?r=r.slice(0,-1):r.endsWith("\u7D71\u62EC")&&r.length>2&&(r=r.slice(0,-2));;){let c=!1;if(r.startsWith("\u62C5\u5F53")&&r.length>2||r.startsWith("\u5C02\u4EFB")&&r.length>2||r.startsWith("\u517C\u52D9")&&r.length>2?(r=r.slice(2),c=!0):(r.startsWith("\u526F")||r.startsWith("\u517C"))&&r.length>1&&(r=r.slice(1),c=!0),!c)break}if(r.includes("\u30FB")&&!t.allKnownDepartments.has(r)){let c=r.split("\u30FB"),D=c[c.length-1],C=o.find(k=>D.endsWith(k));if(C){for(let k of c){let S=k;o.some(i=>S.endsWith(i))||(S=S+C);let x=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(S),d=o.some(i=>S.endsWith(i)),l=o.includes(S);(x||d&&!l)&&n.push({name:S,index:p})}continue}}let f=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(r),a=o.some(c=>r.endsWith(c)),b=o.includes(r);(f||a&&!b)&&n.push({name:r,index:p})}return n.sort((p,r)=>p.index-r.index),n.map(p=>p.name)},Q=(e,t)=>{let n=0;for(let o of t)n<e.length&&o===e[n]&&n++;return n===e.length},$={name:"Standard",parse:(e,t,n="full")=>{let o=E(e.department,"");if(!o)return null;let s=V(o,t.allKnownDepartments),m=new Map;for(let r of s)m.set(r,(m.get(r)||0)+1);let h=r=>{let f=[],a=[];for(let b=0;b<r.length;b++){let c=r[b];if(c==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(c),C=D.rank,k=m.get(c)||0,S=Ce(c,k);if(a.length===0)a.push(c);else{let x=a[a.length-1],d=R(x),l=d.rank;if(a.includes(c))f.push(a),a=[c];else{let i=!1;if(S)i=!0;else if(d.type===D.type){let y=M(x),g=M(c);y&&g&&y!==g||x.endsWith("\u672C\u90E8")&&c.endsWith("\u672C\u90E8")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u4E8B\u696D\u90E8")||x.endsWith("\u4E8B\u696D\u90E8")&&c.endsWith("\u90E8\u9580")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<C}else i=C>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=C&&r.slice(b+1).includes(x)&&(i=!1);i?a.push(c):(f.push(a),a=[c])}}if(S){let x=b+1<r.length?r[b+1]:void 0;Se(c,x)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},p=[];if(n==="full"&&p.push(...h(s)),n==="pure_org"){let r=s.filter(f=>R(f).type!=="Location");r.length>0&&p.push(...h(r))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),b=[],c=(d,l)=>{let i=H(d),y=H(l),g=i<y;if(!g){let T=M(d),P=M(l);if(T&&P&&T!==P)g=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))g=!0;else{let I=R(d),ue=R(l);I.type==="Other"&&ue.type==="Other"&&(g=!0)}}return g};for(let d of a){let l=F(d,t);if(l.length===0)continue;let i=[];for(let y of l)if(i.length===0)i.push(y);else{let g=i[i.length-1];if(c(g,y))i.push(y);else{b.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let I=i[P];if(c(I,y)){i=[...i.slice(0,P+1),y],T=!0;break}}T||(i=[y])}}i.length>0&&b.push(i)}let D=[...p],C=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of b){let l=!1;for(let i of p){let y=i.findIndex(g=>d.includes(g));if(y!==-1){let g=i[y],T=d.indexOf(g);if(y>0&&T===0){let P=i.slice(0,y);D.push([...P,...d]),l=!0}else if(T>0&&y===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-y,l=!0}if(!l){let g=i[i.length-1],T=d[0];c(g,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],S=[],x=new Set;for(let d of D){let l=d.join("|");x.has(l)||(x.add(l),S.push(d))}for(let d=0;d<S.length;d++){let l=S[d],i=!1;for(let y=0;y<S.length;y++){if(d===y)continue;let g=S[y];if(g.length>l.length&&g.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(g.length>l.length&&Q(l,g)){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(l.length===1&&g.length>0){let T=l[0],P=g[g.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(p.length>0){let r=[];for(let f=0;f<p.length;f++){let a=p[f],b=!1;for(let c=0;c<p.length;c++){if(f===c)continue;let D=p[c];if(D.length>a.length&&Q(a,D)){b=!0;break}}b||r.push(a)}return r.length>0?r:null}return null}},K={name:"TitleBased",parse:(e,t,n="full")=>{let o=e.title;if(!o)return null;let s=F(o,t);return s.length>0?[s]:null}};var N=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":G(e);case"function":return G(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},G=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var xe=["uncategorizedCompany","unnamedPerson"],q=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${N(e)}`);for(let t of xe){let n=e[t];if(typeof n!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${N(n)}`);if(n.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${N(n)}`)}},Pe=[$,K],ke=(e,t)=>{let n=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${n} (${o})`:n},v=e=>e.sort((t,n)=>t.label.localeCompare(n.label,"ja")),j=(e,t,n)=>{let o=e.get(t);if(o)return o;let s=n();return e.set(t,s),s},B=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),J=e=>e.sort((t,n)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(n.contact.title&&n.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(n.label,"ja")}),X=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Y=e=>{let t=v(Array.from(e.children.values())).map(Y),n=J([...e.persons]).map(X);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...n,...t],memberCount:e.personCount}},w=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;q(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let n="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let h of m){let p=h.trim();if(!p||p==="\u517C"||p==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(p)){let f=p.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(p)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let h=E(s.company_name,this.naming.uncategorizedCompany),p=ke(s,this.naming.unnamedPerson),r=`company:${B(h)}`,f=j(this.companyMap,r,()=>({label:h,segment:r,path:`/${r}`,departments:new Map,persons:[],personCount:0})),a=[],b={allKnownDepartments:this.allDepts};for(let c of Pe){let D=c.parse(s,b,n);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let c=0;c<a.length;c++){let D=a[c];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(g=>g.contact.person_id===m)||f.persons.push({contact:s,label:p,path:i,segment:l,isPrimary:!0});continue}let C=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${B(l)}`;C=j(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1;for(let y=1;y<D.length;y++){let g=D[y],T=`department:${B(g)}`;if(!C)throw new Error("[contact-map] unexpected null currentDepartmentNode");C=j(C.children,T,()=>({label:g,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1}}else continue;let S=`person:${m}`,x=`${C.path}/${S}`;C.persons.some(l=>l.contact.person_id===m)||C.persons.push({contact:s,label:p,path:x,segment:S,isPrimary:c===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},n=v(Array.from(this.companyMap.values())).map(o=>{let s=v(Array.from(o.departments.values())).map(Y),m=J([...o.persons]).map(X),h={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=h,h});return this.cachedResult={tree:n,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},_e=(e,t)=>{let n=new w(t);return n.appendRecords(e),n.getSnapshot()};var O=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Re=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,Z=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let n of t){let o=O(e[n]);if(o)return{value:o,fieldKey:n}}return{value:null,fieldKey:null}},Me=e=>Z(e,["custom_email","email"]),Ee=e=>Z(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),We=e=>{let t=O(e);if(!t)return null;let n=t.replace(/[^0-9+#*]/g,"");return n.length===0?null:`tel:${n}`},Oe=(e,t)=>{let n=O(e);return n?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(n)}`:`mailto:${encodeURIComponent(n)}`:null},_=(e,t)=>String(e).padStart(t,"0"),ee=e=>`${_(e.getUTCFullYear(),4)}-${_(e.getUTCMonth()+1,2)}-${_(e.getUTCDate(),2)}`,Le=e=>`${ee(e)} ${_(e.getUTCHours(),2)}:${_(e.getUTCMinutes(),2)}:${_(e.getUTCSeconds(),2)}`,Ne=e=>`${_(e.getFullYear(),4)}-${_(e.getMonth()+1,2)}-${_(e.getDate(),2)} ${_(e.getHours(),2)}:${_(e.getMinutes(),2)}:${_(e.getSeconds(),2)}`,we=(e,t)=>{if(e==null||e==="")return"-";let n=typeof e=="string"?new Date(e):e;return Number.isNaN(n.getTime())?typeof e=="string"?e:"-":t(n)},ze=e=>e==null?"-":typeof e=="string"?O(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":String(e);var Ie={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ae={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Fe(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,n=t+e.scrollbarSafetyBuffer,o=n+e.hysteresisSafetyMargin,s=o-n;return{physicalMinWidth:t,collapseThreshold:n,expandThreshold:o,hysteresisWidth:s}}function $e(e,t,n){return e<=0||!Number.isFinite(e)?!1:t?e>=n.collapseThreshold:e>=n.expandThreshold}var Ke={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};var z=require("@aiquants/fuzzy-search"),W=require("@aiquants/select-box"),re=/[​]/g,je=/^[\s  ]+|[\s  ]+$/g,Be=/\s+/,ve=/^[\p{Script=Latin}\s]+$/u,Ue=/\p{Script=Latin}/u,U=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1,normalizeVariants:!1,ignoreSpaces:!1,ignoreSymbols:!1,ignoreLongVowels:!1}),oe="union",He=65377,Qe=65439,Ve=["\uFF9E","\uFF9F"],Ge=(()=>{let e=new Map;for(let t=He;t<=Qe;t+=1){let n=String.fromCharCode(t);e.set(n.normalize("NFKC"),n);for(let o of Ve){let s=(n+o).normalize("NFKC");s.length===1&&e.set(s,n+o)}}return e})(),qe=/[぀-ヿ]/u,Je=e=>{let t=Array.from(e,n=>Ge.get(n)??n).join("");return qe.test(t)?null:t},Xe=e=>(0,W.normalizeText)(e.replace(re,"").replace(je,""),U),Ye=e=>{if(!ve.test(e))return null;let t=(0,W.romajiToKatakana)(e);return Ue.test(t)?null:t},se=e=>e.split(Be).filter(Boolean),ae=e=>(0,z.parseQuerySets)(e,oe).sets.map(({query:t})=>t),te=e=>ae(e).flatMap(t=>se(t)),ne=e=>(0,z.formatQuerySets)({combine:oe,sets:Array.from(new Set(e),t=>({query:t}))}),ie=e=>{let t=ae(e.replace(re,"")).map(o=>se(Xe(o)).join(" ")).filter(o=>o!==""),n=[];for(let o of t){let s=Ye(o);if(s===null)return ne(t);n.push(s)}return ne(n)},le=e=>{let t=new Set([...te(e),...te(ie(e))]),n=new Set;for(let o of t)for(let s of(0,W.getNormalizedVariants)(o,U)){let m=s.trim();if(!m)continue;n.add(m);let h=Je(m);h!==null&&n.add(h)}return Array.from(n)},Ze=/[.*+?^${}()|[\]\\]/g,ce=e=>{let t=le(e);if(t.length===0)return null;let n=t.map(o=>o.replace(Ze,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(n.join("|"),"gi")},et=(e,t)=>{let n=ce(e);if(n===null)return s=>s;let o=s=>t.some(m=>{let h=s[m];return typeof h=="string"&&h.search(n)!==-1});return s=>{let m=[],h=[];for(let p of s)o(p.item)?m.push(p):h.push(p);return[...m,...h]}};var u=require("zod"),pe=u.z.object({person_id:u.z.union([u.z.string(),u.z.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.z.number()),person_id_redirect_to:u.z.union([u.z.string(),u.z.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let n=parseInt(t,10);return Number.isNaN(n)?null:n}),full_name:u.z.string().nullable().optional(),full_name_reading:u.z.string().nullable().optional(),company_name:u.z.string().nullable().optional(),company_name_reading:u.z.string().nullable().optional(),department:u.z.string().nullable().optional(),title:u.z.string().nullable().optional(),address:u.z.string().nullable().optional(),postal_code:u.z.string().nullable().optional(),email:u.z.string().nullable().optional(),custom_email:u.z.string().nullable().optional(),company_phone_number:u.z.string().nullable().optional(),custom_company_phone_number:u.z.string().nullable().optional(),company_fax_number:u.z.string().nullable().optional(),mobile_phone_number:u.z.string().nullable().optional(),custom_mobile_phone_number:u.z.string().nullable().optional(),url:u.z.string().nullable().optional(),contacted_at:u.z.union([u.z.date(),u.z.string()]).nullable().optional(),contacted_by:u.z.string().nullable().optional(),is_in_eight:u.z.boolean().nullable().optional(),is_contact_synced:u.z.boolean().nullable().optional(),is_active:u.z.boolean(),is_incomplete:u.z.boolean().nullable().optional(),created_at:u.z.union([u.z.date(),u.z.string()]).optional(),created_by:u.z.string().optional(),updated_at:u.z.union([u.z.date(),u.z.string()]).optional(),updated_by:u.z.string().optional()}),tt=u.z.array(pe);0&&(module.exports={CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS,DEFAULT_LIST_LAYOUT_SPEC,DEFAULT_TREE_LAYOUT_SPEC,IncrementalTreeBuilder,StandardDepartmentParser,TitleBasedDepartmentParser,assertContactMapTreeNaming,buildDirectoryTree,calculateResponsiveThresholds,createExactMatchRanker,createSearchQueryPattern,defaultLogger,extractContactData,extractDepartmentsFromTitle,formatLocalDateTime,formatRecordTimestamp,formatStoredDate,formatStoredDateTime,getEmailLinkHref,getHysteresisBreakpointState,getPhoneDialHref,getPrimaryEmail,getPrimaryPhone,getSearchQuerySpellings,normalizeLabel,normalizeSearchInput,normalizeString,schemaContactRecord,schemaContactRecords,splitDepartment,toDisplayValue});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var E=(e,t)=>e&&e.trim()||t;var te={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,r]of Object.entries(te))if(e.endsWith(t))return r;return{rank:99,type:"Other"}},F=e=>R(e).rank,ne=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],_=e=>ne.find(t=>e.endsWith(t)),re=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),oe=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),ae=(e,t)=>{if(!t)return!0;let r=R(e),o=R(t);if(r.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=_(e),m=_(t);return!(s&&m&&s!==m)},M=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...M(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...M(o,t)]}let r="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!re.has(s)&&t.has(s)){r=s;break}}if(r){let o=r,s=e.slice(r.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,b=s.match(m);b&&(o=e.slice(0,r.length+b[0].length));let c=e.slice(o.length),n=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of n){let y=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),p=c.match(y);if(p){o=e.slice(0,o.length+p[0].length);break}}let f=e.slice(o.length).trim();return[o,...M(f,t)]}return[e]},se=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let b=m.trim();b&&s.push(...M(b,t))}return s},$=(e,t)=>{let r=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,b=new Set;for(let c=m;c>=1;c--)for(let n=0;n<=m-c;n++){let f=!1;for(let y=n;y<n+c;y++)if(b.has(y)){f=!0;break}if(f)continue;let a=s.slice(n,n+c).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){r.push({name:a,index:n});for(let y=n;y<n+c;y++)b.add(y)}}for(let c=0;c<m;c++){if(b.has(c))continue;let n=s[c];for(n.endsWith("\u9577")&&n.length>1?n=n.slice(0,-1):n.endsWith("\u7D71\u62EC")&&n.length>2&&(n=n.slice(0,-2));;){let p=!1;if(n.startsWith("\u62C5\u5F53")&&n.length>2||n.startsWith("\u5C02\u4EFB")&&n.length>2||n.startsWith("\u517C\u52D9")&&n.length>2?(n=n.slice(2),p=!0):(n.startsWith("\u526F")||n.startsWith("\u517C"))&&n.length>1&&(n=n.slice(1),p=!0),!p)break}if(n.includes("\u30FB")&&!t.allKnownDepartments.has(n)){let p=n.split("\u30FB"),D=p[p.length-1],x=o.find(k=>D.endsWith(k));if(x){for(let k of p){let C=k;o.some(i=>C.endsWith(i))||(C=C+x);let S=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(C),d=o.some(i=>C.endsWith(i)),l=o.includes(C);(S||d&&!l)&&r.push({name:C,index:c})}continue}}let f=n!=="\u517C"&&n!=="\u4FC2"&&n!=="of"&&n!=="&"&&n!=="Quality"&&n!=="Innovation"&&n!=="R&D"&&n!=="Solutions"&&n!=="Development"&&n!=="Laboratory"&&n!=="and"&&n!=="Food"&&n!=="Beverage"&&t.allKnownDepartments.has(n),a=o.some(p=>n.endsWith(p)),y=o.includes(n);(f||a&&!y)&&r.push({name:n,index:c})}return r.sort((c,n)=>c.index-n.index),r.map(c=>c.name)},A=(e,t)=>{let r=0;for(let o of t)r<e.length&&o===e[r]&&r++;return r===e.length},B={name:"Standard",parse:(e,t,r="full")=>{let o=E(e.department,"");if(!o)return null;let s=se(o,t.allKnownDepartments),m=new Map;for(let n of s)m.set(n,(m.get(n)||0)+1);let b=n=>{let f=[],a=[];for(let y=0;y<n.length;y++){let p=n[y];if(p==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(p),x=D.rank,k=m.get(p)||0,C=oe(p,k);if(a.length===0)a.push(p);else{let S=a[a.length-1],d=R(S),l=d.rank;if(a.includes(p))f.push(a),a=[p];else{let i=!1;if(C)i=!0;else if(d.type===D.type){let g=_(S),h=_(p);g&&h&&g!==h||S.endsWith("\u672C\u90E8")&&p.endsWith("\u672C\u90E8")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u4E8B\u696D\u90E8")||S.endsWith("\u4E8B\u696D\u90E8")&&p.endsWith("\u90E8\u9580")||S.endsWith("\u90E8\u9580")&&p.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<x}else i=x>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=x&&n.slice(y+1).includes(S)&&(i=!1);i?a.push(p):(f.push(a),a=[p])}}if(C){let S=y+1<n.length?n[y+1]:void 0;ae(p,S)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},c=[];if(r==="full"&&c.push(...b(s)),r==="pure_org"){let n=s.filter(f=>R(f).type!=="Location");n.length>0&&c.push(...b(n))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),y=[],p=(d,l)=>{let i=F(d),g=F(l),h=i<g;if(!h){let T=_(d),P=_(l);if(T&&P&&T!==P)h=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))h=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))h=!0;else{let W=R(d),ee=R(l);W.type==="Other"&&ee.type==="Other"&&(h=!0)}}return h};for(let d of a){let l=$(d,t);if(l.length===0)continue;let i=[];for(let g of l)if(i.length===0)i.push(g);else{let h=i[i.length-1];if(p(h,g))i.push(g);else{y.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let W=i[P];if(p(W,g)){i=[...i.slice(0,P+1),g],T=!0;break}}T||(i=[g])}}i.length>0&&y.push(i)}let D=[...c],x=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of y){let l=!1;for(let i of c){let g=i.findIndex(h=>d.includes(h));if(g!==-1){let h=i[g],T=d.indexOf(h);if(g>0&&T===0){let P=i.slice(0,g);D.push([...P,...d]),l=!0}else if(T>0&&g===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-g,l=!0}if(!l){let h=i[i.length-1],T=d[0];p(h,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],C=[],S=new Set;for(let d of D){let l=d.join("|");S.has(l)||(S.add(l),C.push(d))}for(let d=0;d<C.length;d++){let l=C[d],i=!1;for(let g=0;g<C.length;g++){if(d===g)continue;let h=C[g];if(h.length>l.length&&h.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(h.length>l.length&&A(l,h)){let T=l[l.length-1];if(!x(T)){i=!0;break}}if(l.length===1&&h.length>0){let T=l[0],P=h[h.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(c.length>0){let n=[];for(let f=0;f<c.length;f++){let a=c[f],y=!1;for(let p=0;p<c.length;p++){if(f===p)continue;let D=c[p];if(D.length>a.length&&A(a,D)){y=!0;break}}y||n.push(a)}return n.length>0?n:null}return null}},K={name:"TitleBased",parse:(e,t,r="full")=>{let o=e.title;if(!o)return null;let s=$(o,t);return s.length>0?[s]:null}};var O=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":j(e);case"function":return j(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},j=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var ie=["uncategorizedCompany","unnamedPerson"],le=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${O(e)}`);for(let t of ie){let r=e[t];if(typeof r!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${O(r)}`);if(r.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${O(r)}`)}},pe=[B,K],ce=(e,t)=>{let r=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${r} (${o})`:r},L=e=>e.sort((t,r)=>t.label.localeCompare(r.label,"ja")),z=(e,t,r)=>{let o=e.get(t);if(o)return o;let s=r();return e.set(t,s),s},N=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),v=e=>e.sort((t,r)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(r.contact.title&&r.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(r.label,"ja")}),U=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Q=e=>{let t=L(Array.from(e.children.values())).map(Q),r=v([...e.persons]).map(U);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...r,...t],memberCount:e.personCount}},I=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;le(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let r="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let b of m){let c=b.trim();if(!c||c==="\u517C"||c==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(c)){let f=c.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(c)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let b=E(s.company_name,this.naming.uncategorizedCompany),c=ce(s,this.naming.unnamedPerson),n=`company:${N(b)}`,f=z(this.companyMap,n,()=>({label:b,segment:n,path:`/${n}`,departments:new Map,persons:[],personCount:0})),a=[],y={allKnownDepartments:this.allDepts};for(let p of pe){let D=p.parse(s,y,r);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let p=0;p<a.length;p++){let D=a[p];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(h=>h.contact.person_id===m)||f.persons.push({contact:s,label:c,path:i,segment:l,isPrimary:!0});continue}let x=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${N(l)}`;x=z(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1;for(let g=1;g<D.length;g++){let h=D[g],T=`department:${N(h)}`;if(!x)throw new Error("[contact-map] unexpected null currentDepartmentNode");x=z(x.children,T,()=>({label:h,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=x.path,x.personCount+=1}}else continue;let C=`person:${m}`,S=`${x.path}/${C}`;x.persons.some(l=>l.contact.person_id===m)||x.persons.push({contact:s,label:c,path:S,segment:C,isPrimary:p===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},r=L(Array.from(this.companyMap.values())).map(o=>{let s=L(Array.from(o.departments.values())).map(Q),m=v([...o.persons]).map(U),b={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=b,b});return this.cachedResult={tree:r,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},We=(e,t)=>{let r=new I(t);return r.appendRecords(e),r.getSnapshot()};var w=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},Ne=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,H=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let r of t){let o=w(e[r]);if(o)return{value:o,fieldKey:r}}return{value:null,fieldKey:null}},Le=e=>H(e,["custom_email","email"]),Ie=e=>H(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Fe=e=>{let t=w(e);if(!t)return null;let r=t.replace(/[^0-9+#*]/g,"");return r.length===0?null:`tel:${r}`},Ae=(e,t)=>{let r=w(e);return r?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(r)}`:`mailto:${encodeURIComponent(r)}`:null},$e=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString().split("T")[0]},ue=e=>{if(!e)return"-";let t=typeof e=="string"||typeof e=="number"?new Date(e):e;return!(t instanceof Date)||Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toISOString()},Be=e=>e==null?"-":typeof e=="string"?w(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":e instanceof Date?ue(e):String(e);var je={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},ve={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Ue(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,r=t+e.scrollbarSafetyBuffer,o=r+e.hysteresisSafetyMargin,s=o-r;return{physicalMinWidth:t,collapseThreshold:r,expandThreshold:o,hysteresisWidth:s}}function Qe(e,t,r){return e<=0||!Number.isFinite(e)?!1:t?e>=r.collapseThreshold:e>=r.expandThreshold}var Ve={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};import{formatQuerySets as de,parseQuerySets as me}from"@aiquants/fuzzy-search";import{getNormalizedVariants as fe,normalizeText as he,romajiToKatakana as ge}from"@aiquants/select-box";var G=/[​]/g,ye=/^[\s  ]+|[\s  ]+$/g,be=/\s+/,De=/^[\p{Script=Latin}\s]+$/u,Te=/\p{Script=Latin}/u,J=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1}),X="union",xe=e=>he(e.replace(G,"").replace(ye,""),J),Ce=e=>{if(!De.test(e))return null;let t=ge(e);return Te.test(t)?null:t},Y=e=>e.split(be).filter(Boolean),Z=e=>me(e,X).sets.map(({query:t})=>t),V=e=>Z(e).flatMap(t=>Y(t)),q=e=>de({combine:X,sets:Array.from(new Set(e),t=>({query:t}))}),Se=e=>{let t=Z(e.replace(G,"")).map(o=>Y(xe(o)).join(" ")).filter(o=>o!==""),r=[];for(let o of t){let s=Ce(o);if(s===null)return q(t);r.push(s)}return q(r)},Pe=e=>{let t=new Set([...V(e),...V(Se(e))]),r=new Set;for(let o of t)for(let s of fe(o,J)){let m=s.trim();m&&r.add(m)}return Array.from(r)},ke=/[.*+?^${}()|[\]\\]/g,Re=e=>{let t=Pe(e);if(t.length===0)return null;let r=t.map(o=>o.replace(ke,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(r.join("|"),"gi")},Xe=(e,t)=>{let r=Re(e);if(r===null)return s=>s;let o=s=>t.some(m=>{let b=s[m];return typeof b=="string"&&b.search(r)!==-1});return s=>{let m=[],b=[];for(let c of s)o(c.item)?m.push(c):b.push(c);return[...m,...b]}};import{z as u}from"zod";var _e=u.object({person_id:u.union([u.string(),u.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.number()),person_id_redirect_to:u.union([u.string(),u.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let r=parseInt(t,10);return Number.isNaN(r)?null:r}),full_name:u.string().nullable().optional(),full_name_reading:u.string().nullable().optional(),company_name:u.string().nullable().optional(),company_name_reading:u.string().nullable().optional(),department:u.string().nullable().optional(),title:u.string().nullable().optional(),address:u.string().nullable().optional(),postal_code:u.string().nullable().optional(),email:u.string().nullable().optional(),custom_email:u.string().nullable().optional(),company_phone_number:u.string().nullable().optional(),custom_company_phone_number:u.string().nullable().optional(),company_fax_number:u.string().nullable().optional(),mobile_phone_number:u.string().nullable().optional(),custom_mobile_phone_number:u.string().nullable().optional(),url:u.string().nullable().optional(),contacted_at:u.union([u.date(),u.string()]).nullable().optional(),contacted_by:u.string().nullable().optional(),is_in_eight:u.boolean().nullable().optional(),is_contact_synced:u.boolean().nullable().optional(),is_active:u.boolean(),is_incomplete:u.boolean().nullable().optional(),created_at:u.union([u.date(),u.string()]).optional(),created_by:u.string().optional(),updated_at:u.union([u.date(),u.string()]).optional(),updated_by:u.string().optional()}),et=u.array(_e);export{je as DEFAULT_LIST_LAYOUT_SPEC,ve as DEFAULT_TREE_LAYOUT_SPEC,I as IncrementalTreeBuilder,B as StandardDepartmentParser,K as TitleBasedDepartmentParser,le as assertContactMapTreeNaming,We as buildDirectoryTree,Ue as calculateResponsiveThresholds,Xe as createExactMatchRanker,Re as createSearchQueryPattern,Ve as defaultLogger,Ne as extractContactData,$ as extractDepartmentsFromTitle,$e as formatDate,ue as formatDateTime,Ae as getEmailLinkHref,Qe as getHysteresisBreakpointState,Fe as getPhoneDialHref,Le as getPrimaryEmail,Ie as getPrimaryPhone,Pe as getSearchQuerySpellings,E as normalizeLabel,Se as normalizeSearchInput,w as normalizeString,_e as schemaContactRecord,et as schemaContactRecords,se as splitDepartment,Be as toDisplayValue};
1
+ var E=(e,t)=>e&&e.trim()||t;var ne={\u672C\u90E8:{rank:10,type:"Organization"},\u30AB\u30F3\u30D1\u30CB\u30FC:{rank:10,type:"Organization"},\u672C\u793E:{rank:10,type:"Location"},\u30D6\u30ED\u30C3\u30AF:{rank:11,type:"Location"},\u652F\u5E97:{rank:12,type:"Location"},\u7814\u7A76\u6240:{rank:15,type:"Location"},\u5DE5\u5834:{rank:15,type:"Location"},\u4E8B\u696D\u90E8:{rank:18,type:"Organization"},\u90E8\u9580:{rank:18,type:"Organization"},\u7D71\u62EC\u90E8:{rank:19,type:"Organization"},\u90E8:{rank:20,type:"Organization"},\u958B\u767A:{rank:20,type:"Organization"},\u30B0\u30EB\u30FC\u30D7:{rank:22,type:"Organization"},\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8:{rank:25,type:"Organization"},\u63A8\u9032:{rank:20,type:"Organization"},\u4E8B\u696D\u6240:{rank:25,type:"Location"},\u55B6\u696D\u6240:{rank:28,type:"Location"},\u5BA4:{rank:30,type:"Organization"},\u8AB2:{rank:30,type:"Organization"},\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30D3\u30B8\u30CD\u30B9\u30D7\u30ED\u30C7\u30E5\u30FC\u30B9\u30BB\u30F3\u30BF\u30FC:{rank:30,type:"Location"},\u30C1\u30FC\u30E0:{rank:40,type:"Organization"},\u4FC2:{rank:50,type:"Organization"},Department:{rank:20,type:"Organization"},Dept:{rank:20,type:"Organization"},"Dept.":{rank:20,type:"Organization"},Division:{rank:20,type:"Organization"},Div:{rank:20,type:"Organization"},"Div.":{rank:20,type:"Organization"},Section:{rank:30,type:"Organization"},Sect:{rank:30,type:"Organization"},"Sect.":{rank:30,type:"Organization"},Unit:{rank:30,type:"Organization"},Group:{rank:22,type:"Organization"},Team:{rank:40,type:"Organization"},Branch:{rank:12,type:"Location"},Office:{rank:28,type:"Location"},Center:{rank:30,type:"Location"},Centre:{rank:30,type:"Location"},HQ:{rank:10,type:"Organization"},Headquarters:{rank:10,type:"Organization"}},R=e=>{for(let[t,n]of Object.entries(ne))if(e.endsWith(t))return n;return{rank:99,type:"Other"}},F=e=>R(e).rank,re=["\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","Group","Team","\u5BA4","\u8AB2","Unit","Area","\u90E8","Department","Dept","Division","Div","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032"],M=e=>re.find(t=>e.endsWith(t)),oe=new Set(["&","Quality","Innovation","R&D","Solutions","Development","Laboratory","and","Food","Beverage"]),se=(e,t)=>t>1&&(e.endsWith("\u652F\u5E97")||e.endsWith("\u672C\u90E8")||e.endsWith("\u4E8B\u696D\u6240")||e.endsWith("\u5DE5\u5834")),ae=(e,t)=>{if(!t)return!0;let n=R(e),o=R(t);if(n.rank<o.rank||e.endsWith("\u672C\u90E8")&&t.endsWith("\u672C\u90E8"))return!1;let s=M(e),m=M(t);return!(s&&m&&s!==m)},W=(e,t)=>{if(!e)return[];if(e==="\u517C")return["\u517C"];if(e==="\u517C\u52D9")return["\u517C"];if(e.startsWith("\u517C ")||e.startsWith("\u517C\u3000")){let o=e.slice(1).trim();return["\u517C",...W(o,t)]}if(e.startsWith("\u517C\u52D9 ")||e.startsWith("\u517C\u52D9\u3000")){let o=e.slice(2).trim();return["\u517C",...W(o,t)]}let n="";for(let o=e.length-1;o>0;o--){if(e[o]!==" ")continue;let s=e.slice(0,o);if(!oe.has(s)&&t.has(s)){n=s;break}}if(n){let o=n,s=e.slice(n.length),m=/^\s+(and|&)\s+([A-Za-z0-9]+)/i,h=s.match(m);h&&(o=e.slice(0,n.length+h[0].length));let p=e.slice(o.length),r=["Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"];for(let a of r){let b=new RegExp(`^\\s+${a}\\.?(?=$|[\\s,])`,"i"),c=p.match(b);if(c){o=e.slice(0,o.length+c[0].length);break}}let f=e.slice(o.length).trim();return[o,...W(f,t)]}return[e]},ie=(e,t)=>{let o=e.replace(/[\s\u3000]+(?:兼務|兼)[\s\u3000]+/g,"\u3000\u517C\u3000").replace(/^(?:兼務|兼)[\s\u3000]+/,"\u517C\u3000").replace(/[\s\u3000]+(?:兼務|兼)$/,"\u3000\u517C").split(/\u3000/),s=[];for(let m of o){let h=m.trim();h&&s.push(...W(h,t))}return s},K=(e,t)=>{let n=[],o=["\u90E8","\u8AB2","\u5BA4","\u672C\u90E8","\u652F\u5E97","\u55B6\u696D\u6240","\u30B0\u30EB\u30FC\u30D7","\u30C1\u30FC\u30E0","\u30BB\u30F3\u30BF\u30FC","\u30AB\u30F3\u30D1\u30CB\u30FC","\u4E8B\u696D\u6240","\u5DE5\u5834","\u7814\u7A76\u6240","\u4FC2","\u90E8\u9580","\u4E8B\u696D\u90E8","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8","\u63A8\u9032","\u958B\u767A","Department","Dept","Division","Div","Section","Sect","Unit","Group","Team","Branch","Office","Center","Centre","HQ","Headquarters"],s=e.split(/[\s\u3000,()()[\]]+/).filter(Boolean),m=s.length,h=new Set;for(let p=m;p>=1;p--)for(let r=0;r<=m-p;r++){let f=!1;for(let b=r;b<r+p;b++)if(h.has(b)){f=!0;break}if(f)continue;let a=s.slice(r,r+p).join(" ");if(!(a==="\u517C"||a==="\u517C\u52D9"||a==="\u4FC2"||a==="of"||a==="&"||a==="Quality"||a==="Innovation"||a==="R&D"||a==="Solutions"||a==="Development"||a==="Laboratory"||a==="and"||a==="Food"||a==="Beverage")&&t.allKnownDepartments.has(a)){n.push({name:a,index:r});for(let b=r;b<r+p;b++)h.add(b)}}for(let p=0;p<m;p++){if(h.has(p))continue;let r=s[p];for(r.endsWith("\u9577")&&r.length>1?r=r.slice(0,-1):r.endsWith("\u7D71\u62EC")&&r.length>2&&(r=r.slice(0,-2));;){let c=!1;if(r.startsWith("\u62C5\u5F53")&&r.length>2||r.startsWith("\u5C02\u4EFB")&&r.length>2||r.startsWith("\u517C\u52D9")&&r.length>2?(r=r.slice(2),c=!0):(r.startsWith("\u526F")||r.startsWith("\u517C"))&&r.length>1&&(r=r.slice(1),c=!0),!c)break}if(r.includes("\u30FB")&&!t.allKnownDepartments.has(r)){let c=r.split("\u30FB"),D=c[c.length-1],C=o.find(k=>D.endsWith(k));if(C){for(let k of c){let S=k;o.some(i=>S.endsWith(i))||(S=S+C);let x=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(S),d=o.some(i=>S.endsWith(i)),l=o.includes(S);(x||d&&!l)&&n.push({name:S,index:p})}continue}}let f=r!=="\u517C"&&r!=="\u4FC2"&&r!=="of"&&r!=="&"&&r!=="Quality"&&r!=="Innovation"&&r!=="R&D"&&r!=="Solutions"&&r!=="Development"&&r!=="Laboratory"&&r!=="and"&&r!=="Food"&&r!=="Beverage"&&t.allKnownDepartments.has(r),a=o.some(c=>r.endsWith(c)),b=o.includes(r);(f||a&&!b)&&n.push({name:r,index:p})}return n.sort((p,r)=>p.index-r.index),n.map(p=>p.name)},$=(e,t)=>{let n=0;for(let o of t)n<e.length&&o===e[n]&&n++;return n===e.length},j={name:"Standard",parse:(e,t,n="full")=>{let o=E(e.department,"");if(!o)return null;let s=ie(o,t.allKnownDepartments),m=new Map;for(let r of s)m.set(r,(m.get(r)||0)+1);let h=r=>{let f=[],a=[];for(let b=0;b<r.length;b++){let c=r[b];if(c==="\u517C"){a.length>0&&(f.push(a),a=[]);continue}let D=R(c),C=D.rank,k=m.get(c)||0,S=se(c,k);if(a.length===0)a.push(c);else{let x=a[a.length-1],d=R(x),l=d.rank;if(a.includes(c))f.push(a),a=[c];else{let i=!1;if(S)i=!0;else if(d.type===D.type){let y=M(x),g=M(c);y&&g&&y!==g||x.endsWith("\u672C\u90E8")&&c.endsWith("\u672C\u90E8")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u4E8B\u696D\u90E8")||x.endsWith("\u4E8B\u696D\u90E8")&&c.endsWith("\u90E8\u9580")||x.endsWith("\u90E8\u9580")&&c.endsWith("\u672C\u90E8")||d.type==="Other"&&D.type==="Other"?i=!0:i=l<C}else i=C>=10,i&&d.type==="Location"&&D.type==="Organization"&&l>=C&&r.slice(b+1).includes(x)&&(i=!1);i?a.push(c):(f.push(a),a=[c])}}if(S){let x=b+1<r.length?r[b+1]:void 0;ae(c,x)&&a.length>0&&(f.push(a),a=[])}}return a.length>0&&f.push(a),f},p=[];if(n==="full"&&p.push(...h(s)),n==="pure_org"){let r=s.filter(f=>R(f).type!=="Location");r.length>0&&p.push(...h(r))}if(e.title){let f=/[^\x20-\x7E]/.test(e.title)?/[\s\u3000]*(?:兼務|兼)[\s\u3000]*/:/[,;]|(?:兼務|兼)/,a=e.title.split(f).filter(Boolean),b=[],c=(d,l)=>{let i=F(d),y=F(l),g=i<y;if(!g){let T=M(d),P=M(l);if(T&&P&&T!==P)g=!0;else if(d.endsWith("\u672C\u90E8")&&l.endsWith("\u672C\u90E8"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u4E8B\u696D\u90E8")||d.endsWith("\u4E8B\u696D\u90E8")&&l.endsWith("\u90E8\u9580"))g=!0;else if(d.endsWith("\u90E8\u9580")&&l.endsWith("\u672C\u90E8"))g=!0;else{let N=R(d),te=R(l);N.type==="Other"&&te.type==="Other"&&(g=!0)}}return g};for(let d of a){let l=K(d,t);if(l.length===0)continue;let i=[];for(let y of l)if(i.length===0)i.push(y);else{let g=i[i.length-1];if(c(g,y))i.push(y);else{b.push([...i]);let T=!1;for(let P=i.length-2;P>=0;P--){let N=i[P];if(c(N,y)){i=[...i.slice(0,P+1),y],T=!0;break}}T||(i=[y])}}i.length>0&&b.push(i)}let D=[...p],C=d=>a.some(l=>l.includes(d)&&l.length>d.length);for(let d of b){let l=!1;for(let i of p){let y=i.findIndex(g=>d.includes(g));if(y!==-1){let g=i[y],T=d.indexOf(g);if(y>0&&T===0){let P=i.slice(0,y);D.push([...P,...d]),l=!0}else if(T>0&&y===0){let P=d.slice(0,T);D.push([...P,...i]),D.push(d),l=!0}else d.length>i.length-y,l=!0}if(!l){let g=i[i.length-1],T=d[0];c(g,T)&&(D.push([...i,...d]),l=!0)}}l||D.push(d)}let k=[],S=[],x=new Set;for(let d of D){let l=d.join("|");x.has(l)||(x.add(l),S.push(d))}for(let d=0;d<S.length;d++){let l=S[d],i=!1;for(let y=0;y<S.length;y++){if(d===y)continue;let g=S[y];if(g.length>l.length&&g.slice(0,l.length).join("|")===l.join("|")){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(g.length>l.length&&$(l,g)){let T=l[l.length-1];if(!C(T)){i=!0;break}}if(l.length===1&&g.length>0){let T=l[0],P=g[g.length-1];if(T!==P&&P.endsWith(T)){i=!0;break}}}i||k.push(l)}return k.length>0?k:null}if(p.length>0){let r=[];for(let f=0;f<p.length;f++){let a=p[f],b=!1;for(let c=0;c<p.length;c++){if(f===c)continue;let D=p[c];if(D.length>a.length&&$(a,D)){b=!0;break}}b||r.push(a)}return r.length>0?r:null}return null}},B={name:"TitleBased",parse:(e,t,n="full")=>{let o=e.title;if(!o)return null;let s=K(o,t);return s.length>0?[s]:null}};var O=e=>{switch(typeof e){case"string":return JSON.stringify(e);case"bigint":return`${e}n`;case"symbol":return e.toString();case"object":return e===null?"null":v(e);case"function":return v(e);case"number":return Object.is(e,-0)?"-0":String(e);default:return String(e)}},v=e=>{try{return Object.prototype.toString.call(e)}catch{return"[object ?]"}};var le=["uncategorizedCompany","unnamedPerson"],ce=e=>{if(typeof e!="object"||e===null)throw new TypeError(`[contact-map] tree naming must be an object; got ${O(e)}`);for(let t of le){let n=e[t];if(typeof n!="string")throw new TypeError(`[contact-map] tree naming.${t} must be a string; got ${O(n)}`);if(n.trim()==="")throw new RangeError(`[contact-map] tree naming.${t} must not be empty or blank; got ${O(n)}`)}},pe=[j,B],ue=(e,t)=>{let n=E(e.full_name,t),o=E(e.title,"");return o.length>0?`${n} (${o})`:n},I=e=>e.sort((t,n)=>t.label.localeCompare(n.label,"ja")),w=(e,t,n)=>{let o=e.get(t);if(o)return o;let s=n();return e.set(t,s),s},z=e=>encodeURIComponent(e.replace(/\//g,"\uFF0F")),U=e=>e.sort((t,n)=>{let o=!!(t.contact.title&&t.contact.title.trim().length>0),s=!!(n.contact.title&&n.contact.title.trim().length>0);return o&&!s?-1:!o&&s?1:t.label.localeCompare(n.label,"ja")}),H=e=>({name:e.label,type:"file",absolutePath:e.path,relativePath:e.segment,personId:e.contact.person_id,title:e.contact.title||void 0,isPrimary:e.isPrimary}),Q=e=>{let t=I(Array.from(e.children.values())).map(Q),n=U([...e.persons]).map(H);return{name:e.label,type:"directory",absolutePath:e.path,relativePath:e.segment,children:[...n,...t],memberCount:e.personCount}},A=class{constructor(t){this.companyMap=new Map;this.processedPersonIds=new Set;this.allDepts=new Set;this.cachedResult=null;ce(t),this.naming=t}appendRecords(t){if(!t||t.length===0)return;let n="full",o=!1;for(let s of t)if(!this.processedPersonIds.has(s.person_id)&&s.department){let m=s.department.split(/\u3000/);for(let h of m){let p=h.trim();if(!p||p==="\u517C"||p==="\u4FC2")continue;if(/[^\x20-\x7E]/.test(p)){let f=p.split(" ").filter(a=>a.length>0&&a!=="\u517C"&&a!=="\u4FC2");for(let a of f)this.allDepts.add(a)}else this.allDepts.add(p)}}for(let s of t){let m=s.person_id;if(!Number.isFinite(m)||this.processedPersonIds.has(m))continue;this.processedPersonIds.add(m),o=!0;let h=E(s.company_name,this.naming.uncategorizedCompany),p=ue(s,this.naming.unnamedPerson),r=`company:${z(h)}`,f=w(this.companyMap,r,()=>({label:h,segment:r,path:`/${r}`,departments:new Map,persons:[],personCount:0})),a=[],b={allKnownDepartments:this.allDepts};for(let c of pe){let D=c.parse(s,b,n);if(D&&D.length>0){a=D;break}}a.length===0&&a.push([]);for(let c=0;c<a.length;c++){let D=a[c];if(D.length===0){let l=`person:${m}`,i=`${f.path}/${l}`;f.persons.some(g=>g.contact.person_id===m)||f.persons.push({contact:s,label:p,path:i,segment:l,isPrimary:!0});continue}let C=null,k=f.path;if(D.length>0){let l=D[0],i=`department:${z(l)}`;C=w(f.departments,i,()=>({label:l,segment:i,path:`${k}/${i}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1;for(let y=1;y<D.length;y++){let g=D[y],T=`department:${z(g)}`;if(!C)throw new Error("[contact-map] unexpected null currentDepartmentNode");C=w(C.children,T,()=>({label:g,segment:T,path:`${k}/${T}`,children:new Map,persons:[],personCount:0})),k=C.path,C.personCount+=1}}else continue;let S=`person:${m}`,x=`${C.path}/${S}`;C.persons.some(l=>l.contact.person_id===m)||C.persons.push({contact:s,label:p,path:x,segment:S,isPrimary:c===0})}f.personCount+=1}o&&(this.cachedResult=null)}getSnapshot(){if(this.cachedResult)return this.cachedResult;let t={},n=I(Array.from(this.companyMap.values())).map(o=>{let s=I(Array.from(o.departments.values())).map(Q),m=U([...o.persons]).map(H),h={name:o.label,type:"directory",absolutePath:o.path,relativePath:o.segment,children:[...m,...s],memberCount:o.personCount};return t[o.label]=h,h});return this.cachedResult={tree:n,companyMap:t},this.cachedResult}append(t){this.appendRecords(t)}build(){return this.getSnapshot().tree}reset(){this.companyMap.clear(),this.processedPersonIds.clear(),this.allDepts.clear(),this.cachedResult=null}getUniquePersonCount(){return this.processedPersonIds.size}get size(){return this.processedPersonIds.size}},$e=(e,t)=>{let n=new A(t);return n.appendRecords(e),n.getSnapshot()};var L=e=>{if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null},je=e=>!e||typeof e!="object"?null:"item"in e?e.item??null:"person_id"in e?e:null,V=(e,t)=>{if(!e)return{value:null,fieldKey:null};for(let n of t){let o=L(e[n]);if(o)return{value:o,fieldKey:n}}return{value:null,fieldKey:null}},Be=e=>V(e,["custom_email","email"]),ve=e=>V(e,["custom_mobile_phone_number","mobile_phone_number","company_phone_number"]),Ue=e=>{let t=L(e);if(!t)return null;let n=t.replace(/[^0-9+#*]/g,"");return n.length===0?null:`tel:${n}`},He=(e,t)=>{let n=L(e);return n?t?`https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(n)}`:`mailto:${encodeURIComponent(n)}`:null},_=(e,t)=>String(e).padStart(t,"0"),de=e=>`${_(e.getUTCFullYear(),4)}-${_(e.getUTCMonth()+1,2)}-${_(e.getUTCDate(),2)}`,Qe=e=>`${de(e)} ${_(e.getUTCHours(),2)}:${_(e.getUTCMinutes(),2)}:${_(e.getUTCSeconds(),2)}`,Ve=e=>`${_(e.getFullYear(),4)}-${_(e.getMonth()+1,2)}-${_(e.getDate(),2)} ${_(e.getHours(),2)}:${_(e.getMinutes(),2)}:${_(e.getSeconds(),2)}`,Ge=(e,t)=>{if(e==null||e==="")return"-";let n=typeof e=="string"?new Date(e):e;return Number.isNaN(n.getTime())?typeof e=="string"?e:"-":t(n)},qe=e=>e==null?"-":typeof e=="string"?L(e)??"-":typeof e=="number"?Number.isFinite(e)?String(e):"-":String(e);var Xe={listPanelMinWidth:320,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35},Ye={listPanelMinWidth:280,detailPanelMinWidth:260,handleThickness:10,listPaddingAndBorder:0,detailPaddingAndBorder:0,scrollbarSafetyBuffer:20,hysteresisSafetyMargin:35};function Ze(e){let t=e.listPanelMinWidth+e.detailPanelMinWidth+e.handleThickness+e.listPaddingAndBorder+e.detailPaddingAndBorder,n=t+e.scrollbarSafetyBuffer,o=n+e.hysteresisSafetyMargin,s=o-n;return{physicalMinWidth:t,collapseThreshold:n,expandThreshold:o,hysteresisWidth:s}}function et(e,t,n){return e<=0||!Number.isFinite(e)?!1:t?e>=n.collapseThreshold:e>=n.expandThreshold}var nt={info:(e,...t)=>console.info(`[contact-map] ${e}`,...t),warn:(e,...t)=>console.warn(`[contact-map] ${e}`,...t),error:(e,...t)=>console.error(`[contact-map] ${e}`,...t)};import{formatQuerySets as me,parseQuerySets as fe}from"@aiquants/fuzzy-search";import{getNormalizedVariants as ge,normalizeText as he,romajiToKatakana as ye}from"@aiquants/select-box";var J=/[​]/g,be=/^[\s  ]+|[\s  ]+$/g,De=/\s+/,Te=/^[\p{Script=Latin}\s]+$/u,Ce=/\p{Script=Latin}/u,X=Object.freeze({convertWidth:!0,convertKana:!0,convertCase:!0,convertRomaji:!1,normalizeVariants:!1,ignoreSpaces:!1,ignoreSymbols:!1,ignoreLongVowels:!1}),Y="union",Se=65377,xe=65439,Pe=["\uFF9E","\uFF9F"],ke=(()=>{let e=new Map;for(let t=Se;t<=xe;t+=1){let n=String.fromCharCode(t);e.set(n.normalize("NFKC"),n);for(let o of Pe){let s=(n+o).normalize("NFKC");s.length===1&&e.set(s,n+o)}}return e})(),_e=/[぀-ヿ]/u,Re=e=>{let t=Array.from(e,n=>ke.get(n)??n).join("");return _e.test(t)?null:t},Me=e=>he(e.replace(J,"").replace(be,""),X),Ee=e=>{if(!Te.test(e))return null;let t=ye(e);return Ce.test(t)?null:t},Z=e=>e.split(De).filter(Boolean),ee=e=>fe(e,Y).sets.map(({query:t})=>t),G=e=>ee(e).flatMap(t=>Z(t)),q=e=>me({combine:Y,sets:Array.from(new Set(e),t=>({query:t}))}),We=e=>{let t=ee(e.replace(J,"")).map(o=>Z(Me(o)).join(" ")).filter(o=>o!==""),n=[];for(let o of t){let s=Ee(o);if(s===null)return q(t);n.push(s)}return q(n)},Oe=e=>{let t=new Set([...G(e),...G(We(e))]),n=new Set;for(let o of t)for(let s of ge(o,X)){let m=s.trim();if(!m)continue;n.add(m);let h=Re(m);h!==null&&n.add(h)}return Array.from(n)},Le=/[.*+?^${}()|[\]\\]/g,Ne=e=>{let t=Oe(e);if(t.length===0)return null;let n=t.map(o=>o.replace(Le,"\\$&")).sort((o,s)=>s.length-o.length);return new RegExp(n.join("|"),"gi")},at=(e,t)=>{let n=Ne(e);if(n===null)return s=>s;let o=s=>t.some(m=>{let h=s[m];return typeof h=="string"&&h.search(n)!==-1});return s=>{let m=[],h=[];for(let p of s)o(p.item)?m.push(p):h.push(p);return[...m,...h]}};import{z as u}from"zod";var we=u.object({person_id:u.union([u.string(),u.number()]).transform(e=>{if(typeof e=="number")return e;let t=e.trim();return parseInt(t,10)}).pipe(u.number()),person_id_redirect_to:u.union([u.string(),u.number()]).nullable().optional().transform(e=>{if(e==null)return null;if(typeof e=="number")return e;let t=e.trim();if(t.length===0)return null;let n=parseInt(t,10);return Number.isNaN(n)?null:n}),full_name:u.string().nullable().optional(),full_name_reading:u.string().nullable().optional(),company_name:u.string().nullable().optional(),company_name_reading:u.string().nullable().optional(),department:u.string().nullable().optional(),title:u.string().nullable().optional(),address:u.string().nullable().optional(),postal_code:u.string().nullable().optional(),email:u.string().nullable().optional(),custom_email:u.string().nullable().optional(),company_phone_number:u.string().nullable().optional(),custom_company_phone_number:u.string().nullable().optional(),company_fax_number:u.string().nullable().optional(),mobile_phone_number:u.string().nullable().optional(),custom_mobile_phone_number:u.string().nullable().optional(),url:u.string().nullable().optional(),contacted_at:u.union([u.date(),u.string()]).nullable().optional(),contacted_by:u.string().nullable().optional(),is_in_eight:u.boolean().nullable().optional(),is_contact_synced:u.boolean().nullable().optional(),is_active:u.boolean(),is_incomplete:u.boolean().nullable().optional(),created_at:u.union([u.date(),u.string()]).optional(),created_by:u.string().optional(),updated_at:u.union([u.date(),u.string()]).optional(),updated_by:u.string().optional()}),ct=u.array(we);export{X as CONTACT_MAP_SEARCH_NORMALIZE_OPTIONS,Xe as DEFAULT_LIST_LAYOUT_SPEC,Ye as DEFAULT_TREE_LAYOUT_SPEC,A as IncrementalTreeBuilder,j as StandardDepartmentParser,B as TitleBasedDepartmentParser,ce as assertContactMapTreeNaming,$e as buildDirectoryTree,Ze as calculateResponsiveThresholds,at as createExactMatchRanker,Ne as createSearchQueryPattern,nt as defaultLogger,je as extractContactData,K as extractDepartmentsFromTitle,Ve as formatLocalDateTime,Ge as formatRecordTimestamp,de as formatStoredDate,Qe as formatStoredDateTime,He as getEmailLinkHref,et as getHysteresisBreakpointState,Ue as getPhoneDialHref,Be as getPrimaryEmail,ve as getPrimaryPhone,Oe as getSearchQuerySpellings,E as normalizeLabel,We as normalizeSearchInput,L as normalizeString,we as schemaContactRecord,ct as schemaContactRecords,ie as splitDepartment,qe as toDisplayValue};
package/dist/server.d.mts CHANGED
@@ -37,17 +37,9 @@ interface ContactMapAuthResult {
37
37
  } | null;
38
38
  cookie?: string;
39
39
  }
40
- interface ContactMapAuthenticate {
41
- (request: Request, options: {
42
- failureRedirect: string;
43
- }): Promise<{
44
- user: unknown;
45
- cookie?: string;
46
- }>;
47
- (request: Request, options: {
48
- failureRedirect: null;
49
- }): Promise<ContactMapAuthResult>;
50
- }
40
+ type ContactMapAuthenticate = (request: Request, options: {
41
+ failureRedirect: null;
42
+ }) => Promise<ContactMapAuthResult>;
51
43
  interface QueryOptions {
52
44
  signal?: AbortSignal;
53
45
  }
package/dist/server.d.ts CHANGED
@@ -37,17 +37,9 @@ interface ContactMapAuthResult {
37
37
  } | null;
38
38
  cookie?: string;
39
39
  }
40
- interface ContactMapAuthenticate {
41
- (request: Request, options: {
42
- failureRedirect: string;
43
- }): Promise<{
44
- user: unknown;
45
- cookie?: string;
46
- }>;
47
- (request: Request, options: {
48
- failureRedirect: null;
49
- }): Promise<ContactMapAuthResult>;
50
- }
40
+ type ContactMapAuthenticate = (request: Request, options: {
41
+ failureRedirect: null;
42
+ }) => Promise<ContactMapAuthResult>;
51
43
  interface QueryOptions {
52
44
  signal?: AbortSignal;
53
45
  }
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var x=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var tt=Object.prototype.hasOwnProperty;var et=(t,e)=>{for(var r in e)x(t,r,{get:e[r],enumerable:!0})},rt=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of J(e))!tt.call(t,c)&&c!==r&&x(t,c,{get:()=>e[c],enumerable:!(s=G(e,c))||s.enumerable});return t};var nt=t=>rt(x({},"__esModule",{value:!0}),t);var _t={};et(_t,{DEFAULT_STREAM_CHUNK_SIZE:()=>O,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE:()=>B,countActiveContactsQuery:()=>R,createContactMapServer:()=>pt,createContactMapStreamHandler:()=>H,defineContactMapTable:()=>ft,getContactsStreamChunkQuery:()=>A});module.exports=nt(_t);var a=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":M(t);case"function":return M(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},M=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var L={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var v=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,T=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`)};var o=require("drizzle-orm");var D=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var ot=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,st=/^(0|-?[1-9]\d*)$/,at=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,ct=23,j="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",U=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,E=t=>{if(!ot.test(t))return!1;let e=`${t.slice(0,ct)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},q=t=>{let e=at.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!E(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${a(t)}`);return r},Q=t=>t.slice(0,-1),z=t=>Number.isSafeInteger(t),F=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);if(!z(e))throw new RangeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);return e},V=t=>{if(!st.test(t))return null;let e=Number(t);return z(e)?e:null},Y=t=>F("the database value of the stream cursor's person_id",t),Z=t=>{if(t===null)return;if(!D(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${a(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`);if(!E(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`)}F("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var O=200,w=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function R(t,e,r,s){return w(s?.signal),await r(),w(s?.signal),(await t.select({count:o.sql`count(*)`}).from(e).where((0,o.eq)(e.is_active,!0)))[0]?.count??0}async function A(t,e,r,s,c,d){T("getContactsStreamChunkQuery limit",s),Z(r),w(d?.signal),await c(),w(d?.signal);let _=(0,o.eq)(e.is_active,!0),C=_;if(r){let{contacted_at:u,person_id:y}=r;if(u!==null){let l=o.sql`CAST(${Q(u)} AS datetime2(7))`,S=(0,o.and)(_,(0,o.or)((0,o.lt)(e.contacted_at,l),(0,o.and)((0,o.eq)(e.contacted_at,l),(0,o.lt)(e.person_id,y)),(0,o.isNull)(e.contacted_at)));S&&(C=S)}else{let l=(0,o.and)(_,(0,o.isNull)(e.contacted_at),(0,o.lt)(e.person_id,y));l&&(C=l)}}let g=await t.select({record:e,cursorContactedAt:o.sql`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(C).orderBy((0,o.desc)(e.contacted_at),(0,o.desc)(e.person_id)).offset(0).fetch(s);w(d?.signal);let m=g.length>0?g[g.length-1]:null,h=m?{contacted_at:m.cursorContactedAt===null?null:q(m.cursorContactedAt),person_id:Y(m.record.person_id)}:null,b=g.length<s;return{records:g.map(u=>u.record),nextCursor:h,isLast:b}}var it=100,ut=300,B="stream interrupted by server error",dt=/^datetime2(\([0-7]\))?$/;function mt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let s=V(e);return s===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:s}}:E(r)?{ok:!0,cursor:{contacted_at:r,person_id:s}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function lt(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${a(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${a(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(e)}`);let r=e.getSQLType();if(typeof r!="string"||!dt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${a(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${a(t.authenticate)}`);for(let s of["firstBatchSize","nextBatchSize"])t[s]!==void 0&&T(`server config ${s}`,t[s]," (leave it out for the default)")}function H(t){lt(t);let{db:e,table:r,ensureConnection:s,authenticate:c,logger:d=L,firstBatchSize:_=it,nextBatchSize:C=ut,streamErrorClientMessage:g=B}=t;return async m=>{let h=m instanceof Request?m:m.request,b=mt(new URL(h.url).searchParams);if(!b.ok)return Response.json({error:b.message},{status:400});let u,y;try{let i=await c(h,{failureRedirect:null});y=i.user,u=i.cookie}catch(i){return d.error("Authentication infrastructure error:",i),Response.json({error:"\u8A8D\u8A3C\u51E6\u7406\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002"},{status:500})}if(!y)return Response.json({error:"Unauthorized"},{status:401,headers:u?{"Set-Cookie":u}:void 0});let l=b.cursor,S=_,P=!0,k=null,$=new TextEncoder,p=new AbortController;h.signal.aborted?p.abort():h.signal.addEventListener("abort",()=>{p.abort()},{once:!0});let K=new ReadableStream({async pull(i){if(p.signal.aborted||h.signal.aborted){i.close();return}try{let f=await A(e,r,l,S,s,{signal:p.signal});S=C;let W={records:f.records,nextCursor:f.nextCursor,isLast:f.isLast};if(P&&(P=!1,k=R(e,r,s,{signal:p.signal}).then(N=>{if(!p.signal.aborted)try{let X={type:"METADATA",total:N};i.enqueue($.encode(`${JSON.stringify(X)}
1
+ "use strict";var O=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var tt=Object.prototype.hasOwnProperty;var et=(t,e)=>{for(var r in e)O(t,r,{get:e[r],enumerable:!0})},rt=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of J(e))!tt.call(t,c)&&c!==r&&O(t,c,{get:()=>e[c],enumerable:!(s=G(e,c))||s.enumerable});return t};var nt=t=>rt(O({},"__esModule",{value:!0}),t);var gt={};et(gt,{DEFAULT_STREAM_CHUNK_SIZE:()=>x,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE:()=>Z,countActiveContactsQuery:()=>R,createContactMapServer:()=>ft,createContactMapStreamHandler:()=>B,defineContactMapTable:()=>_t,getContactsStreamChunkQuery:()=>A});module.exports=nt(gt);var a=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":M(t);case"function":return M(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},M=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var L={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var v=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,T=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${v}${r}; got ${a(e)}`)};var o=require("drizzle-orm");var D=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var ot=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,st=/^(0|-?[1-9]\d*)$/,at=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,ct=23,j="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",U=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,E=t=>{if(!ot.test(t))return!1;let e=`${t.slice(0,ct)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},q=t=>{let e=at.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!E(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${a(t)}`);return r},Q=t=>t.slice(0,-1),z=t=>Number.isSafeInteger(t),F=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);if(!z(e))throw new RangeError(`[contact-map] ${t} must be ${U}; got ${a(e)}`);return e},V=t=>{if(!st.test(t))return null;let e=Number(t);return z(e)?e:null},Y=t=>F("the database value of the stream cursor's person_id",t),H=t=>{if(t===null)return;if(!D(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${a(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`);if(!E(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${j}; got ${a(e)}`)}F("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var x=200,w=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function R(t,e,r,s){return w(s?.signal),await r(),w(s?.signal),(await t.select({count:o.sql`count(*)`}).from(e).where((0,o.eq)(e.is_active,!0)))[0]?.count??0}async function A(t,e,r,s,c,d){T("getContactsStreamChunkQuery limit",s),H(r),w(d?.signal),await c(),w(d?.signal);let _=(0,o.eq)(e.is_active,!0),C=_;if(r){let{contacted_at:u,person_id:y}=r;if(u!==null){let l=o.sql`CAST(${Q(u)} AS datetime2(7))`,S=(0,o.and)(_,(0,o.or)((0,o.lt)(e.contacted_at,l),(0,o.and)((0,o.eq)(e.contacted_at,l),(0,o.lt)(e.person_id,y)),(0,o.isNull)(e.contacted_at)));S&&(C=S)}else{let l=(0,o.and)(_,(0,o.isNull)(e.contacted_at),(0,o.lt)(e.person_id,y));l&&(C=l)}}let g=await t.select({record:e,cursorContactedAt:o.sql`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(C).orderBy((0,o.desc)(e.contacted_at),(0,o.desc)(e.person_id)).offset(0).fetch(s);w(d?.signal);let m=g.length>0?g[g.length-1]:null,h=m?{contacted_at:m.cursorContactedAt===null?null:q(m.cursorContactedAt),person_id:Y(m.record.person_id)}:null,b=g.length<s;return{records:g.map(u=>u.record),nextCursor:h,isLast:b}}var it=100,ut=300,Z="stream interrupted by server error",dt="authentication failed on the server",mt=/^datetime2(\([0-7]\))?$/;function lt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let s=V(e);return s===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:s}}:E(r)?{ok:!0,cursor:{contacted_at:r,person_id:s}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function pt(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${a(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${a(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(e)}`);let r=e.getSQLType();if(typeof r!="string"||!mt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${a(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${a(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${a(t.authenticate)}`);for(let s of["firstBatchSize","nextBatchSize"])t[s]!==void 0&&T(`server config ${s}`,t[s]," (leave it out for the default)")}function B(t){pt(t);let{db:e,table:r,ensureConnection:s,authenticate:c,logger:d=L,firstBatchSize:_=it,nextBatchSize:C=ut,streamErrorClientMessage:g=Z}=t;return async m=>{let h=m instanceof Request?m:m.request,b=lt(new URL(h.url).searchParams);if(!b.ok)return Response.json({error:b.message},{status:400});let u,y;try{let i=await c(h,{failureRedirect:null});y=i.user,u=i.cookie}catch(i){return d.error("Authentication infrastructure error:",i),Response.json({error:dt},{status:500})}if(!y)return Response.json({error:"Unauthorized"},{status:401,headers:u?{"Set-Cookie":u}:void 0});let l=b.cursor,S=_,P=!0,k=null,$=new TextEncoder,p=new AbortController;h.signal.aborted?p.abort():h.signal.addEventListener("abort",()=>{p.abort()},{once:!0});let K=new ReadableStream({async pull(i){if(p.signal.aborted||h.signal.aborted){i.close();return}try{let f=await A(e,r,l,S,s,{signal:p.signal});S=C;let W={records:f.records,nextCursor:f.nextCursor,isLast:f.isLast};if(P&&(P=!1,k=R(e,r,s,{signal:p.signal}).then(N=>{if(!p.signal.aborted)try{let X={type:"METADATA",total:N};i.enqueue($.encode(`${JSON.stringify(X)}
2
2
  `))}catch{}}).catch(N=>{d.warn("Non-blocking countActiveContacts failed:",N)})),i.enqueue($.encode(`${JSON.stringify(W)}
3
3
  `)),f.isLast||!f.nextCursor){k&&await k,i.close();return}l=f.nextCursor}catch(f){if(p.signal.aborted){try{i.close()}catch{}return}d.error("Streaming error during chunk fetch:",f);try{i.enqueue($.encode(`${JSON.stringify({error:g})}
4
- `)),i.close()}catch{}}},cancel(){p.abort()}}),I=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return u&&I.set("Set-Cookie",u),new Response(K,{headers:I})}}function pt(t){return{streamLoader:H(t),countActiveContacts:c=>R(t.db,t.table,t.ensureConnection,c),getContactsStreamChunk:(c=null,d=O,_)=>A(t.db,t.table,c,d,t.ensureConnection,_)}}var n=require("drizzle-orm/mssql-core");function ft(t,e){return t.table(e,{person_id:(0,n.bigint)("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:(0,n.bigint)("person_id_redirect_to",{mode:"number"}),full_name:(0,n.nvarchar)("full_name",{length:1e3}),full_name_reading:(0,n.nvarchar)("full_name_reading",{length:1e3}),company_name:(0,n.nvarchar)("company_name",{length:1e3}),company_name_reading:(0,n.nvarchar)("company_name_reading",{length:1e3}),department:(0,n.nvarchar)("department",{length:1e3}),title:(0,n.nvarchar)("title",{length:1e3}),address:(0,n.nvarchar)("address",{length:1e3}),postal_code:(0,n.nvarchar)("postal_code",{length:100}),email:(0,n.nvarchar)("email",{length:100}),custom_email:(0,n.nvarchar)("custom_email",{length:100}),company_phone_number:(0,n.nvarchar)("company_phone_number",{length:100}),custom_company_phone_number:(0,n.nvarchar)("custom_company_phone_number",{length:100}),company_fax_number:(0,n.nvarchar)("company_fax_number",{length:100}),mobile_phone_number:(0,n.nvarchar)("mobile_phone_number",{length:100}),custom_mobile_phone_number:(0,n.nvarchar)("custom_mobile_phone_number",{length:100}),url:(0,n.nvarchar)("url",{length:100}),contacted_at:(0,n.datetime2)("contacted_at",{precision:7}),contacted_by:(0,n.nvarchar)("contacted_by",{length:100}),is_in_eight:(0,n.bit)("is_in_eight").default(!0).notNull(),is_contact_synced:(0,n.bit)("is_contact_synced").default(!1).notNull(),is_active:(0,n.bit)("is_active").default(!0).notNull(),is_incomplete:(0,n.bit)("is_incomplete").default(!1).notNull(),created_at:(0,n.datetime2)("created_at",{precision:7}),created_by:(0,n.nvarchar)("created_by",{length:50}),updated_at:(0,n.datetime2)("updated_at",{precision:7}),updated_by:(0,n.nvarchar)("updated_by",{length:50})},r=>[(0,n.primaryKey)({columns:[r.person_id]})])}0&&(module.exports={DEFAULT_STREAM_CHUNK_SIZE,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,countActiveContactsQuery,createContactMapServer,createContactMapStreamHandler,defineContactMapTable,getContactsStreamChunkQuery});
4
+ `)),i.close()}catch{}}},cancel(){p.abort()}}),I=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return u&&I.set("Set-Cookie",u),new Response(K,{headers:I})}}function ft(t){return{streamLoader:B(t),countActiveContacts:c=>R(t.db,t.table,t.ensureConnection,c),getContactsStreamChunk:(c=null,d=x,_)=>A(t.db,t.table,c,d,t.ensureConnection,_)}}var n=require("drizzle-orm/mssql-core");function _t(t,e){return t.table(e,{person_id:(0,n.bigint)("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:(0,n.bigint)("person_id_redirect_to",{mode:"number"}),full_name:(0,n.nvarchar)("full_name",{length:1e3}),full_name_reading:(0,n.nvarchar)("full_name_reading",{length:1e3}),company_name:(0,n.nvarchar)("company_name",{length:1e3}),company_name_reading:(0,n.nvarchar)("company_name_reading",{length:1e3}),department:(0,n.nvarchar)("department",{length:1e3}),title:(0,n.nvarchar)("title",{length:1e3}),address:(0,n.nvarchar)("address",{length:1e3}),postal_code:(0,n.nvarchar)("postal_code",{length:100}),email:(0,n.nvarchar)("email",{length:100}),custom_email:(0,n.nvarchar)("custom_email",{length:100}),company_phone_number:(0,n.nvarchar)("company_phone_number",{length:100}),custom_company_phone_number:(0,n.nvarchar)("custom_company_phone_number",{length:100}),company_fax_number:(0,n.nvarchar)("company_fax_number",{length:100}),mobile_phone_number:(0,n.nvarchar)("mobile_phone_number",{length:100}),custom_mobile_phone_number:(0,n.nvarchar)("custom_mobile_phone_number",{length:100}),url:(0,n.nvarchar)("url",{length:100}),contacted_at:(0,n.datetime2)("contacted_at",{precision:7}),contacted_by:(0,n.nvarchar)("contacted_by",{length:100}),is_in_eight:(0,n.bit)("is_in_eight").default(!0).notNull(),is_contact_synced:(0,n.bit)("is_contact_synced").default(!1).notNull(),is_active:(0,n.bit)("is_active").default(!0).notNull(),is_incomplete:(0,n.bit)("is_incomplete").default(!1).notNull(),created_at:(0,n.datetime2)("created_at",{precision:7}),created_by:(0,n.nvarchar)("created_by",{length:50}),updated_at:(0,n.datetime2)("updated_at",{precision:7}),updated_by:(0,n.nvarchar)("updated_by",{length:50})},r=>[(0,n.primaryKey)({columns:[r.person_id]})])}0&&(module.exports={DEFAULT_STREAM_CHUNK_SIZE,DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,countActiveContactsQuery,createContactMapServer,createContactMapStreamHandler,defineContactMapTable,getContactsStreamChunkQuery});
package/dist/server.mjs CHANGED
@@ -1,4 +1,4 @@
1
- var s=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":D(t);case"function":return D(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},D=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var j={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var U=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,w=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`)};import{and as $,desc as W,eq as x,isNull as X,lt as N,or as ct,sql as O}from"drizzle-orm";var q=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var nt=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,ot=/^(0|-?[1-9]\d*)$/,st=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,at=23,Q="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",z=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,T=t=>{if(!nt.test(t))return!1;let e=`${t.slice(0,at)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},F=t=>{let e=st.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!T(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${s(t)}`);return r},V=t=>t.slice(0,-1),Y=t=>Number.isSafeInteger(t),Z=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);if(!Y(e))throw new RangeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);return e},B=t=>{if(!ot.test(t))return null;let e=Number(t);return Y(e)?e:null},H=t=>Z("the database value of the stream cursor's person_id",t),K=t=>{if(t===null)return;if(!q(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${s(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`);if(!T(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`)}Z("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var G=200,S=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function P(t,e,r,o){return S(o?.signal),await r(),S(o?.signal),(await t.select({count:O`count(*)`}).from(e).where(x(e.is_active,!0)))[0]?.count??0}async function I(t,e,r,o,u,i){w("getContactsStreamChunkQuery limit",o),K(r),S(i?.signal),await u(),S(i?.signal);let f=x(e.is_active,!0),h=f;if(r){let{contacted_at:c,person_id:b}=r;if(c!==null){let m=O`CAST(${V(c)} AS datetime2(7))`,y=$(f,ct(N(e.contacted_at,m),$(x(e.contacted_at,m),N(e.person_id,b)),X(e.contacted_at)));y&&(h=y)}else{let m=$(f,X(e.contacted_at),N(e.person_id,b));m&&(h=m)}}let _=await t.select({record:e,cursorContactedAt:O`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(h).orderBy(W(e.contacted_at),W(e.person_id)).offset(0).fetch(o);S(i?.signal);let d=_.length>0?_[_.length-1]:null,g=d?{contacted_at:d.cursorContactedAt===null?null:F(d.cursorContactedAt),person_id:H(d.record.person_id)}:null,C=_.length<o;return{records:_.map(c=>c.record),nextCursor:g,isLast:C}}var it=100,ut=300,dt="stream interrupted by server error",mt=/^datetime2(\([0-7]\))?$/;function lt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let o=B(e);return o===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:o}}:T(r)?{ok:!0,cursor:{contacted_at:r,person_id:o}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function pt(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${s(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${s(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(e)}`);let r=e.getSQLType();if(typeof r!="string"||!mt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${s(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${s(t.authenticate)}`);for(let o of["firstBatchSize","nextBatchSize"])t[o]!==void 0&&w(`server config ${o}`,t[o]," (leave it out for the default)")}function ft(t){pt(t);let{db:e,table:r,ensureConnection:o,authenticate:u,logger:i=j,firstBatchSize:f=it,nextBatchSize:h=ut,streamErrorClientMessage:_=dt}=t;return async d=>{let g=d instanceof Request?d:d.request,C=lt(new URL(g.url).searchParams);if(!C.ok)return Response.json({error:C.message},{status:400});let c,b;try{let a=await u(g,{failureRedirect:null});b=a.user,c=a.cookie}catch(a){return i.error("Authentication infrastructure error:",a),Response.json({error:"\u8A8D\u8A3C\u51E6\u7406\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002"},{status:500})}if(!b)return Response.json({error:"Unauthorized"},{status:401,headers:c?{"Set-Cookie":c}:void 0});let m=C.cursor,y=f,L=!0,R=null,A=new TextEncoder,l=new AbortController;g.signal.aborted?l.abort():g.signal.addEventListener("abort",()=>{l.abort()},{once:!0});let tt=new ReadableStream({async pull(a){if(l.signal.aborted||g.signal.aborted){a.close();return}try{let p=await I(e,r,m,y,o,{signal:l.signal});y=h;let et={records:p.records,nextCursor:p.nextCursor,isLast:p.isLast};if(L&&(L=!1,R=P(e,r,o,{signal:l.signal}).then(k=>{if(!l.signal.aborted)try{let rt={type:"METADATA",total:k};a.enqueue(A.encode(`${JSON.stringify(rt)}
1
+ var s=t=>{switch(typeof t){case"string":return JSON.stringify(t);case"bigint":return`${t}n`;case"symbol":return t.toString();case"object":return t===null?"null":D(t);case"function":return D(t);case"number":return Object.is(t,-0)?"-0":String(t);default:return String(t)}},D=t=>{try{return Object.prototype.toString.call(t)}catch{return"[object ?]"}};var j={info:(t,...e)=>console.info(`[contact-map] ${t}`,...e),warn:(t,...e)=>console.warn(`[contact-map] ${t}`,...e),error:(t,...e)=>console.error(`[contact-map] ${t}`,...e)};var U=`an integer from 1 to ${Number.MAX_SAFE_INTEGER}`,w=(t,e,r="")=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`);if(!(Number.isSafeInteger(e)&&e>0))throw new RangeError(`[contact-map] ${t} must be ${U}${r}; got ${s(e)}`)};import{and as $,desc as W,eq as O,isNull as X,lt as N,or as ct,sql as x}from"drizzle-orm";var q=t=>{if(typeof t!="object"||t===null)return!1;try{let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}catch{return!1}};var nt=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{7}Z$/,ot=/^(0|-?[1-9]\d*)$/,st=/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}\.\d{7})$/,at=23,Q="a UTC timestamp with 7 fractional digits as the server writes it (YYYY-MM-DDThh:mm:ss.fffffffZ), or null",z=`an integer from ${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}`,T=t=>{if(!nt.test(t))return!1;let e=`${t.slice(0,at)}Z`,r=new Date(e);return!Number.isNaN(r.getTime())&&r.toISOString()===e&&r.getUTCFullYear()>=1},F=t=>{let e=st.exec(t),r=e===null?null:`${e[1]}T${e[2]}Z`;if(r===null||!T(r))throw new TypeError(`[contact-map] the database text of the stream cursor's contacted_at must be YYYY-MM-DD hh:mm:ss.fffffff (CONVERT style 121 of datetime2(7)); got ${s(t)}`);return r},V=t=>t.slice(0,-1),Y=t=>Number.isSafeInteger(t),H=(t,e)=>{if(typeof e!="number")throw new TypeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);if(!Y(e))throw new RangeError(`[contact-map] ${t} must be ${z}; got ${s(e)}`);return e},Z=t=>{if(!ot.test(t))return null;let e=Number(t);return Y(e)?e:null},B=t=>H("the database value of the stream cursor's person_id",t),K=t=>{if(t===null)return;if(!q(t))throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor must be null or a plain object { contacted_at, person_id } as the server writes it; got ${s(t)}`);let e=t.contacted_at;if(e!==null){if(typeof e!="string")throw new TypeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`);if(!T(e))throw new RangeError(`[contact-map] getContactsStreamChunkQuery cursor.contacted_at must be ${Q}; got ${s(e)}`)}H("getContactsStreamChunkQuery cursor.person_id",t.person_id)};var G=200,S=t=>{if(t?.aborted)throw new DOMException("The operation was aborted","AbortError")};async function P(t,e,r,o){return S(o?.signal),await r(),S(o?.signal),(await t.select({count:x`count(*)`}).from(e).where(O(e.is_active,!0)))[0]?.count??0}async function I(t,e,r,o,u,i){w("getContactsStreamChunkQuery limit",o),K(r),S(i?.signal),await u(),S(i?.signal);let f=O(e.is_active,!0),h=f;if(r){let{contacted_at:c,person_id:b}=r;if(c!==null){let m=x`CAST(${V(c)} AS datetime2(7))`,y=$(f,ct(N(e.contacted_at,m),$(O(e.contacted_at,m),N(e.person_id,b)),X(e.contacted_at)));y&&(h=y)}else{let m=$(f,X(e.contacted_at),N(e.person_id,b));m&&(h=m)}}let _=await t.select({record:e,cursorContactedAt:x`CONVERT(varchar(27), CAST(${e.contacted_at} AS datetime2(7)), 121)`}).from(e).where(h).orderBy(W(e.contacted_at),W(e.person_id)).offset(0).fetch(o);S(i?.signal);let d=_.length>0?_[_.length-1]:null,g=d?{contacted_at:d.cursorContactedAt===null?null:F(d.cursorContactedAt),person_id:B(d.record.person_id)}:null,C=_.length<o;return{records:_.map(c=>c.record),nextCursor:g,isLast:C}}var it=100,ut=300,dt="stream interrupted by server error",mt="authentication failed on the server",lt=/^datetime2(\([0-7]\))?$/;function pt(t){let e=t.get("cursor_person_id"),r=t.get("cursor_contacted_at");if(e===null)return r!==null?{ok:!1,message:"cursor_contacted_at requires cursor_person_id"}:{ok:!0,cursor:null};let o=Z(e);return o===null?{ok:!1,message:`Invalid cursor_person_id: ${e}`}:r===null?{ok:!0,cursor:{contacted_at:null,person_id:o}}:T(r)?{ok:!0,cursor:{contacted_at:r,person_id:o}}:{ok:!1,message:`Invalid cursor_contacted_at: ${r}`}}function ft(t){if(t.db===void 0||t.db===null)throw new TypeError(`[contact-map] server config db must be the Drizzle database the contact records are read from; got ${s(t.db)}`);if(t.table===void 0||t.table===null)throw new TypeError(`[contact-map] server config table must be the Drizzle table of the contact records; got ${s(t.table)}`);let e=t.table.contacted_at;if(typeof e?.getSQLType!="function")throw new TypeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(e)}`);let r=e.getSQLType();if(typeof r!="string"||!lt.test(r))throw new RangeError(`[contact-map] server config table.contacted_at must be a Drizzle datetime2 column; got ${s(r)}`);if(typeof t.ensureConnection!="function")throw new TypeError(`[contact-map] server config ensureConnection must be the function that connects the database pool before each query (pass async () => {} for a pool that is always connected); got ${s(t.ensureConnection)}`);if(typeof t.authenticate!="function")throw new TypeError(`[contact-map] server config authenticate must be the function that returns the request's user (to serve the stream without authentication, pass one that always returns a user); got ${s(t.authenticate)}`);for(let o of["firstBatchSize","nextBatchSize"])t[o]!==void 0&&w(`server config ${o}`,t[o]," (leave it out for the default)")}function _t(t){ft(t);let{db:e,table:r,ensureConnection:o,authenticate:u,logger:i=j,firstBatchSize:f=it,nextBatchSize:h=ut,streamErrorClientMessage:_=dt}=t;return async d=>{let g=d instanceof Request?d:d.request,C=pt(new URL(g.url).searchParams);if(!C.ok)return Response.json({error:C.message},{status:400});let c,b;try{let a=await u(g,{failureRedirect:null});b=a.user,c=a.cookie}catch(a){return i.error("Authentication infrastructure error:",a),Response.json({error:mt},{status:500})}if(!b)return Response.json({error:"Unauthorized"},{status:401,headers:c?{"Set-Cookie":c}:void 0});let m=C.cursor,y=f,L=!0,R=null,A=new TextEncoder,l=new AbortController;g.signal.aborted?l.abort():g.signal.addEventListener("abort",()=>{l.abort()},{once:!0});let tt=new ReadableStream({async pull(a){if(l.signal.aborted||g.signal.aborted){a.close();return}try{let p=await I(e,r,m,y,o,{signal:l.signal});y=h;let et={records:p.records,nextCursor:p.nextCursor,isLast:p.isLast};if(L&&(L=!1,R=P(e,r,o,{signal:l.signal}).then(k=>{if(!l.signal.aborted)try{let rt={type:"METADATA",total:k};a.enqueue(A.encode(`${JSON.stringify(rt)}
2
2
  `))}catch{}}).catch(k=>{i.warn("Non-blocking countActiveContacts failed:",k)})),a.enqueue(A.encode(`${JSON.stringify(et)}
3
3
  `)),p.isLast||!p.nextCursor){R&&await R,a.close();return}m=p.nextCursor}catch(p){if(l.signal.aborted){try{a.close()}catch{}return}i.error("Streaming error during chunk fetch:",p);try{a.enqueue(A.encode(`${JSON.stringify({error:_})}
4
- `)),a.close()}catch{}}},cancel(){l.abort()}}),v=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return c&&v.set("Set-Cookie",c),new Response(tt,{headers:v})}}function It(t){return{streamLoader:ft(t),countActiveContacts:u=>P(t.db,t.table,t.ensureConnection,u),getContactsStreamChunk:(u=null,i=G,f)=>I(t.db,t.table,u,i,t.ensureConnection,f)}}import{bigint as J,bit as E,datetime2 as M,nvarchar as n,primaryKey as _t}from"drizzle-orm/mssql-core";function vt(t,e){return t.table(e,{person_id:J("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:J("person_id_redirect_to",{mode:"number"}),full_name:n("full_name",{length:1e3}),full_name_reading:n("full_name_reading",{length:1e3}),company_name:n("company_name",{length:1e3}),company_name_reading:n("company_name_reading",{length:1e3}),department:n("department",{length:1e3}),title:n("title",{length:1e3}),address:n("address",{length:1e3}),postal_code:n("postal_code",{length:100}),email:n("email",{length:100}),custom_email:n("custom_email",{length:100}),company_phone_number:n("company_phone_number",{length:100}),custom_company_phone_number:n("custom_company_phone_number",{length:100}),company_fax_number:n("company_fax_number",{length:100}),mobile_phone_number:n("mobile_phone_number",{length:100}),custom_mobile_phone_number:n("custom_mobile_phone_number",{length:100}),url:n("url",{length:100}),contacted_at:M("contacted_at",{precision:7}),contacted_by:n("contacted_by",{length:100}),is_in_eight:E("is_in_eight").default(!0).notNull(),is_contact_synced:E("is_contact_synced").default(!1).notNull(),is_active:E("is_active").default(!0).notNull(),is_incomplete:E("is_incomplete").default(!1).notNull(),created_at:M("created_at",{precision:7}),created_by:n("created_by",{length:50}),updated_at:M("updated_at",{precision:7}),updated_by:n("updated_by",{length:50})},r=>[_t({columns:[r.person_id]})])}export{G as DEFAULT_STREAM_CHUNK_SIZE,dt as DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,P as countActiveContactsQuery,It as createContactMapServer,ft as createContactMapStreamHandler,vt as defineContactMapTable,I as getContactsStreamChunkQuery};
4
+ `)),a.close()}catch{}}},cancel(){l.abort()}}),v=new Headers({"Content-Type":"application/x-ndjson; charset=utf-8","Cache-Control":"no-store, no-transform","X-Content-Type-Options":"nosniff"});return c&&v.set("Set-Cookie",c),new Response(tt,{headers:v})}}function Mt(t){return{streamLoader:_t(t),countActiveContacts:u=>P(t.db,t.table,t.ensureConnection,u),getContactsStreamChunk:(u=null,i=G,f)=>I(t.db,t.table,u,i,t.ensureConnection,f)}}import{bigint as J,bit as E,datetime2 as M,nvarchar as n,primaryKey as gt}from"drizzle-orm/mssql-core";function Dt(t,e){return t.table(e,{person_id:J("person_id",{mode:"number"}).identity().notNull(),person_id_redirect_to:J("person_id_redirect_to",{mode:"number"}),full_name:n("full_name",{length:1e3}),full_name_reading:n("full_name_reading",{length:1e3}),company_name:n("company_name",{length:1e3}),company_name_reading:n("company_name_reading",{length:1e3}),department:n("department",{length:1e3}),title:n("title",{length:1e3}),address:n("address",{length:1e3}),postal_code:n("postal_code",{length:100}),email:n("email",{length:100}),custom_email:n("custom_email",{length:100}),company_phone_number:n("company_phone_number",{length:100}),custom_company_phone_number:n("custom_company_phone_number",{length:100}),company_fax_number:n("company_fax_number",{length:100}),mobile_phone_number:n("mobile_phone_number",{length:100}),custom_mobile_phone_number:n("custom_mobile_phone_number",{length:100}),url:n("url",{length:100}),contacted_at:M("contacted_at",{precision:7}),contacted_by:n("contacted_by",{length:100}),is_in_eight:E("is_in_eight").default(!0).notNull(),is_contact_synced:E("is_contact_synced").default(!1).notNull(),is_active:E("is_active").default(!0).notNull(),is_incomplete:E("is_incomplete").default(!1).notNull(),created_at:M("created_at",{precision:7}),created_by:n("created_by",{length:50}),updated_at:M("updated_at",{precision:7}),updated_by:n("updated_by",{length:50})},r=>[gt({columns:[r.person_id]})])}export{G as DEFAULT_STREAM_CHUNK_SIZE,dt as DEFAULT_STREAM_ERROR_CLIENT_MESSAGE,P as countActiveContactsQuery,Mt as createContactMapServer,_t as createContactMapStreamHandler,Dt as defineContactMapTable,I as getContactsStreamChunkQuery};