@standards/client 1.0.0-alpha.416 → 1.0.0-alpha.418

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/app.d.mts CHANGED
@@ -1,8 +1,7 @@
1
1
 
2
- import { _ as StandardsRequestError, a as OperationStreamOptions, c as UploadProgress, d as readRefusal, f as refusalOf, h as StandardsAuthError, i as OperationCallOptions, l as createHttpTransport, n as HttpTransportConfig, t as HttpTransport } from "./http-transport-C1u5UGkC.mjs";
2
+ import { _ as StandardsRequestError, a as OperationStreamOptions, c as UploadProgress, d as readRefusal, f as refusalOf, h as StandardsAuthError, i as OperationCallOptions, l as createHttpTransport, n as HttpTransportConfig, t as HttpTransport } from "./http-transport-BxJhcXjy.mjs";
3
3
  import { DraftConflictChange } from "@standards/schema";
4
4
  import { Operation, OperationInput, OperationResult, appOperationGroups } from "@standards/schema/api";
5
- //#region src/app-errors.d.ts
6
5
  /** The server's `SchemaErrorCode` on a failed call, when it sent one. */
7
6
  export declare function schemaApiErrorCode(error: unknown): string | undefined;
8
7
  /** Whether a failure is an answer, and so must not be asked again. */
@@ -40,8 +39,6 @@ export declare function draftConflictChanges(error: unknown): DraftConflictChang
40
39
  * else entirely.
41
40
  */
42
41
  export declare function isViewNotFound(error: unknown): boolean;
43
- //#endregion
44
- //#region src/content-disposition.d.ts
45
42
  /**
46
43
  * Parse the download filename out of a `Content-Disposition` response header.
47
44
  *
@@ -55,8 +52,6 @@ export declare function isViewNotFound(error: unknown): boolean;
55
52
  * callers fall back to a client-side name.
56
53
  */
57
54
  export declare function parseContentDispositionFilename(header: string | null | undefined): string | undefined;
58
- //#endregion
59
- //#region src/app.d.ts
60
55
  type AppOperationGroups = typeof appOperationGroups;
61
56
  type AppOperation = { [K in keyof AppOperationGroups]: AppOperationGroups[K][keyof AppOperationGroups[K]]; }[keyof AppOperationGroups];
62
57
  type NamespaceOf<N> = N extends `${infer G}.${string}` ? G : never;
@@ -70,5 +65,4 @@ type OperationCall<O extends Operation> = (...args: undefined extends OperationI
70
65
  export type AppClient = { readonly [G in NamespaceOf<AppOperation["name"]>]: { readonly [O in AppOperation as NamespaceOf<O["name"]> extends G ? VerbOf<O["name"]> : never]: OperationCall<O>; }; };
71
66
  /** The namespaced client over every app operation: `client.apiKeys.revoke({ id })`. */
72
67
  export declare function createAppClient(transport: HttpTransport): AppClient;
73
- //#endregion
74
68
  export { type HttpTransport, type HttpTransportConfig, type OperationCallOptions, type OperationStreamOptions, StandardsAuthError, StandardsRequestError, type UploadProgress, createHttpTransport, readRefusal, refusalOf };
package/dist/app.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
 
2
- import { _ as StandardsRequestError, a as OperationStreamOptions, c as UploadProgress, d as readRefusal, f as refusalOf, h as StandardsAuthError, i as OperationCallOptions, l as createHttpTransport, n as HttpTransportConfig, t as HttpTransport } from "./http-transport-C1u5UGkC.js";
3
- import { Operation, OperationInput, OperationResult, appOperationGroups } from "@standards/schema/api";
2
+ import { _ as StandardsRequestError, a as OperationStreamOptions, c as UploadProgress, d as readRefusal, f as refusalOf, h as StandardsAuthError, i as OperationCallOptions, l as createHttpTransport, n as HttpTransportConfig, t as HttpTransport } from "./http-transport-BxJhcXjy.js";
4
3
  import { DraftConflictChange } from "@standards/schema";
5
- //#region src/app-errors.d.ts
4
+ import { Operation, OperationInput, OperationResult, appOperationGroups } from "@standards/schema/api";
6
5
  /** The server's `SchemaErrorCode` on a failed call, when it sent one. */
7
6
  export declare function schemaApiErrorCode(error: unknown): string | undefined;
8
7
  /** Whether a failure is an answer, and so must not be asked again. */
@@ -40,8 +39,6 @@ export declare function draftConflictChanges(error: unknown): DraftConflictChang
40
39
  * else entirely.
41
40
  */
42
41
  export declare function isViewNotFound(error: unknown): boolean;
43
- //#endregion
44
- //#region src/content-disposition.d.ts
45
42
  /**
46
43
  * Parse the download filename out of a `Content-Disposition` response header.
47
44
  *
@@ -55,8 +52,6 @@ export declare function isViewNotFound(error: unknown): boolean;
55
52
  * callers fall back to a client-side name.
56
53
  */
57
54
  export declare function parseContentDispositionFilename(header: string | null | undefined): string | undefined;
58
- //#endregion
59
- //#region src/app.d.ts
60
55
  type AppOperationGroups = typeof appOperationGroups;
61
56
  type AppOperation = { [K in keyof AppOperationGroups]: AppOperationGroups[K][keyof AppOperationGroups[K]]; }[keyof AppOperationGroups];
62
57
  type NamespaceOf<N> = N extends `${infer G}.${string}` ? G : never;
@@ -70,5 +65,4 @@ type OperationCall<O extends Operation> = (...args: undefined extends OperationI
70
65
  export type AppClient = { readonly [G in NamespaceOf<AppOperation["name"]>]: { readonly [O in AppOperation as NamespaceOf<O["name"]> extends G ? VerbOf<O["name"]> : never]: OperationCall<O>; }; };
71
66
  /** The namespaced client over every app operation: `client.apiKeys.revoke({ id })`. */
72
67
  export declare function createAppClient(transport: HttpTransport): AppClient;
73
- //#endregion
74
68
  export { type HttpTransport, type HttpTransportConfig, type OperationCallOptions, type OperationStreamOptions, StandardsAuthError, StandardsRequestError, type UploadProgress, createHttpTransport, readRefusal, refusalOf };
package/dist/app.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./http-transport-CAPVZuiv.js");let t=require("@standards/schema/api");function createAppClient(e){let n={},r=Object.values(t.appOperationGroups);for(let i of r.flatMap(e=>Object.values(e))){let r=(0,t.operationGroup)(i),a=i.name.slice(r.length+1);n[r]??={},n[r][a]=(t,n)=>i.response===`events`?e.stream(i,t,n):e.call(i,t,n)}return n}exports.StandardsAuthError=e.h,exports.StandardsRequestError=e._,exports.createAppClient=createAppClient,exports.createHttpTransport=e.t,exports.draftConflictChanges=e.s,exports.isDraftRevisionConflict=e.c,exports.isObjectNotFound=e.l,exports.isPermanentRefusal=e.u,exports.isViewNotFound=e.d,exports.parseContentDispositionFilename=e.o,exports.readRefusal=e.r,exports.refusalOf=e.i,exports.schemaApiErrorCode=e.f;
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./http-transport-CfM3m5S2.js");let t=require("@standards/schema/api");function createAppClient(e){let n={},r=Object.values(t.appOperationGroups);for(let i of r.flatMap(e=>Object.values(e))){let r=(0,t.operationGroup)(i),a=i.name.slice(r.length+1);n[r]??={},n[r][a]=(t,n)=>i.response===`events`?e.stream(i,t,n):e.call(i,t,n)}return n}exports.StandardsAuthError=e.h,exports.StandardsRequestError=e._,exports.createAppClient=createAppClient,exports.createHttpTransport=e.t,exports.draftConflictChanges=e.s,exports.isDraftRevisionConflict=e.c,exports.isObjectNotFound=e.l,exports.isPermanentRefusal=e.u,exports.isViewNotFound=e.d,exports.parseContentDispositionFilename=e.o,exports.readRefusal=e.r,exports.refusalOf=e.i,exports.schemaApiErrorCode=e.f;
package/dist/app.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{_ as e,c as t,d as n,f as r,h as i,i as a,l as o,o as s,r as c,s as l,t as u,u as d}from"./http-transport-BxgXm4Oi.mjs";import{appOperationGroups as f,operationGroup as p}from"@standards/schema/api";function createAppClient(e){let t={},n=Object.values(f);for(let r of n.flatMap(e=>Object.values(e))){let n=p(r),i=r.name.slice(n.length+1);t[n]??={},t[n][i]=(t,n)=>r.response===`events`?e.stream(r,t,n):e.call(r,t,n)}return t}export{i as StandardsAuthError,e as StandardsRequestError,createAppClient,u as createHttpTransport,l as draftConflictChanges,t as isDraftRevisionConflict,o as isObjectNotFound,d as isPermanentRefusal,n as isViewNotFound,s as parseContentDispositionFilename,c as readRefusal,a as refusalOf,r as schemaApiErrorCode};
2
+ import{_ as e,c as t,d as n,f as r,h as i,i as a,l as o,o as s,r as c,s as l,t as u,u as d}from"./http-transport-DHYafmv-.mjs";import{appOperationGroups as f,operationGroup as p}from"@standards/schema/api";function createAppClient(e){let t={},n=Object.values(f);for(let r of n.flatMap(e=>Object.values(e))){let n=p(r),i=r.name.slice(n.length+1);t[n]??={},t[n][i]=(t,n)=>r.response===`events`?e.stream(r,t,n):e.call(r,t,n)}return t}export{i as StandardsAuthError,e as StandardsRequestError,createAppClient,u as createHttpTransport,l as draftConflictChanges,t as isDraftRevisionConflict,o as isObjectNotFound,d as isPermanentRefusal,n as isViewNotFound,s as parseContentDispositionFilename,c as readRefusal,a as refusalOf,r as schemaApiErrorCode};
@@ -0,0 +1,4 @@
1
+ /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
+ import{_ as e,g as t,m as n,n as r,p as i}from"./http-transport-DHYafmv-.mjs";import{AggregateValidationError as a,DuplicateError as o,RecordQuery as s,SchemaErrorCode as c,ValidationError as l,isPlainRecord as u}from"@standards/schema";import{aiOperations as d,buildOperationPath as f,bundlesOperations as p,documentsOperations as m,filesOperations as h,recordAccessOperations as g,recordsOperations as _}from"@standards/schema/api";async function readInstalled(t,n){try{return await t.get(n)}catch(t){if(t instanceof e&&t.status===404)return null;throw t}}async function syncBundle(t,r,a={}){let o=await r.build(),s=f(p.sync,{name:o.name}),c=await readInstalled(t,s);if(c?.hash===o.hash&&c.label===o.label&&c.description===o.description&&c.uses.join(`
3
+ `)===o.uses.join(`
4
+ `))return{applied:!1,hash:o.hash};let l=a.resolutions&&a.resolutions.length>0?{...o,resolutions:a.resolutions}:o;try{return await t.put(s,l)}catch(t){throw t instanceof e&&t.status===409?new i(t.status,t.message,t.code):t instanceof e&&t.status===400?new n(t.status,t.message,t.code):t}}function assertTimeout(e){if(e!==void 0&&!(Number.isFinite(e)&&e>0))throw new l(`timeoutMs must be a positive number of milliseconds`,[{path:[`timeoutMs`],message:`Expected a positive, finite number`}])}function assertFileInput(e,t){if(!(e instanceof Blob))throw new l(`${t} must be a Blob or File`,[{path:[t],message:`Expected a Blob or File`}]);let n=e.name;if(typeof n!=`string`||n===``)throw new l(`${t} needs a filename`,[{path:[t,`name`],message:`Expected a non-empty filename`}]);if(e.type===``)throw new l(`${t} "${n}" needs a MIME type`,[{path:[t,`type`],message:`Expected a non-empty MIME type`}])}function reviveDocumentFile(e){return{...e,processedAt:e.processedAt===null?null:new Date(e.processedAt)}}function createDocumentsApi(e){async function attachToRecord(t){let{file:n}=t;assertFileInput(n,`file`),assertTimeout(t.timeoutMs);let r=f(_.attachDocument,{objectName:t.objectName,id:t.recordId}),i=new FormData;i.append(`files`,n,n.name),t.attributeName!==void 0&&i.append(`attributeName`,t.attributeName),t.documentId!==void 0&&i.append(`documentId`,t.documentId),t.title!==void 0&&i.append(`title`,t.title);let a=await e.postMultipart(r,i,{timeoutMs:t.timeoutMs});return{document:{id:a.document.id,title:a.document.title},file:reviveDocumentFile(a.file),action:a.action}}async function listFiles(t){return(await e.get(f(m.files,{id:t}))).map(reviveDocumentFile)}return{attachToRecord,listFiles}}function toUploadedFile(e){let t={id:e.id,name:e.name,mimeType:e.mimeType,size:e.size};return e.isPublic===!0&&typeof e.publicUrl==`string`?{...t,isPublic:!0,publicUrl:e.publicUrl}:{...t,isPublic:!1}}function createFilesApi(e){async function upload(t){assertFileInput(t.file,`file`),assertTimeout(t.timeoutMs);let[n]=await e.call(h.upload,{files:[t.file],public:t.public===!0?`true`:`false`,folderPath:t.folderPath},{timeoutMs:t.timeoutMs});return toUploadedFile(n)}async function getDownloadUrl(t){let{url:n}=await e.call(h.signedUrl,{id:t});return n}return{upload,getDownloadUrl}}function objectKeyOf(e){return e.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}const v=/* @__PURE__ */ new Set([`from`,`files`,`documents`,`bundles`,`usage`]);function assertObjectKeys(e){let n=/* @__PURE__ */ new Map;for(let r of e){if(r.includes(`--`)||r.endsWith(`-`))throw new t(`Object "${r}" has a doubled or trailing hyphen, which has no client key. Rename the object.`);let e=objectKeyOf(r);if(v.has(e))throw new t(`Object "${r}" maps to the client key "${e}", which is reserved. Rename the object.`);let i=n.get(e);if(i!==void 0&&i!==r)throw new t(`Objects "${i}" and "${r}" both map to the client key "${e}". Rename one of them.`);n.set(e,r)}}function assertObjectNames(e){let t=/* @__PURE__ */ new Set;for(let n of e){if(t.has(n))throw new o(`object`,n);t.add(n)}assertObjectKeys(e)}const y=[`createdAt`,`updatedAt`,`deletedAt`];function dateAttributeNames(e){let t=/* @__PURE__ */ new Set;for(let n of e?.attributes??[])n.type===`date`&&t.add(n.name);return t}function isRange(e){return typeof e==`object`&&!!e&&`start`in e&&`end`in e}function flattenValues(e){let{values:t,...n}=e;return{...n,...u(t)?t:{}}}function toDate(e){return typeof e==`string`?new Date(e):isRange(e)?{start:toDate(e.start),end:toDate(e.end)}:e}function reviveRecord(e,t){let n=dateAttributeNames(e),r=flattenValues(t);for(let e of y)e in r&&(r[e]=toDate(r[e]));for(let e of n)e in r&&(r[e]=toDate(r[e]));return r}function serializeInput(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof Date?t.toISOString():t]))}var b=class RecordsQueryImpl extends s{constructor(e,t,n,r={object:t,combinator:`and`,rules:[],sorts:[]}){super(r),this.transport=e,this.objectName=t,this.definition=n}with(e){return new RecordsQueryImpl(this.transport,this.objectName,this.definition,{...this.state,...e})}body(){let e={};return this.state.search!==void 0&&(e.q=this.state.search),this.state.rules.length>0&&(e.filters={combinator:this.state.combinator,rules:this.state.rules}),this.state.sorts.length>0&&(e.sorts=this.state.sorts),this.state.limit!==void 0&&(e.limit=this.state.limit),this.state.offset!==void 0&&(e.offset=this.state.offset),e}revive(e){return reviveRecord(this.definition,e)}async export(e,n={}){if(!this.transport.postRaw)throw new t(`export() needs a transport with postRaw(path, body): Promise<Response>`);let{filters:r,sorts:i}=this.body(),{ids:a,locale:o,filename:s}=n;return await this.transport.postRaw(f(_.export,{objectName:this.objectName}),{q:this.state.search??``,...r?{filters:r}:{},...i?{sorts:i}:{},columns:e,...a?{ids:a}:{},...o?{locale:o}:{},timezone:n.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone,...s?{filename:s}:{}})}async aggregate(e){if(this.state.search!==void 0)throw new a(c.AGGREGATE_SEARCH_UNSUPPORTED,`An aggregate cannot be narrowed by a search; use filters instead`);let t={...e,query:this.toDefinition(),timezone:e.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone};return await this.transport.post(f(_.aggregate,{objectName:this.objectName}),t)}async fetchPage(){let e=this.state.search===void 0?`list`:`search`,t=await this.transport.post(f(_[e],{objectName:this.objectName}),this.body());return{records:t.data.map(e=>this.revive(e)),page:t.page}}async fetch(){let{records:e,page:t}=await this.fetchPage();return{records:e,total:t.total}}async all(){if(this.state.limit!==void 0&&this.state.limit<0)return(await this.fetch()).records;let e=this.state.limit??1/0,t=[],n=this.state.offset??0;for(;;){let r=Math.min(1e3,e-t.length);if(r<=0)return t;let{records:i,page:a}=await this.with({limit:r,offset:n}).fetchPage();if(t.push(...i),!a.hasMore)return t;let o=a.nextOffset??n+i.length;if(o<=n)return t;n=o}}async single(){let{records:e}=await this.limit(1).fetch();return e[0]??null}async get(e){let t=await this.transport.get(f(_.get,{objectName:this.objectName,id:e}));return this.revive(t)}async create(e){let t=await this.transport.post(f(_.create,{objectName:this.objectName}),{data:serializeInput(e)});return this.revive(t)}async update(e,t){let n=await this.transport.put(f(_.update,{objectName:this.objectName,id:e}),serializeInput(t));return this.revive(n)}async delete(e){await this.transport.delete(f(_.delete,{objectName:this.objectName,id:e}))}async inChunks(e,t){for(let n=0;n<e.length;n+=100)await t(e.slice(n,n+100),n)}async createMany(e){let t={created:[],errors:[]};return await this.inChunks(e,async(e,n)=>{let r=await this.transport.post(f(_.bulkCreate,{objectName:this.objectName}),{records:e.map(serializeInput)});t.created.push(...r.created.map(e=>this.revive(e))),t.errors.push(...r.errors.map(e=>({...e,index:e.index+n})))}),t}async updateMany(e){let t={updated:[],errors:[]};return await this.inChunks(e,async e=>{let n=await this.transport.post(f(_.bulkUpdate,{objectName:this.objectName}),{updates:e.map(({id:e,data:t})=>({id:e,data:serializeInput(t)}))});t.updated.push(...n.updated.map(e=>this.revive(e))),t.errors.push(...n.errors)}),t}async deleteMany(e){let t={deleted:[],errors:[]};return await this.inChunks(e,async e=>{let n=await this.transport.post(f(_.bulkDelete,{objectName:this.objectName}),{ids:e});t.deleted.push(...n.deleted),t.errors.push(...n.errors)}),t}async listAccess(e){return await this.transport.get(f(g.list,{objectName:this.objectName,recordId:e}))}async grantAccess(e,t,n){return await this.transport.put(f(g.grant,{objectName:this.objectName,recordId:e,actorId:t}),{role:n})}async revokeAccess(e,t){return await this.transport.delete(f(g.revoke,{objectName:this.objectName,recordId:e,actorId:t}))}async clearAccess(e){return await this.transport.delete(f(g.clear,{objectName:this.objectName,recordId:e}))}};const x=/* @__PURE__ */ new WeakMap;function definitionOf(e){let t=x.get(e);if(t)return t;let n=e.build();return x.set(e,n),n}function createRecordsQuery(e,t){if(typeof t==`string`)return new b(e,t,null);let n=definitionOf(t);return new b(e,n.name,n)}function createUsageApi(e){return{report:({from:t,to:n,scope:r=`me`})=>e.call(d.usage,{from:t,to:n,scope:r})}}function readEnvironment(){return typeof process>`u`||!process.env?{}:{baseUrl:process.env.STANDARDS_API_URL||void 0,apiKey:process.env.STANDARDS_API_KEY||void 0}}function resolveConfig(e){if(globalThis.window!==void 0){if(e.apiKey)throw new t(`createStandards received an apiKey in a browser context. API keys belong to server code only (Route Handlers, Server Components, scripts).`);if(e.baseUrl===void 0)throw new t(`createStandards needs an explicit baseUrl in a browser context: STANDARDS_API_URL and STANDARDS_API_KEY are never read from the environment there.`);return{...e,baseUrl:e.baseUrl,apiKey:``}}let n=readEnvironment(),r=e.baseUrl??n.baseUrl;if(r===void 0)throw new t(`createStandards needs a base URL: pass baseUrl or set the STANDARDS_API_URL environment variable.`);let i=e.apiKey??n.apiKey;if(i===void 0)throw new t(`createStandards needs an API key: pass apiKey or set the STANDARDS_API_KEY environment variable.`);return{...e,baseUrl:r,apiKey:i}}function createStandards(e={}){let{bundles:t=[],...n}=e;return buildStandards(r(resolveConfig(n)),t.flatMap(e=>e.objectBuilders))}function buildStandards(e,t){let n={bundles:{sync:(t,n)=>syncBundle(e,t,n)},from:t=>createRecordsQuery(e,t),files:createFilesApi(e),documents:createDocumentsApi(e),usage:createUsageApi(e)},r=t.map(e=>definitionOf(e).name);return assertObjectNames(r),t.forEach((t,i)=>{n[objectKeyOf(r[i])]=createRecordsQuery(e,t)}),n}export{definitionOf as a,createFilesApi as c,createRecordsQuery as i,createDocumentsApi as l,createStandards as n,reviveRecord as o,createUsageApi as r,serializeInput as s,buildStandards as t,syncBundle as u};
@@ -1,7 +1,6 @@
1
1
 
2
- import { r as MultipartRequestOptions, s as TransportConfig, t as HttpTransport } from "./http-transport-C1u5UGkC.js";
3
- import { AggregateRecordsOptions, BundleBuilder, DocumentFile, ExtractRecord, ExtractRecordInputStrict, ExtractRecordUpdateStrict, FilterRule, ObjectBuilderLike, ObjectDefinition, RecordAccessRole, RecordAggregates, RecordAudience, RuleValue, SchemaSourceResolution, SyncBundleResult, UsageReport, UsageScope } from "@standards/schema";
4
- //#region src/bundle-sync.d.ts
2
+ import { r as MultipartRequestOptions, s as TransportConfig, t as HttpTransport } from "./http-transport-BxJhcXjy.js";
3
+ import { AggregateRecordsOptions, BundleBuilder, DocumentFile, ExtractRecord, ExtractRecordInputStrict, ExtractRecordUpdateStrict, FilterRule, ObjectBuilderLike, RecordAccessRole, RecordAggregates, RecordAudience, RuleValue, SchemaSourceResolution, SyncBundleResult, UsageReport, UsageScope } from "@standards/schema";
5
4
  /**
6
5
  * What a sync carries besides the bundle itself.
7
6
  *
@@ -24,8 +23,6 @@ interface SyncTransport {
24
23
  }
25
24
  /** GET the installed summary; PUT the built bundle when its hash, label, description or uses differ, or it was never synced. */
26
25
  declare function syncBundle(transport: SyncTransport, bundle: BundleBuilder<string, readonly ObjectBuilderLike[]>, options?: SyncBundleOptions): Promise<SyncBundleResult>;
27
- //#endregion
28
- //#region src/files/file-input.d.ts
29
26
  /**
30
27
  * What the files and documents methods upload: a `File` (or any `Blob` carrying
31
28
  * a `name`) with a non-empty filename and MIME type. The server checks the MIME
@@ -45,8 +42,6 @@ type FileInput = Blob & {
45
42
  interface UploadTimeoutOption {
46
43
  timeoutMs?: number;
47
44
  }
48
- //#endregion
49
- //#region src/files/documents-api.d.ts
50
45
  interface AttachToRecordInput extends UploadTimeoutOption {
51
46
  objectName: string;
52
47
  recordId: string;
@@ -91,8 +86,6 @@ interface DocumentsTransport {
91
86
  postMultipart(path: string, form: FormData, options?: MultipartRequestOptions): Promise<unknown>;
92
87
  }
93
88
  declare function createDocumentsApi(transport: DocumentsTransport): DocumentsApi;
94
- //#endregion
95
- //#region src/files/files-api.d.ts
96
89
  interface UploadFileBase extends UploadTimeoutOption {
97
90
  file: FileInput;
98
91
  /** Stored as the file's folder (`folderPath` on `POST /files/upload`). */
@@ -136,12 +129,8 @@ interface FilesApi {
136
129
  /** The one verb this module needs: the `files` operations. */
137
130
  type FilesTransport = Pick<HttpTransport, "call">;
138
131
  declare function createFilesApi(transport: FilesTransport): FilesApi;
139
- //#endregion
140
- //#region src/object-keys.d.ts
141
132
  /** `daily-stats` → `dailyStats`. Object names are kebab-case (enforced by the builder). */
142
133
  type CamelCase<S extends string> = S extends `${infer Head}-${infer Tail}` ? `${Head}${Capitalize<CamelCase<Tail>>}` : S;
143
- //#endregion
144
- //#region src/records/query.d.ts
145
134
  type Attr<TBuilder> = keyof ExtractRecord<TBuilder> & string;
146
135
  /**
147
136
  * The builder's own attributes keep their exact types (a `select` refuses an
@@ -327,8 +316,6 @@ interface RecordsTransport {
327
316
  /** A builder gives typed records; a bare object name is the untyped escape hatch. */
328
317
  declare function createRecordsQuery<TBuilder extends ObjectBuilderLike>(transport: RecordsTransport, target: TBuilder): RecordsQuery<TBuilder>;
329
318
  declare function createRecordsQuery(transport: RecordsTransport, target: string): UntypedRecordsQuery;
330
- //#endregion
331
- //#region src/usage/usage-api.d.ts
332
319
  interface UsageReportInput {
333
320
  /** First day of the window, `YYYY-MM-DD` (UTC, inclusive). */
334
321
  from: string;
@@ -344,8 +331,6 @@ interface UsageApi {
344
331
  /** The one verb this module needs: the `ai.usage` operation. */
345
332
  type UsageTransport = Pick<HttpTransport, "call">;
346
333
  declare function createUsageApi(transport: UsageTransport): UsageApi;
347
- //#endregion
348
- //#region src/create-standards.d.ts
349
334
  type NameOf<B> = B extends {
350
335
  _types: {
351
336
  name: infer N extends string;
@@ -381,5 +366,4 @@ declare function createStandards<const TBundles extends readonly AnyBundle[]>(co
381
366
  bundles: TBundles;
382
367
  }): Standards & ObjectsOf<ObjectsOfBundles<TBundles>>;
383
368
  declare function createStandards(config?: StandardsConfig): Standards;
384
- //#endregion
385
369
  export { PrivateUploadedFile as A, DocumentsTransport as B, UpdateManyEntry as C, CamelCase as D, createRecordsQuery as E, UploadedFile as F, SyncTransport as G, FileInput as H, createFilesApi as I, syncBundle as K, AttachToRecordInput as L, UploadFileInput as M, UploadPrivateFileInput as N, FilesApi as O, UploadPublicFileInput as P, AttachToRecordResult as R, UntypedRecordsQuery as S, UpdateManyResult as T, UploadTimeoutOption as U, createDocumentsApi as V, SyncBundleOptions as W, RecordUpdate as _, StandardsConfig as a, RecordsQuery as b, UsageReportInput as c, CreateManyError as d, CreateManyResult as f, RecordInput as g, FetchResult as h, Standards as i, PublicUploadedFile as j, FilesTransport as k, UsageTransport as l, DeleteManyResult as m, ObjectsOf as n, createStandards as o, DeleteManyError as p, ObjectsOfBundles as r, UsageApi as s, AnyBundle as t, createUsageApi as u, RecordsAggregateOptions as v, UpdateManyError as w, UntypedBuilder as x, RecordsExportOptions as y, DocumentsApi as z };
@@ -0,0 +1,4 @@
1
+ /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
+ const e=require("./http-transport-CfM3m5S2.js");let t=require("@standards/schema"),n=require("@standards/schema/api");async function readInstalled(t,n){try{return await t.get(n)}catch(t){if(t instanceof e._&&t.status===404)return null;throw t}}async function syncBundle(t,r,i={}){let a=await r.build(),o=(0,n.buildOperationPath)(n.bundlesOperations.sync,{name:a.name}),s=await readInstalled(t,o);if(s?.hash===a.hash&&s.label===a.label&&s.description===a.description&&s.uses.join(`
3
+ `)===a.uses.join(`
4
+ `))return{applied:!1,hash:a.hash};let c=i.resolutions&&i.resolutions.length>0?{...a,resolutions:i.resolutions}:a;try{return await t.put(o,c)}catch(t){throw t instanceof e._&&t.status===409?new e.p(t.status,t.message,t.code):t instanceof e._&&t.status===400?new e.m(t.status,t.message,t.code):t}}function assertTimeout(e){if(e!==void 0&&!(Number.isFinite(e)&&e>0))throw new t.ValidationError(`timeoutMs must be a positive number of milliseconds`,[{path:[`timeoutMs`],message:`Expected a positive, finite number`}])}function assertFileInput(e,n){if(!(e instanceof Blob))throw new t.ValidationError(`${n} must be a Blob or File`,[{path:[n],message:`Expected a Blob or File`}]);let r=e.name;if(typeof r!=`string`||r===``)throw new t.ValidationError(`${n} needs a filename`,[{path:[n,`name`],message:`Expected a non-empty filename`}]);if(e.type===``)throw new t.ValidationError(`${n} "${r}" needs a MIME type`,[{path:[n,`type`],message:`Expected a non-empty MIME type`}])}function reviveDocumentFile(e){return{...e,processedAt:e.processedAt===null?null:new Date(e.processedAt)}}function createDocumentsApi(e){async function attachToRecord(t){let{file:r}=t;assertFileInput(r,`file`),assertTimeout(t.timeoutMs);let i=(0,n.buildOperationPath)(n.recordsOperations.attachDocument,{objectName:t.objectName,id:t.recordId}),a=new FormData;a.append(`files`,r,r.name),t.attributeName!==void 0&&a.append(`attributeName`,t.attributeName),t.documentId!==void 0&&a.append(`documentId`,t.documentId),t.title!==void 0&&a.append(`title`,t.title);let o=await e.postMultipart(i,a,{timeoutMs:t.timeoutMs});return{document:{id:o.document.id,title:o.document.title},file:reviveDocumentFile(o.file),action:o.action}}async function listFiles(t){return(await e.get((0,n.buildOperationPath)(n.documentsOperations.files,{id:t}))).map(reviveDocumentFile)}return{attachToRecord,listFiles}}function toUploadedFile(e){let t={id:e.id,name:e.name,mimeType:e.mimeType,size:e.size};return e.isPublic===!0&&typeof e.publicUrl==`string`?{...t,isPublic:!0,publicUrl:e.publicUrl}:{...t,isPublic:!1}}function createFilesApi(e){async function upload(t){assertFileInput(t.file,`file`),assertTimeout(t.timeoutMs);let[r]=await e.call(n.filesOperations.upload,{files:[t.file],public:t.public===!0?`true`:`false`,folderPath:t.folderPath},{timeoutMs:t.timeoutMs});return toUploadedFile(r)}async function getDownloadUrl(t){let{url:r}=await e.call(n.filesOperations.signedUrl,{id:t});return r}return{upload,getDownloadUrl}}function objectKeyOf(e){return e.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}const r=/* @__PURE__ */ new Set([`from`,`files`,`documents`,`bundles`,`usage`]);function assertObjectKeys(t){let n=/* @__PURE__ */ new Map;for(let i of t){if(i.includes(`--`)||i.endsWith(`-`))throw new e.g(`Object "${i}" has a doubled or trailing hyphen, which has no client key. Rename the object.`);let t=objectKeyOf(i);if(r.has(t))throw new e.g(`Object "${i}" maps to the client key "${t}", which is reserved. Rename the object.`);let a=n.get(t);if(a!==void 0&&a!==i)throw new e.g(`Objects "${a}" and "${i}" both map to the client key "${t}". Rename one of them.`);n.set(t,i)}}function assertObjectNames(e){let n=/* @__PURE__ */ new Set;for(let r of e){if(n.has(r))throw new t.DuplicateError(`object`,r);n.add(r)}assertObjectKeys(e)}const i=[`createdAt`,`updatedAt`,`deletedAt`];function dateAttributeNames(e){let t=/* @__PURE__ */ new Set;for(let n of e?.attributes??[])n.type===`date`&&t.add(n.name);return t}function isRange(e){return typeof e==`object`&&!!e&&`start`in e&&`end`in e}function flattenValues(e){let{values:n,...r}=e;return{...r,...(0,t.isPlainRecord)(n)?n:{}}}function toDate(e){return typeof e==`string`?new Date(e):isRange(e)?{start:toDate(e.start),end:toDate(e.end)}:e}function reviveRecord(e,t){let n=dateAttributeNames(e),r=flattenValues(t);for(let e of i)e in r&&(r[e]=toDate(r[e]));for(let e of n)e in r&&(r[e]=toDate(r[e]));return r}function serializeInput(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof Date?t.toISOString():t]))}var a=class RecordsQueryImpl extends t.RecordQuery{constructor(e,t,n,r={object:t,combinator:`and`,rules:[],sorts:[]}){super(r),this.transport=e,this.objectName=t,this.definition=n}with(e){return new RecordsQueryImpl(this.transport,this.objectName,this.definition,{...this.state,...e})}body(){let e={};return this.state.search!==void 0&&(e.q=this.state.search),this.state.rules.length>0&&(e.filters={combinator:this.state.combinator,rules:this.state.rules}),this.state.sorts.length>0&&(e.sorts=this.state.sorts),this.state.limit!==void 0&&(e.limit=this.state.limit),this.state.offset!==void 0&&(e.offset=this.state.offset),e}revive(e){return reviveRecord(this.definition,e)}async export(t,r={}){if(!this.transport.postRaw)throw new e.g(`export() needs a transport with postRaw(path, body): Promise<Response>`);let{filters:i,sorts:a}=this.body(),{ids:o,locale:s,filename:c}=r;return await this.transport.postRaw((0,n.buildOperationPath)(n.recordsOperations.export,{objectName:this.objectName}),{q:this.state.search??``,...i?{filters:i}:{},...a?{sorts:a}:{},columns:t,...o?{ids:o}:{},...s?{locale:s}:{},timezone:r.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone,...c?{filename:c}:{}})}async aggregate(e){if(this.state.search!==void 0)throw new t.AggregateValidationError(t.SchemaErrorCode.AGGREGATE_SEARCH_UNSUPPORTED,`An aggregate cannot be narrowed by a search; use filters instead`);let r={...e,query:this.toDefinition(),timezone:e.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone};return await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.aggregate,{objectName:this.objectName}),r)}async fetchPage(){let e=this.state.search===void 0?`list`:`search`,t=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations[e],{objectName:this.objectName}),this.body());return{records:t.data.map(e=>this.revive(e)),page:t.page}}async fetch(){let{records:e,page:t}=await this.fetchPage();return{records:e,total:t.total}}async all(){if(this.state.limit!==void 0&&this.state.limit<0)return(await this.fetch()).records;let e=this.state.limit??1/0,t=[],n=this.state.offset??0;for(;;){let r=Math.min(1e3,e-t.length);if(r<=0)return t;let{records:i,page:a}=await this.with({limit:r,offset:n}).fetchPage();if(t.push(...i),!a.hasMore)return t;let o=a.nextOffset??n+i.length;if(o<=n)return t;n=o}}async single(){let{records:e}=await this.limit(1).fetch();return e[0]??null}async get(e){let t=await this.transport.get((0,n.buildOperationPath)(n.recordsOperations.get,{objectName:this.objectName,id:e}));return this.revive(t)}async create(e){let t=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.create,{objectName:this.objectName}),{data:serializeInput(e)});return this.revive(t)}async update(e,t){let r=await this.transport.put((0,n.buildOperationPath)(n.recordsOperations.update,{objectName:this.objectName,id:e}),serializeInput(t));return this.revive(r)}async delete(e){await this.transport.delete((0,n.buildOperationPath)(n.recordsOperations.delete,{objectName:this.objectName,id:e}))}async inChunks(e,t){for(let n=0;n<e.length;n+=100)await t(e.slice(n,n+100),n)}async createMany(e){let t={created:[],errors:[]};return await this.inChunks(e,async(e,r)=>{let i=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkCreate,{objectName:this.objectName}),{records:e.map(serializeInput)});t.created.push(...i.created.map(e=>this.revive(e))),t.errors.push(...i.errors.map(e=>({...e,index:e.index+r})))}),t}async updateMany(e){let t={updated:[],errors:[]};return await this.inChunks(e,async e=>{let r=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkUpdate,{objectName:this.objectName}),{updates:e.map(({id:e,data:t})=>({id:e,data:serializeInput(t)}))});t.updated.push(...r.updated.map(e=>this.revive(e))),t.errors.push(...r.errors)}),t}async deleteMany(e){let t={deleted:[],errors:[]};return await this.inChunks(e,async e=>{let r=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkDelete,{objectName:this.objectName}),{ids:e});t.deleted.push(...r.deleted),t.errors.push(...r.errors)}),t}async listAccess(e){return await this.transport.get((0,n.buildOperationPath)(n.recordAccessOperations.list,{objectName:this.objectName,recordId:e}))}async grantAccess(e,t,r){return await this.transport.put((0,n.buildOperationPath)(n.recordAccessOperations.grant,{objectName:this.objectName,recordId:e,actorId:t}),{role:r})}async revokeAccess(e,t){return await this.transport.delete((0,n.buildOperationPath)(n.recordAccessOperations.revoke,{objectName:this.objectName,recordId:e,actorId:t}))}async clearAccess(e){return await this.transport.delete((0,n.buildOperationPath)(n.recordAccessOperations.clear,{objectName:this.objectName,recordId:e}))}};const o=/* @__PURE__ */ new WeakMap;function definitionOf(e){let t=o.get(e);if(t)return t;let n=e.build();return o.set(e,n),n}function createRecordsQuery(e,t){if(typeof t==`string`)return new a(e,t,null);let n=definitionOf(t);return new a(e,n.name,n)}function createUsageApi(e){return{report:({from:t,to:r,scope:i=`me`})=>e.call(n.aiOperations.usage,{from:t,to:r,scope:i})}}function readEnvironment(){return typeof process>`u`||!process.env?{}:{baseUrl:process.env.STANDARDS_API_URL||void 0,apiKey:process.env.STANDARDS_API_KEY||void 0}}function resolveConfig(t){if(globalThis.window!==void 0){if(t.apiKey)throw new e.g(`createStandards received an apiKey in a browser context. API keys belong to server code only (Route Handlers, Server Components, scripts).`);if(t.baseUrl===void 0)throw new e.g(`createStandards needs an explicit baseUrl in a browser context: STANDARDS_API_URL and STANDARDS_API_KEY are never read from the environment there.`);return{...t,baseUrl:t.baseUrl,apiKey:``}}let n=readEnvironment(),r=t.baseUrl??n.baseUrl;if(r===void 0)throw new e.g(`createStandards needs a base URL: pass baseUrl or set the STANDARDS_API_URL environment variable.`);let i=t.apiKey??n.apiKey;if(i===void 0)throw new e.g(`createStandards needs an API key: pass apiKey or set the STANDARDS_API_KEY environment variable.`);return{...t,baseUrl:r,apiKey:i}}function createStandards(t={}){let{bundles:n=[],...r}=t;return buildStandards(e.n(resolveConfig(r)),n.flatMap(e=>e.objectBuilders))}function buildStandards(e,t){let n={bundles:{sync:(t,n)=>syncBundle(e,t,n)},from:t=>createRecordsQuery(e,t),files:createFilesApi(e),documents:createDocumentsApi(e),usage:createUsageApi(e)},r=t.map(e=>definitionOf(e).name);return assertObjectNames(r),t.forEach((t,i)=>{n[objectKeyOf(r[i])]=createRecordsQuery(e,t)}),n}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return definitionOf}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return createFilesApi}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return createRecordsQuery}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return createDocumentsApi}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return createStandards}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return reviveRecord}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return createUsageApi}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return serializeInput}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return buildStandards}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return syncBundle}});
@@ -1,7 +1,6 @@
1
1
 
2
- import { r as MultipartRequestOptions, s as TransportConfig, t as HttpTransport } from "./http-transport-C1u5UGkC.mjs";
3
- import { AggregateRecordsOptions, BundleBuilder, DocumentFile, ExtractRecord, ExtractRecordInputStrict, ExtractRecordUpdateStrict, FilterRule, ObjectBuilderLike, ObjectDefinition, RecordAccessRole, RecordAggregates, RecordAudience, RuleValue, SchemaSourceResolution, SyncBundleResult, UsageReport, UsageScope } from "@standards/schema";
4
- //#region src/bundle-sync.d.ts
2
+ import { r as MultipartRequestOptions, s as TransportConfig, t as HttpTransport } from "./http-transport-BxJhcXjy.mjs";
3
+ import { AggregateRecordsOptions, BundleBuilder, DocumentFile, ExtractRecord, ExtractRecordInputStrict, ExtractRecordUpdateStrict, FilterRule, ObjectBuilderLike, RecordAccessRole, RecordAggregates, RecordAudience, RuleValue, SchemaSourceResolution, SyncBundleResult, UsageReport, UsageScope } from "@standards/schema";
5
4
  /**
6
5
  * What a sync carries besides the bundle itself.
7
6
  *
@@ -24,8 +23,6 @@ interface SyncTransport {
24
23
  }
25
24
  /** GET the installed summary; PUT the built bundle when its hash, label, description or uses differ, or it was never synced. */
26
25
  declare function syncBundle(transport: SyncTransport, bundle: BundleBuilder<string, readonly ObjectBuilderLike[]>, options?: SyncBundleOptions): Promise<SyncBundleResult>;
27
- //#endregion
28
- //#region src/files/file-input.d.ts
29
26
  /**
30
27
  * What the files and documents methods upload: a `File` (or any `Blob` carrying
31
28
  * a `name`) with a non-empty filename and MIME type. The server checks the MIME
@@ -45,8 +42,6 @@ type FileInput = Blob & {
45
42
  interface UploadTimeoutOption {
46
43
  timeoutMs?: number;
47
44
  }
48
- //#endregion
49
- //#region src/files/documents-api.d.ts
50
45
  interface AttachToRecordInput extends UploadTimeoutOption {
51
46
  objectName: string;
52
47
  recordId: string;
@@ -91,8 +86,6 @@ interface DocumentsTransport {
91
86
  postMultipart(path: string, form: FormData, options?: MultipartRequestOptions): Promise<unknown>;
92
87
  }
93
88
  declare function createDocumentsApi(transport: DocumentsTransport): DocumentsApi;
94
- //#endregion
95
- //#region src/files/files-api.d.ts
96
89
  interface UploadFileBase extends UploadTimeoutOption {
97
90
  file: FileInput;
98
91
  /** Stored as the file's folder (`folderPath` on `POST /files/upload`). */
@@ -136,12 +129,8 @@ interface FilesApi {
136
129
  /** The one verb this module needs: the `files` operations. */
137
130
  type FilesTransport = Pick<HttpTransport, "call">;
138
131
  declare function createFilesApi(transport: FilesTransport): FilesApi;
139
- //#endregion
140
- //#region src/object-keys.d.ts
141
132
  /** `daily-stats` → `dailyStats`. Object names are kebab-case (enforced by the builder). */
142
133
  type CamelCase<S extends string> = S extends `${infer Head}-${infer Tail}` ? `${Head}${Capitalize<CamelCase<Tail>>}` : S;
143
- //#endregion
144
- //#region src/records/query.d.ts
145
134
  type Attr<TBuilder> = keyof ExtractRecord<TBuilder> & string;
146
135
  /**
147
136
  * The builder's own attributes keep their exact types (a `select` refuses an
@@ -327,8 +316,6 @@ interface RecordsTransport {
327
316
  /** A builder gives typed records; a bare object name is the untyped escape hatch. */
328
317
  declare function createRecordsQuery<TBuilder extends ObjectBuilderLike>(transport: RecordsTransport, target: TBuilder): RecordsQuery<TBuilder>;
329
318
  declare function createRecordsQuery(transport: RecordsTransport, target: string): UntypedRecordsQuery;
330
- //#endregion
331
- //#region src/usage/usage-api.d.ts
332
319
  interface UsageReportInput {
333
320
  /** First day of the window, `YYYY-MM-DD` (UTC, inclusive). */
334
321
  from: string;
@@ -344,8 +331,6 @@ interface UsageApi {
344
331
  /** The one verb this module needs: the `ai.usage` operation. */
345
332
  type UsageTransport = Pick<HttpTransport, "call">;
346
333
  declare function createUsageApi(transport: UsageTransport): UsageApi;
347
- //#endregion
348
- //#region src/create-standards.d.ts
349
334
  type NameOf<B> = B extends {
350
335
  _types: {
351
336
  name: infer N extends string;
@@ -381,5 +366,4 @@ declare function createStandards<const TBundles extends readonly AnyBundle[]>(co
381
366
  bundles: TBundles;
382
367
  }): Standards & ObjectsOf<ObjectsOfBundles<TBundles>>;
383
368
  declare function createStandards(config?: StandardsConfig): Standards;
384
- //#endregion
385
369
  export { PrivateUploadedFile as A, DocumentsTransport as B, UpdateManyEntry as C, CamelCase as D, createRecordsQuery as E, UploadedFile as F, SyncTransport as G, FileInput as H, createFilesApi as I, syncBundle as K, AttachToRecordInput as L, UploadFileInput as M, UploadPrivateFileInput as N, FilesApi as O, UploadPublicFileInput as P, AttachToRecordResult as R, UntypedRecordsQuery as S, UpdateManyResult as T, UploadTimeoutOption as U, createDocumentsApi as V, SyncBundleOptions as W, RecordUpdate as _, StandardsConfig as a, RecordsQuery as b, UsageReportInput as c, CreateManyError as d, CreateManyResult as f, RecordInput as g, FetchResult as h, Standards as i, PublicUploadedFile as j, FilesTransport as k, UsageTransport as l, DeleteManyResult as m, ObjectsOf as n, createStandards as o, DeleteManyError as p, ObjectsOfBundles as r, UsageApi as s, AnyBundle as t, createUsageApi as u, RecordsAggregateOptions as v, UpdateManyError as w, UntypedBuilder as x, RecordsExportOptions as y, DocumentsApi as z };
@@ -1,6 +1,5 @@
1
1
 
2
2
  import { Operation, OperationInput, OperationResult } from "@standards/schema/api";
3
- //#region src/errors.d.ts
4
3
  /**
5
4
  * Any non-2xx answer from a Standards API. `code` is the server's `SchemaErrorCode` when it sent
6
5
  * one; `details` is the body's `details` field, kept as the server sent it.
@@ -36,8 +35,6 @@ declare class BundleValidationError extends StandardsRequestError {
36
35
  declare class StandardsConfigurationError extends Error {
37
36
  constructor(message: string);
38
37
  }
39
- //#endregion
40
- //#region src/transport/http-transport.d.ts
41
38
  /** Per-request overrides a multipart upload may carry. */
42
39
  interface MultipartRequestOptions {
43
40
  /** This request's timeout in ms, instead of the client's `timeoutMs`. */
@@ -161,5 +158,4 @@ declare function createHttpTransport(config: HttpTransportConfig): HttpTransport
161
158
  * the bearer key and tenant header, one attempt, no refresh.
162
159
  */
163
160
  declare function createTransport(config: TransportConfig): HttpTransport;
164
- //#endregion
165
161
  export { StandardsRequestError as _, OperationStreamOptions as a, UploadProgress as c, readRefusal as d, refusalOf as f, StandardsConfigurationError as g, StandardsAuthError as h, OperationCallOptions as i, createHttpTransport as l, BundleValidationError as m, HttpTransportConfig as n, Transport as o, BundleConflictError as p, MultipartRequestOptions as r, TransportConfig as s, HttpTransport as t, createTransport as u };
@@ -1,6 +1,5 @@
1
1
 
2
2
  import { Operation, OperationInput, OperationResult } from "@standards/schema/api";
3
- //#region src/errors.d.ts
4
3
  /**
5
4
  * Any non-2xx answer from a Standards API. `code` is the server's `SchemaErrorCode` when it sent
6
5
  * one; `details` is the body's `details` field, kept as the server sent it.
@@ -36,8 +35,6 @@ declare class BundleValidationError extends StandardsRequestError {
36
35
  declare class StandardsConfigurationError extends Error {
37
36
  constructor(message: string);
38
37
  }
39
- //#endregion
40
- //#region src/transport/http-transport.d.ts
41
38
  /** Per-request overrides a multipart upload may carry. */
42
39
  interface MultipartRequestOptions {
43
40
  /** This request's timeout in ms, instead of the client's `timeoutMs`. */
@@ -161,5 +158,4 @@ declare function createHttpTransport(config: HttpTransportConfig): HttpTransport
161
158
  * the bearer key and tenant header, one attempt, no refresh.
162
159
  */
163
160
  declare function createTransport(config: TransportConfig): HttpTransport;
164
- //#endregion
165
161
  export { StandardsRequestError as _, OperationStreamOptions as a, UploadProgress as c, readRefusal as d, refusalOf as f, StandardsConfigurationError as g, StandardsAuthError as h, OperationCallOptions as i, createHttpTransport as l, BundleValidationError as m, HttpTransportConfig as n, Transport as o, BundleConflictError as p, MultipartRequestOptions as r, TransportConfig as s, HttpTransport as t, createTransport as u };
@@ -0,0 +1,2 @@
1
+ /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
+ let e=require("@standards/schema"),t=require("@standards/schema/api");var StandardsRequestError=class extends Error{constructor(e,t,n,r){super(t),this.name=`StandardsRequestError`,this.status=e,this.code=n,this.details=r}},StandardsAuthError=class extends StandardsRequestError{constructor(e,t,n,r){super(e,t,n,r),this.name=`StandardsAuthError`}},BundleConflictError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleConflictError`;let r=/"([^"]+)" is owned by (\S+)/.exec(t);this.objectName=r?.[1]??``,this.owner=r?.[2]??``}},BundleValidationError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleValidationError`}},StandardsConfigurationError=class extends Error{constructor(e){super(e),this.name=`StandardsConfigurationError`}};function schemaApiErrorCode(e){if(typeof e!=`object`||!e||!(`code`in e))return;let{code:t}=e;return typeof t==`string`?t:void 0}const n=/* @__PURE__ */ new Set([e.SchemaErrorCode.CONFIGURATION_REQUIRED]);function isPermanentRefusal(e){let t=schemaApiErrorCode(e);return t!==void 0&&n.has(t)}function isObjectNotFound(t){if(typeof t!=`object`||!t)return!1;let{code:n,status:r}=t;return n===e.SchemaErrorCode.OBJECT_NOT_FOUND||r===404}function isDraftRevisionConflict(t){return schemaApiErrorCode(t)===e.SchemaErrorCode.DRAFT_REVISION_CONFLICT}const r=new Set(e.DRAFT_CONFLICT_KINDS);function draftConflictChanges(e){if(!isDraftRevisionConflict(e))return[];let t=e.details?.changes;return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.key==`string`&&typeof e.label==`string`&&typeof e.seen==`string`&&r.has(e.kind)):[]}function isViewNotFound(e){return typeof e!=`object`||!e?!1:e.status===404}function parseContentDispositionFilename(e){if(!e)return;let t=e.match(/filename\*\s*=\s*(?:UTF-8|utf-8)''([^;]+)/i);if(t?.[1])try{return decodeURIComponent(t[1].trim())}catch{}let n=e.match(/filename\s*=\s*"([^"]*)"|filename\s*=\s*([^;]+)/i);return(n?.[1]??n?.[2])?.trim()||void 0}function recordsPath(e,...n){return[`/records`,...[e,...n].map(t.encodePathSegment)].join(`/`)}function resolveWithinBase(t,n){let r=t.endsWith(`/`)?t:`${t}/`,i=new URL(r),a=n.replace(/^\/+/,``),[o]=a.split(/[?#]/);if((o??``).split(`/`).some(e=>e===`..`||e===`.`))throw new e.ValidationError(`Request path "${n}" walks outside its own collection`,[]);let s=new URL(a,i);if(s.origin!==i.origin||!s.pathname.startsWith(i.pathname))throw new e.ValidationError(`Request path "${n}" resolves outside the API base "${i.pathname}"`,[]);return s}function readJson(e){return e.status===204||e.headers.get(`content-length`)===`0`?null:e.json()}async function readDownload(e){let t=await e.blob();return{blob:t,filename:parseContentDispositionFilename(e.headers.get(`Content-Disposition`)),mimeType:e.headers.get(`Content-Type`)??t.type}}function multipartBody(e,t){let n=new FormData;for(let[r,i]of Object.entries(t??{}))if(i!=null){if(r===e)for(let t of Array.isArray(i)?i:[i]){let r=t.name;typeof r==`string`?n.append(e,t,r):n.append(e,t)}else n.append(r,String(i))}return n}function headerRecord(e){return e===void 0?{}:e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}}function withoutContentType(e){return Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`content-type`))}function parseJsonObject(e){try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return}}function refusalFrom(e,t,n){let r=parseJsonObject(t),i=r?.message??r?.error??r?.detail,a=i==null?n&&r===void 0&&t?t:`Request failed with status ${e}`:String(i),o=typeof r?.code==`string`?r.code:void 0;return new(e===401||e===403?StandardsAuthError:StandardsRequestError)(e,a,o,r?.details)}function refusalOf(e,t){return refusalFrom(e,t,!1)}async function readRefusal(e){return refusalOf(e.status,await e.text().catch(()=>``))}function isTimeout(e){return e instanceof DOMException&&e.name===`TimeoutError`}function trimSlashes(e,t){let n=0,r=e.length;for(;t&&n<r&&e[n]===`/`;)n+=1;for(;r>n&&e[r-1]===`/`;)--r;return e.slice(n,r)}function backoff(e){return new Promise(t=>setTimeout(t,1e3*2**e))}function abortReason(e){return e?.aborted?e.reason:new DOMException(`The operation was aborted.`,`AbortError`)}function canReportUploadProgress(e){return typeof XMLHttpRequest>`u`?!1:e.fetch===void 0||e.uploadAuthorization!==void 0}function sendWithProgress(e,t){let{signal:n}=e;return n?.aborted?Promise.reject(abortReason(n)):new Promise((r,i)=>{let a=new XMLHttpRequest;a.open(e.method,e.url);for(let[t,n]of Object.entries(e.headers))a.setRequestHeader(t,n);let o=Object.keys(e.headers).some(e=>e.toLowerCase()===`authorization`);e.token&&!o&&a.setRequestHeader(`Authorization`,`Bearer ${e.token}`),a.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onUploadProgress({loaded:t.loaded,total:t.total})});let onAbort=()=>a.abort();n?.addEventListener(`abort`,onAbort,{once:!0});let settle=()=>n?.removeEventListener(`abort`,onAbort);a.addEventListener(`load`,()=>{if(settle(),a.status<200||a.status>=300)i(refusalOf(a.status,a.responseText));else try{r(t(a.responseText))}catch(e){i(e)}}),a.addEventListener(`error`,()=>{settle(),i(new StandardsRequestError(0,`Network request failed`))}),a.addEventListener(`abort`,()=>{settle(),i(abortReason(n))}),a.send(e.form)})}function createHttpTransport(e){let{baseUrl:n,onUnauthorized:r,getRetries:i=0}=e,a=e.timeoutMs??3e4,o=e.apiPrefix===void 0?void 0:trimSlashes(e.apiPrefix,!0),s=o?`${trimSlashes(n,!1)}/${o}`:n;function buildUrl(e,t){let n=resolveWithinBase(s,e);for(let[e,r]of Object.entries(t??{}))r!=null&&n.searchParams.set(e,String(r));return n.toString()}async function headersFor(t){let n={"Content-Type":`application/json`,...headerRecord(await e.headers?.()),...headerRecord(t.headers)};return t.body instanceof FormData?withoutContentType(n):n}function observe(t){try{e.onResponse?.(t)}catch{}}async function fetchOnce(t,n,r){let i=n.signal??void 0;i?.throwIfAborted();let a=r===null?void 0:AbortSignal.timeout(r),o=new AbortController,expire=()=>o.abort(a?.reason);a?.addEventListener(`abort`,expire,{once:!0});let s=i?AbortSignal.any([i,o.signal]):o.signal,c=new Promise((e,t)=>{s.addEventListener(`abort`,()=>t(s.reason),{once:!0})});try{let r=e.fetch??fetch,i=await headersFor(n);return await Promise.race([r(t,{...n,headers:i,signal:s}),c])}catch(e){throw i?.aborted?i.reason:e}finally{a?.removeEventListener(`abort`,expire)}}function connectionFailure(e){return e instanceof TypeError||isTimeout(e)?new StandardsRequestError(0,`Could not connect to ${n}`):e}async function refreshAndRetry(e,t,n){try{if(!await r?.())return;let i=await fetchOnce(e,t,n);return observe(i),i}catch{if(t.signal?.aborted)throw t.signal.reason;return}}async function readRefusalWithin(e){let t,n=new Promise(n=>{t=setTimeout(()=>n(refusalFrom(e.status,``,!1)),1500)});try{let t=e.text().catch(()=>``).then(t=>refusalFrom(e.status,t,!1));return await Promise.race([t,n])}finally{clearTimeout(t)}}async function send(e,t,n,o){let s=buildUrl(e,n.params),c=(t.method??`GET`).toUpperCase(),l=n.maxRetries??(c===`GET`?i:0),u=n.timeoutMs===void 0?a:n.timeoutMs;for(let e=0;;e++){let i=e<l,a;try{a=await fetchOnce(s,t,u)}catch(n){if(i&&n instanceof TypeError&&!t.signal?.aborted){await backoff(e);continue}throw connectionFailure(n)}if(observe(a),a.status>=500&&i){let t=await readRefusalWithin(a);if(isPermanentRefusal(t))throw t;await backoff(e)}else{if(a.status===401&&r&&(a=await refreshAndRetry(s,t,u)??a),!a.ok){let e=await a.text().catch(()=>``);throw refusalFrom(a.status,e,n.plainTextRefusal??!1)}return await o(a)}}}async function stream(n,i,a={}){let{path:o,query:s,body:c,headers:l}=(0,t.splitOperationInput)(n,i??{}),u=buildUrl(o,s),{signal:d,onRequest:f}=a,p=e.fetch??fetch,attempt=async()=>(f?.(),await p(u,{method:n.method,body:c===void 0?void 0:JSON.stringify(c),signal:d,headers:await headersFor({headers:{...l,...a.headers}})})),m=await attempt();if(m.status===401){let e=await readRefusal(m);if(e.code===`MFA_REQUIRED`||!r||!await r().catch(()=>!1))throw e;d?.throwIfAborted(),m=await attempt()}if(!m.ok)throw await readRefusal(m);return m}async function json(e,t,n){return await send(t,{method:e,body:n?JSON.stringify(n):void 0},{},readJson)}return{async call(n,r,i={}){if(n.response===`events`)return await stream(n,r,{signal:i.signal});let{path:a,query:o,body:s,headers:c}=(0,t.splitOperationInput)(n,r??{});if(n.upload!==void 0&&i.onUploadProgress&&canReportUploadProgress(e)){i.signal?.throwIfAborted();let t=await e.uploadAuthorization?.()??null;return await sendWithProgress({url:buildUrl(a,o),method:n.method,headers:withoutContentType({...headerRecord(await e.headers?.()),...c}),token:t,form:multipartBody(n.upload.field,s),onUploadProgress:i.onUploadProgress,signal:i.signal},e=>e?JSON.parse(e):null)}let l=n.upload===void 0?s===void 0?void 0:JSON.stringify(s):multipartBody(n.upload.field,s),u=n.response===`bytes`?readDownload:readJson;return await send(a,{method:n.method,body:l,signal:i.signal,...c?{headers:c}:{},...i.keepalive?{keepalive:!0}:{}},{params:o,maxRetries:i.maxRetries,timeoutMs:i.timeoutMs},u)},stream,async get(e,t){return await send(e,{method:`GET`},{params:t},readJson)},post:(e,t)=>json(`POST`,e,t),patch:(e,t)=>json(`PATCH`,e,t),put:(e,t)=>json(`PUT`,e,t),delete:e=>json(`DELETE`,e),async getText(e,t){return await send(e,{method:`GET`},{params:t,plainTextRefusal:!0},e=>e.text())},async postRaw(e,t){return await send(e,{method:`POST`,body:JSON.stringify(t)},{plainTextRefusal:!0},e=>e)},async postMultipart(e,t,n={}){return await send(e,{method:`POST`,body:t},{timeoutMs:n.timeoutMs},readJson)}}}function createTransport(e){let{baseUrl:t,apiKey:n,tenantId:r,timeoutMs:i}=e,a={Authorization:`Bearer ${n}`,...r?{"X-Tenant-ID":r}:{}};return createHttpTransport({baseUrl:t,timeoutMs:i,headers:()=>a})}Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return StandardsRequestError}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return recordsPath}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return isDraftRevisionConflict}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return isViewNotFound}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return schemaApiErrorCode}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return StandardsConfigurationError}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return StandardsAuthError}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return refusalOf}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return isObjectNotFound}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return BundleValidationError}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return createTransport}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return parseContentDispositionFilename}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return BundleConflictError}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return readRefusal}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return draftConflictChanges}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return createHttpTransport}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return isPermanentRefusal}});
@@ -0,0 +1,2 @@
1
+ /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
+ import{DRAFT_CONFLICT_KINDS as e,SchemaErrorCode as t,ValidationError as n}from"@standards/schema";import{encodePathSegment as r,splitOperationInput as i}from"@standards/schema/api";var StandardsRequestError=class extends Error{constructor(e,t,n,r){super(t),this.name=`StandardsRequestError`,this.status=e,this.code=n,this.details=r}},StandardsAuthError=class extends StandardsRequestError{constructor(e,t,n,r){super(e,t,n,r),this.name=`StandardsAuthError`}},BundleConflictError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleConflictError`;let r=/"([^"]+)" is owned by (\S+)/.exec(t);this.objectName=r?.[1]??``,this.owner=r?.[2]??``}},BundleValidationError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleValidationError`}},StandardsConfigurationError=class extends Error{constructor(e){super(e),this.name=`StandardsConfigurationError`}};function schemaApiErrorCode(e){if(typeof e!=`object`||!e||!(`code`in e))return;let{code:t}=e;return typeof t==`string`?t:void 0}const a=/* @__PURE__ */ new Set([t.CONFIGURATION_REQUIRED]);function isPermanentRefusal(e){let t=schemaApiErrorCode(e);return t!==void 0&&a.has(t)}function isObjectNotFound(e){if(typeof e!=`object`||!e)return!1;let{code:n,status:r}=e;return n===t.OBJECT_NOT_FOUND||r===404}function isDraftRevisionConflict(e){return schemaApiErrorCode(e)===t.DRAFT_REVISION_CONFLICT}const o=new Set(e);function draftConflictChanges(e){if(!isDraftRevisionConflict(e))return[];let t=e.details?.changes;return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.key==`string`&&typeof e.label==`string`&&typeof e.seen==`string`&&o.has(e.kind)):[]}function isViewNotFound(e){return typeof e!=`object`||!e?!1:e.status===404}function parseContentDispositionFilename(e){if(!e)return;let t=e.match(/filename\*\s*=\s*(?:UTF-8|utf-8)''([^;]+)/i);if(t?.[1])try{return decodeURIComponent(t[1].trim())}catch{}let n=e.match(/filename\s*=\s*"([^"]*)"|filename\s*=\s*([^;]+)/i);return(n?.[1]??n?.[2])?.trim()||void 0}function recordsPath(e,...t){return[`/records`,...[e,...t].map(r)].join(`/`)}function resolveWithinBase(e,t){let r=e.endsWith(`/`)?e:`${e}/`,i=new URL(r),a=t.replace(/^\/+/,``),[o]=a.split(/[?#]/);if((o??``).split(`/`).some(e=>e===`..`||e===`.`))throw new n(`Request path "${t}" walks outside its own collection`,[]);let s=new URL(a,i);if(s.origin!==i.origin||!s.pathname.startsWith(i.pathname))throw new n(`Request path "${t}" resolves outside the API base "${i.pathname}"`,[]);return s}function readJson(e){return e.status===204||e.headers.get(`content-length`)===`0`?null:e.json()}async function readDownload(e){let t=await e.blob();return{blob:t,filename:parseContentDispositionFilename(e.headers.get(`Content-Disposition`)),mimeType:e.headers.get(`Content-Type`)??t.type}}function multipartBody(e,t){let n=new FormData;for(let[r,i]of Object.entries(t??{}))if(i!=null){if(r===e)for(let t of Array.isArray(i)?i:[i]){let r=t.name;typeof r==`string`?n.append(e,t,r):n.append(e,t)}else n.append(r,String(i))}return n}function headerRecord(e){return e===void 0?{}:e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}}function withoutContentType(e){return Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`content-type`))}function parseJsonObject(e){try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return}}function refusalFrom(e,t,n){let r=parseJsonObject(t),i=r?.message??r?.error??r?.detail,a=i==null?n&&r===void 0&&t?t:`Request failed with status ${e}`:String(i),o=typeof r?.code==`string`?r.code:void 0;return new(e===401||e===403?StandardsAuthError:StandardsRequestError)(e,a,o,r?.details)}function refusalOf(e,t){return refusalFrom(e,t,!1)}async function readRefusal(e){return refusalOf(e.status,await e.text().catch(()=>``))}function isTimeout(e){return e instanceof DOMException&&e.name===`TimeoutError`}function trimSlashes(e,t){let n=0,r=e.length;for(;t&&n<r&&e[n]===`/`;)n+=1;for(;r>n&&e[r-1]===`/`;)--r;return e.slice(n,r)}function backoff(e){return new Promise(t=>setTimeout(t,1e3*2**e))}function abortReason(e){return e?.aborted?e.reason:new DOMException(`The operation was aborted.`,`AbortError`)}function canReportUploadProgress(e){return typeof XMLHttpRequest>`u`?!1:e.fetch===void 0||e.uploadAuthorization!==void 0}function sendWithProgress(e,t){let{signal:n}=e;return n?.aborted?Promise.reject(abortReason(n)):new Promise((r,i)=>{let a=new XMLHttpRequest;a.open(e.method,e.url);for(let[t,n]of Object.entries(e.headers))a.setRequestHeader(t,n);let o=Object.keys(e.headers).some(e=>e.toLowerCase()===`authorization`);e.token&&!o&&a.setRequestHeader(`Authorization`,`Bearer ${e.token}`),a.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onUploadProgress({loaded:t.loaded,total:t.total})});let onAbort=()=>a.abort();n?.addEventListener(`abort`,onAbort,{once:!0});let settle=()=>n?.removeEventListener(`abort`,onAbort);a.addEventListener(`load`,()=>{if(settle(),a.status<200||a.status>=300)i(refusalOf(a.status,a.responseText));else try{r(t(a.responseText))}catch(e){i(e)}}),a.addEventListener(`error`,()=>{settle(),i(new StandardsRequestError(0,`Network request failed`))}),a.addEventListener(`abort`,()=>{settle(),i(abortReason(n))}),a.send(e.form)})}function createHttpTransport(e){let{baseUrl:t,onUnauthorized:n,getRetries:r=0}=e,a=e.timeoutMs??3e4,o=e.apiPrefix===void 0?void 0:trimSlashes(e.apiPrefix,!0),s=o?`${trimSlashes(t,!1)}/${o}`:t;function buildUrl(e,t){let n=resolveWithinBase(s,e);for(let[e,r]of Object.entries(t??{}))r!=null&&n.searchParams.set(e,String(r));return n.toString()}async function headersFor(t){let n={"Content-Type":`application/json`,...headerRecord(await e.headers?.()),...headerRecord(t.headers)};return t.body instanceof FormData?withoutContentType(n):n}function observe(t){try{e.onResponse?.(t)}catch{}}async function fetchOnce(t,n,r){let i=n.signal??void 0;i?.throwIfAborted();let a=r===null?void 0:AbortSignal.timeout(r),o=new AbortController,expire=()=>o.abort(a?.reason);a?.addEventListener(`abort`,expire,{once:!0});let s=i?AbortSignal.any([i,o.signal]):o.signal,c=new Promise((e,t)=>{s.addEventListener(`abort`,()=>t(s.reason),{once:!0})});try{let r=e.fetch??fetch,i=await headersFor(n);return await Promise.race([r(t,{...n,headers:i,signal:s}),c])}catch(e){throw i?.aborted?i.reason:e}finally{a?.removeEventListener(`abort`,expire)}}function connectionFailure(e){return e instanceof TypeError||isTimeout(e)?new StandardsRequestError(0,`Could not connect to ${t}`):e}async function refreshAndRetry(e,t,r){try{if(!await n?.())return;let i=await fetchOnce(e,t,r);return observe(i),i}catch{if(t.signal?.aborted)throw t.signal.reason;return}}async function readRefusalWithin(e){let t,n=new Promise(n=>{t=setTimeout(()=>n(refusalFrom(e.status,``,!1)),1500)});try{let t=e.text().catch(()=>``).then(t=>refusalFrom(e.status,t,!1));return await Promise.race([t,n])}finally{clearTimeout(t)}}async function send(e,t,i,o){let s=buildUrl(e,i.params),c=(t.method??`GET`).toUpperCase(),l=i.maxRetries??(c===`GET`?r:0),u=i.timeoutMs===void 0?a:i.timeoutMs;for(let e=0;;e++){let r=e<l,a;try{a=await fetchOnce(s,t,u)}catch(n){if(r&&n instanceof TypeError&&!t.signal?.aborted){await backoff(e);continue}throw connectionFailure(n)}if(observe(a),a.status>=500&&r){let t=await readRefusalWithin(a);if(isPermanentRefusal(t))throw t;await backoff(e)}else{if(a.status===401&&n&&(a=await refreshAndRetry(s,t,u)??a),!a.ok){let e=await a.text().catch(()=>``);throw refusalFrom(a.status,e,i.plainTextRefusal??!1)}return await o(a)}}}async function stream(t,r,a={}){let{path:o,query:s,body:c,headers:l}=i(t,r??{}),u=buildUrl(o,s),{signal:d,onRequest:f}=a,p=e.fetch??fetch,attempt=async()=>(f?.(),await p(u,{method:t.method,body:c===void 0?void 0:JSON.stringify(c),signal:d,headers:await headersFor({headers:{...l,...a.headers}})})),m=await attempt();if(m.status===401){let e=await readRefusal(m);if(e.code===`MFA_REQUIRED`||!n||!await n().catch(()=>!1))throw e;d?.throwIfAborted(),m=await attempt()}if(!m.ok)throw await readRefusal(m);return m}async function json(e,t,n){return await send(t,{method:e,body:n?JSON.stringify(n):void 0},{},readJson)}return{async call(t,n,r={}){if(t.response===`events`)return await stream(t,n,{signal:r.signal});let{path:a,query:o,body:s,headers:c}=i(t,n??{});if(t.upload!==void 0&&r.onUploadProgress&&canReportUploadProgress(e)){r.signal?.throwIfAborted();let n=await e.uploadAuthorization?.()??null;return await sendWithProgress({url:buildUrl(a,o),method:t.method,headers:withoutContentType({...headerRecord(await e.headers?.()),...c}),token:n,form:multipartBody(t.upload.field,s),onUploadProgress:r.onUploadProgress,signal:r.signal},e=>e?JSON.parse(e):null)}let l=t.upload===void 0?s===void 0?void 0:JSON.stringify(s):multipartBody(t.upload.field,s),u=t.response===`bytes`?readDownload:readJson;return await send(a,{method:t.method,body:l,signal:r.signal,...c?{headers:c}:{},...r.keepalive?{keepalive:!0}:{}},{params:o,maxRetries:r.maxRetries,timeoutMs:r.timeoutMs},u)},stream,async get(e,t){return await send(e,{method:`GET`},{params:t},readJson)},post:(e,t)=>json(`POST`,e,t),patch:(e,t)=>json(`PATCH`,e,t),put:(e,t)=>json(`PUT`,e,t),delete:e=>json(`DELETE`,e),async getText(e,t){return await send(e,{method:`GET`},{params:t,plainTextRefusal:!0},e=>e.text())},async postRaw(e,t){return await send(e,{method:`POST`,body:JSON.stringify(t)},{plainTextRefusal:!0},e=>e)},async postMultipart(e,t,n={}){return await send(e,{method:`POST`,body:t},{timeoutMs:n.timeoutMs},readJson)}}}function createTransport(e){let{baseUrl:t,apiKey:n,tenantId:r,timeoutMs:i}=e,a={Authorization:`Bearer ${n}`,...r?{"X-Tenant-ID":r}:{}};return createHttpTransport({baseUrl:t,timeoutMs:i,headers:()=>a})}export{StandardsRequestError as _,recordsPath as a,isDraftRevisionConflict as c,isViewNotFound as d,schemaApiErrorCode as f,StandardsConfigurationError as g,StandardsAuthError as h,refusalOf as i,isObjectNotFound as l,BundleValidationError as m,createTransport as n,parseContentDispositionFilename as o,BundleConflictError as p,readRefusal as r,draftConflictChanges as s,createHttpTransport as t,isPermanentRefusal as u};
package/dist/index.d.mts CHANGED
@@ -1,22 +1,18 @@
1
1
 
2
- import { _ as StandardsRequestError, g as StandardsConfigurationError, h as StandardsAuthError, m as BundleValidationError, o as Transport, p as BundleConflictError, r as MultipartRequestOptions, s as TransportConfig, u as createTransport } from "./http-transport-C1u5UGkC.mjs";
3
- import { A as PrivateUploadedFile, B as DocumentsTransport, C as UpdateManyEntry, D as CamelCase, E as createRecordsQuery, F as UploadedFile, G as SyncTransport, H as FileInput, I as createFilesApi, K as syncBundle, L as AttachToRecordInput, M as UploadFileInput, N as UploadPrivateFileInput, O as FilesApi, P as UploadPublicFileInput, R as AttachToRecordResult, S as UntypedRecordsQuery, T as UpdateManyResult, U as UploadTimeoutOption, V as createDocumentsApi, W as SyncBundleOptions, _ as RecordUpdate, a as StandardsConfig, b as RecordsQuery, c as UsageReportInput, d as CreateManyError, f as CreateManyResult, g as RecordInput, h as FetchResult, i as Standards, j as PublicUploadedFile, k as FilesTransport, l as UsageTransport, m as DeleteManyResult, n as ObjectsOf, o as createStandards, p as DeleteManyError, r as ObjectsOfBundles, s as UsageApi, t as AnyBundle, u as createUsageApi, v as RecordsAggregateOptions, w as UpdateManyError, x as UntypedBuilder, y as RecordsExportOptions, z as DocumentsApi } from "./create-standards-ClcULv5H.mjs";
2
+ import { A as PrivateUploadedFile, B as DocumentsTransport, C as UpdateManyEntry, D as CamelCase, E as createRecordsQuery, F as UploadedFile, G as SyncTransport, H as FileInput, I as createFilesApi, K as syncBundle, L as AttachToRecordInput, M as UploadFileInput, N as UploadPrivateFileInput, O as FilesApi, P as UploadPublicFileInput, R as AttachToRecordResult, S as UntypedRecordsQuery, T as UpdateManyResult, U as UploadTimeoutOption, V as createDocumentsApi, W as SyncBundleOptions, _ as RecordUpdate, a as StandardsConfig, b as RecordsQuery, c as UsageReportInput, d as CreateManyError, f as CreateManyResult, g as RecordInput, h as FetchResult, i as Standards, j as PublicUploadedFile, k as FilesTransport, l as UsageTransport, m as DeleteManyResult, n as ObjectsOf, o as createStandards, p as DeleteManyError, r as ObjectsOfBundles, s as UsageApi, t as AnyBundle, u as createUsageApi, v as RecordsAggregateOptions, w as UpdateManyError, x as UntypedBuilder, y as RecordsExportOptions, z as DocumentsApi } from "./create-standards-HiWpTAlP.mjs";
3
+ import { _ as StandardsRequestError, g as StandardsConfigurationError, h as StandardsAuthError, m as BundleValidationError, o as Transport, p as BundleConflictError, r as MultipartRequestOptions, s as TransportConfig, u as createTransport } from "./http-transport-BxJhcXjy.mjs";
4
4
  import { ActorType, Attribute, BUNDLE_NAME_PATTERN, BuiltBundle, BundleBuilder, BundlePiece, CollectionPage, CollectionResponse, ContentViewDefinition, DuplicateError, ExtractRecord, ExtractRecordInput, ExtractRecordInputStrict, ExtractRecordStrict, ExtractRecordUpdate, ExtractRecordUpdateStrict, FilterCombinator, FilterOperator, FilterRule, FilterState, ForbiddenError, InstalledBundleSummary, NotFoundError, ObjectBuilderLike, ObjectDefinition, ObjectDefinition as ObjectDefinition$1, RecordAccessRole, RecordAudience, RecordMetadata, SchemaError, SchemaErrorCode, SchemaSourceCurrencyRetype, SchemaSourcePhoneRetype, SchemaSourceRename, SchemaSourceResolution, SchemaSourceRetype, SortDirection, SortRule, SyncBundleResult, UsageBucket, UsageModality, UsageReport, UsageScope, ValidationError, ViewContentDefinition, ViewDeclaration, ViewerAccess, WalletState, assertBundleName, bundle, canonicalStringify, checkbox, content, currency, currentActor, date, detailView, document, formula, group, listView, location, multiselect, now, number, object, phone, query, relation, richtext, rollup, select, status, text, today, user } from "@standards/schema";
5
5
  import { encodePathSegment } from "@standards/schema/api";
6
- //#region src/records/revive.d.ts
7
6
  /**
8
7
  * JSON delivers dates as ISO strings; the client knows the definition, so it
9
8
  * revives system timestamps and every `date` attribute so `ExtractRecord` tells
10
9
  * the truth on the wire. Nothing else is transformed.
11
10
  */
12
11
  export declare function reviveRecord<T extends Record<string, unknown>>(definition: ObjectDefinition$1 | null, raw: T): T;
13
- //#endregion
14
- //#region src/path.d.ts
15
12
  /**
16
13
  * Every caller-supplied path segment is percent-encoded: `objectName` and `id`
17
14
  * come from the application, and an id such as `../../bundles/x` must
18
15
  * never leave `/records/<object>/`.
19
16
  */
20
17
  export declare function recordsPath(objectName: string, ...segments: string[]): string;
21
- //#endregion
22
18
  export { type ActorType, type AnyBundle, type AttachToRecordInput, type AttachToRecordResult, type Attribute, BUNDLE_NAME_PATTERN, type BuiltBundle, type BundleBuilder, BundleConflictError, type BundlePiece, BundleValidationError, type CamelCase, type CollectionPage, type CollectionResponse, type ContentViewDefinition, type CreateManyError, type CreateManyResult, type DeleteManyError, type DeleteManyResult, type DocumentsApi, type DocumentsTransport, DuplicateError, type ExtractRecord, type ExtractRecordInput, type ExtractRecordInputStrict, type ExtractRecordStrict, type ExtractRecordUpdate, type ExtractRecordUpdateStrict, type FetchResult, type FileInput, type FilesApi, type FilesTransport, type FilterCombinator, type FilterOperator, type FilterRule, type FilterState, ForbiddenError, type InstalledBundleSummary, type MultipartRequestOptions, NotFoundError, type ObjectBuilderLike, type ObjectDefinition, type ObjectsOf, type ObjectsOfBundles, type PrivateUploadedFile, type PublicUploadedFile, type RecordAccessRole, type RecordAudience, type RecordInput, type RecordMetadata, type RecordUpdate, type RecordsAggregateOptions, type RecordsExportOptions, type RecordsQuery, SchemaError, SchemaErrorCode, type SchemaSourceCurrencyRetype, type SchemaSourcePhoneRetype, type SchemaSourceRename, type SchemaSourceResolution, type SchemaSourceRetype, type SortDirection, type SortRule, type Standards, StandardsAuthError, type StandardsConfig, StandardsConfigurationError, StandardsRequestError, type SyncBundleOptions, type SyncBundleResult, type SyncTransport, type Transport, type TransportConfig, type UntypedBuilder, type UntypedRecordsQuery, type UpdateManyEntry, type UpdateManyError, type UpdateManyResult, type UploadFileInput, type UploadPrivateFileInput, type UploadPublicFileInput, type UploadTimeoutOption, type UploadedFile, type UsageApi, type UsageBucket, type UsageModality, type UsageReport, type UsageReportInput, type UsageScope, type UsageTransport, ValidationError, type ViewContentDefinition, type ViewDeclaration, type ViewerAccess, type WalletState, assertBundleName, bundle, canonicalStringify, checkbox, content, createDocumentsApi, createFilesApi, createRecordsQuery, createStandards, createTransport, createUsageApi, currency, currentActor, date, detailView, document, encodePathSegment, formula, group, listView, location, multiselect, now, number, object, phone, query, relation, richtext, rollup, select, status, syncBundle, text, today, user };
package/dist/index.d.ts CHANGED
@@ -1,22 +1,18 @@
1
1
 
2
- import { _ as StandardsRequestError, g as StandardsConfigurationError, h as StandardsAuthError, m as BundleValidationError, o as Transport, p as BundleConflictError, r as MultipartRequestOptions, s as TransportConfig, u as createTransport } from "./http-transport-C1u5UGkC.js";
3
- import { A as PrivateUploadedFile, B as DocumentsTransport, C as UpdateManyEntry, D as CamelCase, E as createRecordsQuery, F as UploadedFile, G as SyncTransport, H as FileInput, I as createFilesApi, K as syncBundle, L as AttachToRecordInput, M as UploadFileInput, N as UploadPrivateFileInput, O as FilesApi, P as UploadPublicFileInput, R as AttachToRecordResult, S as UntypedRecordsQuery, T as UpdateManyResult, U as UploadTimeoutOption, V as createDocumentsApi, W as SyncBundleOptions, _ as RecordUpdate, a as StandardsConfig, b as RecordsQuery, c as UsageReportInput, d as CreateManyError, f as CreateManyResult, g as RecordInput, h as FetchResult, i as Standards, j as PublicUploadedFile, k as FilesTransport, l as UsageTransport, m as DeleteManyResult, n as ObjectsOf, o as createStandards, p as DeleteManyError, r as ObjectsOfBundles, s as UsageApi, t as AnyBundle, u as createUsageApi, v as RecordsAggregateOptions, w as UpdateManyError, x as UntypedBuilder, y as RecordsExportOptions, z as DocumentsApi } from "./create-standards-DN982-FF.js";
4
- import { encodePathSegment } from "@standards/schema/api";
2
+ import { A as PrivateUploadedFile, B as DocumentsTransport, C as UpdateManyEntry, D as CamelCase, E as createRecordsQuery, F as UploadedFile, G as SyncTransport, H as FileInput, I as createFilesApi, K as syncBundle, L as AttachToRecordInput, M as UploadFileInput, N as UploadPrivateFileInput, O as FilesApi, P as UploadPublicFileInput, R as AttachToRecordResult, S as UntypedRecordsQuery, T as UpdateManyResult, U as UploadTimeoutOption, V as createDocumentsApi, W as SyncBundleOptions, _ as RecordUpdate, a as StandardsConfig, b as RecordsQuery, c as UsageReportInput, d as CreateManyError, f as CreateManyResult, g as RecordInput, h as FetchResult, i as Standards, j as PublicUploadedFile, k as FilesTransport, l as UsageTransport, m as DeleteManyResult, n as ObjectsOf, o as createStandards, p as DeleteManyError, r as ObjectsOfBundles, s as UsageApi, t as AnyBundle, u as createUsageApi, v as RecordsAggregateOptions, w as UpdateManyError, x as UntypedBuilder, y as RecordsExportOptions, z as DocumentsApi } from "./create-standards-BWOo2EZw.js";
3
+ import { _ as StandardsRequestError, g as StandardsConfigurationError, h as StandardsAuthError, m as BundleValidationError, o as Transport, p as BundleConflictError, r as MultipartRequestOptions, s as TransportConfig, u as createTransport } from "./http-transport-BxJhcXjy.js";
5
4
  import { ActorType, Attribute, BUNDLE_NAME_PATTERN, BuiltBundle, BundleBuilder, BundlePiece, CollectionPage, CollectionResponse, ContentViewDefinition, DuplicateError, ExtractRecord, ExtractRecordInput, ExtractRecordInputStrict, ExtractRecordStrict, ExtractRecordUpdate, ExtractRecordUpdateStrict, FilterCombinator, FilterOperator, FilterRule, FilterState, ForbiddenError, InstalledBundleSummary, NotFoundError, ObjectBuilderLike, ObjectDefinition, ObjectDefinition as ObjectDefinition$1, RecordAccessRole, RecordAudience, RecordMetadata, SchemaError, SchemaErrorCode, SchemaSourceCurrencyRetype, SchemaSourcePhoneRetype, SchemaSourceRename, SchemaSourceResolution, SchemaSourceRetype, SortDirection, SortRule, SyncBundleResult, UsageBucket, UsageModality, UsageReport, UsageScope, ValidationError, ViewContentDefinition, ViewDeclaration, ViewerAccess, WalletState, assertBundleName, bundle, canonicalStringify, checkbox, content, currency, currentActor, date, detailView, document, formula, group, listView, location, multiselect, now, number, object, phone, query, relation, richtext, rollup, select, status, text, today, user } from "@standards/schema";
6
- //#region src/records/revive.d.ts
5
+ import { encodePathSegment } from "@standards/schema/api";
7
6
  /**
8
7
  * JSON delivers dates as ISO strings; the client knows the definition, so it
9
8
  * revives system timestamps and every `date` attribute so `ExtractRecord` tells
10
9
  * the truth on the wire. Nothing else is transformed.
11
10
  */
12
11
  export declare function reviveRecord<T extends Record<string, unknown>>(definition: ObjectDefinition$1 | null, raw: T): T;
13
- //#endregion
14
- //#region src/path.d.ts
15
12
  /**
16
13
  * Every caller-supplied path segment is percent-encoded: `objectName` and `id`
17
14
  * come from the application, and an id such as `../../bundles/x` must
18
15
  * never leave `/records/<object>/`.
19
16
  */
20
17
  export declare function recordsPath(objectName: string, ...segments: string[]): string;
21
- //#endregion
22
18
  export { type ActorType, type AnyBundle, type AttachToRecordInput, type AttachToRecordResult, type Attribute, BUNDLE_NAME_PATTERN, type BuiltBundle, type BundleBuilder, BundleConflictError, type BundlePiece, BundleValidationError, type CamelCase, type CollectionPage, type CollectionResponse, type ContentViewDefinition, type CreateManyError, type CreateManyResult, type DeleteManyError, type DeleteManyResult, type DocumentsApi, type DocumentsTransport, DuplicateError, type ExtractRecord, type ExtractRecordInput, type ExtractRecordInputStrict, type ExtractRecordStrict, type ExtractRecordUpdate, type ExtractRecordUpdateStrict, type FetchResult, type FileInput, type FilesApi, type FilesTransport, type FilterCombinator, type FilterOperator, type FilterRule, type FilterState, ForbiddenError, type InstalledBundleSummary, type MultipartRequestOptions, NotFoundError, type ObjectBuilderLike, type ObjectDefinition, type ObjectsOf, type ObjectsOfBundles, type PrivateUploadedFile, type PublicUploadedFile, type RecordAccessRole, type RecordAudience, type RecordInput, type RecordMetadata, type RecordUpdate, type RecordsAggregateOptions, type RecordsExportOptions, type RecordsQuery, SchemaError, SchemaErrorCode, type SchemaSourceCurrencyRetype, type SchemaSourcePhoneRetype, type SchemaSourceRename, type SchemaSourceResolution, type SchemaSourceRetype, type SortDirection, type SortRule, type Standards, StandardsAuthError, type StandardsConfig, StandardsConfigurationError, StandardsRequestError, type SyncBundleOptions, type SyncBundleResult, type SyncTransport, type Transport, type TransportConfig, type UntypedBuilder, type UntypedRecordsQuery, type UpdateManyEntry, type UpdateManyError, type UpdateManyResult, type UploadFileInput, type UploadPrivateFileInput, type UploadPublicFileInput, type UploadTimeoutOption, type UploadedFile, type UsageApi, type UsageBucket, type UsageModality, type UsageReport, type UsageReportInput, type UsageScope, type UsageTransport, ValidationError, type ViewContentDefinition, type ViewDeclaration, type ViewerAccess, type WalletState, assertBundleName, bundle, canonicalStringify, checkbox, content, createDocumentsApi, createFilesApi, createRecordsQuery, createStandards, createTransport, createUsageApi, currency, currentActor, date, detailView, document, encodePathSegment, formula, group, listView, location, multiselect, now, number, object, phone, query, relation, richtext, rollup, select, status, syncBundle, text, today, user };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./http-transport-CAPVZuiv.js"),t=require("./create-standards-CjO1pFmM.js");let n=require("@standards/schema/api"),r=require("@standards/schema");Object.defineProperty(exports,"BUNDLE_NAME_PATTERN",{enumerable:!0,get:function(){return r.BUNDLE_NAME_PATTERN}}),exports.BundleConflictError=e.p,exports.BundleValidationError=e.m,Object.defineProperty(exports,"DuplicateError",{enumerable:!0,get:function(){return r.DuplicateError}}),Object.defineProperty(exports,"ForbiddenError",{enumerable:!0,get:function(){return r.ForbiddenError}}),Object.defineProperty(exports,"NotFoundError",{enumerable:!0,get:function(){return r.NotFoundError}}),Object.defineProperty(exports,"SchemaError",{enumerable:!0,get:function(){return r.SchemaError}}),Object.defineProperty(exports,"SchemaErrorCode",{enumerable:!0,get:function(){return r.SchemaErrorCode}}),exports.StandardsAuthError=e.h,exports.StandardsConfigurationError=e.g,exports.StandardsRequestError=e._,Object.defineProperty(exports,"ValidationError",{enumerable:!0,get:function(){return r.ValidationError}}),Object.defineProperty(exports,"assertBundleName",{enumerable:!0,get:function(){return r.assertBundleName}}),Object.defineProperty(exports,"bundle",{enumerable:!0,get:function(){return r.bundle}}),Object.defineProperty(exports,"canonicalStringify",{enumerable:!0,get:function(){return r.canonicalStringify}}),Object.defineProperty(exports,"checkbox",{enumerable:!0,get:function(){return r.checkbox}}),Object.defineProperty(exports,"content",{enumerable:!0,get:function(){return r.content}}),exports.createDocumentsApi=t.l,exports.createFilesApi=t.c,exports.createRecordsQuery=t.i,exports.createStandards=t.n,exports.createTransport=e.n,exports.createUsageApi=t.r,Object.defineProperty(exports,"currency",{enumerable:!0,get:function(){return r.currency}}),Object.defineProperty(exports,"currentActor",{enumerable:!0,get:function(){return r.currentActor}}),Object.defineProperty(exports,"date",{enumerable:!0,get:function(){return r.date}}),Object.defineProperty(exports,"detailView",{enumerable:!0,get:function(){return r.detailView}}),Object.defineProperty(exports,"document",{enumerable:!0,get:function(){return r.document}}),Object.defineProperty(exports,"encodePathSegment",{enumerable:!0,get:function(){return n.encodePathSegment}}),Object.defineProperty(exports,"formula",{enumerable:!0,get:function(){return r.formula}}),Object.defineProperty(exports,"group",{enumerable:!0,get:function(){return r.group}}),Object.defineProperty(exports,"listView",{enumerable:!0,get:function(){return r.listView}}),Object.defineProperty(exports,"location",{enumerable:!0,get:function(){return r.location}}),Object.defineProperty(exports,"multiselect",{enumerable:!0,get:function(){return r.multiselect}}),Object.defineProperty(exports,"now",{enumerable:!0,get:function(){return r.now}}),Object.defineProperty(exports,"number",{enumerable:!0,get:function(){return r.number}}),Object.defineProperty(exports,"object",{enumerable:!0,get:function(){return r.object}}),Object.defineProperty(exports,"phone",{enumerable:!0,get:function(){return r.phone}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return r.query}}),exports.recordsPath=e.a,Object.defineProperty(exports,"relation",{enumerable:!0,get:function(){return r.relation}}),exports.reviveRecord=t.o,Object.defineProperty(exports,"richtext",{enumerable:!0,get:function(){return r.richtext}}),Object.defineProperty(exports,"rollup",{enumerable:!0,get:function(){return r.rollup}}),Object.defineProperty(exports,"select",{enumerable:!0,get:function(){return r.select}}),Object.defineProperty(exports,"status",{enumerable:!0,get:function(){return r.status}}),exports.syncBundle=t.u,Object.defineProperty(exports,"text",{enumerable:!0,get:function(){return r.text}}),Object.defineProperty(exports,"today",{enumerable:!0,get:function(){return r.today}}),Object.defineProperty(exports,"user",{enumerable:!0,get:function(){return r.user}});
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./create-standards-DH5Om9n4.js"),t=require("./http-transport-CfM3m5S2.js");let n=require("@standards/schema/api"),r=require("@standards/schema");Object.defineProperty(exports,"BUNDLE_NAME_PATTERN",{enumerable:!0,get:function(){return r.BUNDLE_NAME_PATTERN}}),exports.BundleConflictError=t.p,exports.BundleValidationError=t.m,Object.defineProperty(exports,"DuplicateError",{enumerable:!0,get:function(){return r.DuplicateError}}),Object.defineProperty(exports,"ForbiddenError",{enumerable:!0,get:function(){return r.ForbiddenError}}),Object.defineProperty(exports,"NotFoundError",{enumerable:!0,get:function(){return r.NotFoundError}}),Object.defineProperty(exports,"SchemaError",{enumerable:!0,get:function(){return r.SchemaError}}),Object.defineProperty(exports,"SchemaErrorCode",{enumerable:!0,get:function(){return r.SchemaErrorCode}}),exports.StandardsAuthError=t.h,exports.StandardsConfigurationError=t.g,exports.StandardsRequestError=t._,Object.defineProperty(exports,"ValidationError",{enumerable:!0,get:function(){return r.ValidationError}}),Object.defineProperty(exports,"assertBundleName",{enumerable:!0,get:function(){return r.assertBundleName}}),Object.defineProperty(exports,"bundle",{enumerable:!0,get:function(){return r.bundle}}),Object.defineProperty(exports,"canonicalStringify",{enumerable:!0,get:function(){return r.canonicalStringify}}),Object.defineProperty(exports,"checkbox",{enumerable:!0,get:function(){return r.checkbox}}),Object.defineProperty(exports,"content",{enumerable:!0,get:function(){return r.content}}),exports.createDocumentsApi=e.l,exports.createFilesApi=e.c,exports.createRecordsQuery=e.i,exports.createStandards=e.n,exports.createTransport=t.n,exports.createUsageApi=e.r,Object.defineProperty(exports,"currency",{enumerable:!0,get:function(){return r.currency}}),Object.defineProperty(exports,"currentActor",{enumerable:!0,get:function(){return r.currentActor}}),Object.defineProperty(exports,"date",{enumerable:!0,get:function(){return r.date}}),Object.defineProperty(exports,"detailView",{enumerable:!0,get:function(){return r.detailView}}),Object.defineProperty(exports,"document",{enumerable:!0,get:function(){return r.document}}),Object.defineProperty(exports,"encodePathSegment",{enumerable:!0,get:function(){return n.encodePathSegment}}),Object.defineProperty(exports,"formula",{enumerable:!0,get:function(){return r.formula}}),Object.defineProperty(exports,"group",{enumerable:!0,get:function(){return r.group}}),Object.defineProperty(exports,"listView",{enumerable:!0,get:function(){return r.listView}}),Object.defineProperty(exports,"location",{enumerable:!0,get:function(){return r.location}}),Object.defineProperty(exports,"multiselect",{enumerable:!0,get:function(){return r.multiselect}}),Object.defineProperty(exports,"now",{enumerable:!0,get:function(){return r.now}}),Object.defineProperty(exports,"number",{enumerable:!0,get:function(){return r.number}}),Object.defineProperty(exports,"object",{enumerable:!0,get:function(){return r.object}}),Object.defineProperty(exports,"phone",{enumerable:!0,get:function(){return r.phone}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return r.query}}),exports.recordsPath=t.a,Object.defineProperty(exports,"relation",{enumerable:!0,get:function(){return r.relation}}),exports.reviveRecord=e.o,Object.defineProperty(exports,"richtext",{enumerable:!0,get:function(){return r.richtext}}),Object.defineProperty(exports,"rollup",{enumerable:!0,get:function(){return r.rollup}}),Object.defineProperty(exports,"select",{enumerable:!0,get:function(){return r.select}}),Object.defineProperty(exports,"status",{enumerable:!0,get:function(){return r.status}}),exports.syncBundle=e.u,Object.defineProperty(exports,"text",{enumerable:!0,get:function(){return r.text}}),Object.defineProperty(exports,"today",{enumerable:!0,get:function(){return r.today}}),Object.defineProperty(exports,"user",{enumerable:!0,get:function(){return r.user}});
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{_ as e,a as t,g as n,h as r,m as i,n as a,p as o}from"./http-transport-BxgXm4Oi.mjs";import{c as s,i as c,l,n as u,o as d,r as f,u as p}from"./create-standards-CEL4N0C_.mjs";import{BUNDLE_NAME_PATTERN as m,DuplicateError as h,ForbiddenError as g,NotFoundError as _,SchemaError as v,SchemaErrorCode as y,ValidationError as b,assertBundleName as x,bundle as S,canonicalStringify as C,checkbox as w,content as T,currency as E,currentActor as D,date as O,detailView as k,document as A,formula as j,group as M,listView as N,location as P,multiselect as F,now as I,number as L,object as R,phone as z,query as B,relation as V,richtext as H,rollup as U,select as W,status as G,text as K,today as q,user as J}from"@standards/schema";import{encodePathSegment as Y}from"@standards/schema/api";export{m as BUNDLE_NAME_PATTERN,o as BundleConflictError,i as BundleValidationError,h as DuplicateError,g as ForbiddenError,_ as NotFoundError,v as SchemaError,y as SchemaErrorCode,r as StandardsAuthError,n as StandardsConfigurationError,e as StandardsRequestError,b as ValidationError,x as assertBundleName,S as bundle,C as canonicalStringify,w as checkbox,T as content,l as createDocumentsApi,s as createFilesApi,c as createRecordsQuery,u as createStandards,a as createTransport,f as createUsageApi,E as currency,D as currentActor,O as date,k as detailView,A as document,Y as encodePathSegment,j as formula,M as group,N as listView,P as location,F as multiselect,I as now,L as number,R as object,z as phone,B as query,t as recordsPath,V as relation,d as reviveRecord,H as richtext,U as rollup,W as select,G as status,p as syncBundle,K as text,q as today,J as user};
2
+ import{c as e,i as t,l as n,n as r,o as i,r as a,u as o}from"./create-standards-B63SENMD.mjs";import{_ as s,a as c,g as l,h as u,m as d,n as f,p}from"./http-transport-DHYafmv-.mjs";import{BUNDLE_NAME_PATTERN as m,DuplicateError as h,ForbiddenError as g,NotFoundError as _,SchemaError as v,SchemaErrorCode as y,ValidationError as b,assertBundleName as x,bundle as S,canonicalStringify as C,checkbox as w,content as T,currency as E,currentActor as D,date as O,detailView as k,document as A,formula as j,group as M,listView as N,location as P,multiselect as F,now as I,number as L,object as R,phone as z,query as B,relation as V,richtext as H,rollup as U,select as W,status as G,text as K,today as q,user as J}from"@standards/schema";import{encodePathSegment as Y}from"@standards/schema/api";export{m as BUNDLE_NAME_PATTERN,p as BundleConflictError,d as BundleValidationError,h as DuplicateError,g as ForbiddenError,_ as NotFoundError,v as SchemaError,y as SchemaErrorCode,u as StandardsAuthError,l as StandardsConfigurationError,s as StandardsRequestError,b as ValidationError,x as assertBundleName,S as bundle,C as canonicalStringify,w as checkbox,T as content,n as createDocumentsApi,e as createFilesApi,t as createRecordsQuery,r as createStandards,f as createTransport,a as createUsageApi,E as currency,D as currentActor,O as date,k as detailView,A as document,Y as encodePathSegment,j as formula,M as group,N as listView,P as location,F as multiselect,I as now,L as number,R as object,z as phone,B as query,c as recordsPath,V as relation,i as reviveRecord,H as richtext,U as rollup,W as select,G as status,o as syncBundle,K as text,q as today,J as user};
@@ -1,8 +1,7 @@
1
1
 
2
- import "./http-transport-C1u5UGkC.mjs";
3
- import { i as Standards, n as ObjectsOf, r as ObjectsOfBundles, t as AnyBundle } from "./create-standards-ClcULv5H.mjs";
4
- import { ExtractRecord, ExtractRecordInputStrict, FilterRule, ObjectBuilderLike, ObjectDefinition } from "@standards/schema";
5
- //#region src/testing/record-filters.d.ts
2
+ import { i as Standards, n as ObjectsOf, r as ObjectsOfBundles, t as AnyBundle } from "./create-standards-HiWpTAlP.mjs";
3
+ import "./http-transport-BxJhcXjy.mjs";
4
+ import { ExtractRecord, ExtractRecordInputStrict, ObjectBuilderLike } from "@standards/schema";
6
5
  /**
7
6
  * A filter rule the in-memory workspace does not serve. The server answers
8
7
  * every operator it knows; a test double that matched an unknown one as
@@ -12,15 +11,11 @@ export declare class UnsupportedFilterOperatorError extends Error {
12
11
  readonly operator: string;
13
12
  constructor(operator: string, attribute: string);
14
13
  }
15
- //#endregion
16
- //#region src/testing/in-memory-api.d.ts
17
14
  /** What the next request fails with (`failNextRequestWith`). */
18
15
  interface InjectedFailure {
19
16
  message?: string;
20
17
  code?: string;
21
18
  }
22
- //#endregion
23
- //#region src/testing/index.d.ts
24
19
  type NameOf<B> = B extends {
25
20
  _types: {
26
21
  name: infer N extends string;
@@ -75,5 +70,4 @@ export interface TestStandards<TObjects extends readonly ObjectBuilderLike[]> {
75
70
  export declare function createTestStandards<const TBundles extends readonly AnyBundle[]>(config: {
76
71
  bundles: TBundles;
77
72
  }): TestStandards<ObjectsOfBundles<TBundles>>;
78
- //#endregion
79
73
  export type { InjectedFailure };
package/dist/testing.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
 
2
- import "./http-transport-C1u5UGkC.js";
3
- import { i as Standards, n as ObjectsOf, r as ObjectsOfBundles, t as AnyBundle } from "./create-standards-DN982-FF.js";
4
- import { ExtractRecord, ExtractRecordInputStrict, FilterRule, ObjectBuilderLike, ObjectDefinition } from "@standards/schema";
5
- //#region src/testing/record-filters.d.ts
2
+ import { i as Standards, n as ObjectsOf, r as ObjectsOfBundles, t as AnyBundle } from "./create-standards-BWOo2EZw.js";
3
+ import "./http-transport-BxJhcXjy.js";
4
+ import { ExtractRecord, ExtractRecordInputStrict, ObjectBuilderLike } from "@standards/schema";
6
5
  /**
7
6
  * A filter rule the in-memory workspace does not serve. The server answers
8
7
  * every operator it knows; a test double that matched an unknown one as
@@ -12,15 +11,11 @@ export declare class UnsupportedFilterOperatorError extends Error {
12
11
  readonly operator: string;
13
12
  constructor(operator: string, attribute: string);
14
13
  }
15
- //#endregion
16
- //#region src/testing/in-memory-api.d.ts
17
14
  /** What the next request fails with (`failNextRequestWith`). */
18
15
  interface InjectedFailure {
19
16
  message?: string;
20
17
  code?: string;
21
18
  }
22
- //#endregion
23
- //#region src/testing/index.d.ts
24
19
  type NameOf<B> = B extends {
25
20
  _types: {
26
21
  name: infer N extends string;
@@ -75,5 +70,4 @@ export interface TestStandards<TObjects extends readonly ObjectBuilderLike[]> {
75
70
  export declare function createTestStandards<const TBundles extends readonly AnyBundle[]>(config: {
76
71
  bundles: TBundles;
77
72
  }): TestStandards<ObjectsOfBundles<TBundles>>;
78
- //#endregion
79
73
  export type { InjectedFailure };
package/dist/testing.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./http-transport-CAPVZuiv.js"),t=require("./create-standards-CjO1pFmM.js");let n=require("@standards/schema"),r=require("@standards/schema/api");var UnsupportedFilterOperatorError=class extends Error{constructor(e,t){super(`The in-memory test workspace does not serve the "${e}" operator (on "${t}"). Test it against a real workspace.`),this.name=`UnsupportedFilterOperatorError`,this.operator=e}};const i=new Set([`id`,`createdAt`,`updatedAt`]),a=new Set([`createdAt`,`updatedAt`]),o=new Set([`number`,`currency`]),s=new Set([`select`,`status`]),c=/^\d{4}-\d{2}-\d{2}/;function attributeValue(e,t){if(i.has(t))return e[t];let n=e.values[t];return typeof n==`object`&&n&&`value`in n&&!Array.isArray(n)?n.value:n}function isEmptyValue(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function textOf(e){return e==null?null:e instanceof Date?e.toISOString():typeof e==`string`?e:JSON.stringify(e)}function members(e){return Array.isArray(e)?e.map(String):null}function dayOf(e){let t=textOf(e);if(t===null||!c.test(t))return null;let n=t.slice(0,10);return Number.isNaN(Date.parse(`${n}T00:00:00.000Z`))?null:n}function nextDay(e){let t=new Date(`${e}T00:00:00.000Z`);return t.setUTCDate(t.getUTCDate()+1),t.toISOString().slice(0,10)}function isUnmodelledDate(e){if(e?.type!==`date`)return!1;let t=e;return t.endDate===!0||t.includeTime===!0}function matchesDay(e,t,n,r){let i=dayOf(n);if(i===null)return!1;let a=textOf(t),o=nextDay(i),s=r?textOf(n)??i:i;switch(e){case`is`:return a!==null&&a>=s&&a<o;case`is_not`:return a===null||a<s||a>=o;case`greater_than`:return a!==null&&a>=o;case`greater_or_equal`:return a!==null&&a>=s;case`less_than`:return a!==null&&a<s;default:return a!==null&&a<o}}function compare(e,t,n){let r=textOf(e),i=textOf(t);if(r===null||i===null)return null;if(n){let e=Number(r),t=Number(i);return r===``||Number.isNaN(e)||Number.isNaN(t)?null:e-t}return r<i?-1:+(r>i)}function matchesRule(e,t,r){let i=r.attributes.find(e=>e.name===t.attribute)?.type,s=attributeValue(e,t.attribute),c=i!==void 0&&o.has(i),l=textOf(t.value),u=l===null?void 0:(0,n.foldText)(l),d=textOf(s),f=d===null?null:(0,n.foldText)(d);if((i===`date`||a.has(t.attribute))&&[`is`,`is_not`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`].includes(t.operator))return matchesDay(t.operator,s,t.value,a.has(t.attribute));switch(t.operator){case`is`:return i===`checkbox`||i===void 0&&typeof t.value==`boolean`?t.value===!0?s===!0:s!==!0:textOf(s)!==null&&textOf(s)===textOf(t.value);case`is_not`:return textOf(s)===null||textOf(s)!==textOf(t.value);case`contains`:return Array.isArray(s)?(Array.isArray(t.value)?t.value.map(String):[String(t.value)]).every(e=>s.map(String).includes(e)):f!==null&&u!==void 0&&f.includes(u);case`not_contains`:return s==null||!matchesRule(e,{...t,operator:`contains`},r);case`starts_with`:return f!==null&&u!==void 0&&f.startsWith(u);case`ends_with`:return f!==null&&u!==void 0&&f.endsWith(u);case`greater_than`:case`greater_or_equal`:case`less_than`:case`less_or_equal`:{let e=compare(s,t.value,c);return e===null?!1:t.operator===`greater_than`?e>0:t.operator===`greater_or_equal`?e>=0:t.operator===`less_than`?e<0:e<=0}case`is_empty`:return isEmptyValue(s);case`is_not_empty`:return!isEmptyValue(s);case`any_of`:{let e=members(t.value);return e===null||e.length===0||s==null?!1:Array.isArray(s)?s.some(t=>e.includes(String(t))):e.includes(textOf(s)??``)}case`none_of`:{let e=members(t.value);return e===null?!1:e.length===0||s==null?!0:Array.isArray(s)?!s.some(t=>e.includes(String(t))):!e.includes(textOf(s)??``)}default:throw new UnsupportedFilterOperatorError(t.operator,t.attribute)}}const l=new Set([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`,`is_empty`,`is_not_empty`,`any_of`,`none_of`]);function assertServedOperators(e,t){for(let n of e?.rules??[])if(!l.has(n.operator)||isUnmodelledDate(t.attributes.find(e=>e.name===n.attribute))&&n.operator!==`is_empty`&&n.operator!==`is_not_empty`)throw new UnsupportedFilterOperatorError(n.operator,n.attribute)}function matchesFilters(e,t,n){let r=t?.rules??[];if(r.length===0)return!0;let i=r.map(t=>matchesRule(e,t,n));return t?.combinator===`or`?i.some(Boolean):i.every(Boolean)}function matchesSearch(e,t){let n=t.trim().toLowerCase();return n===``||Object.values(e.values).some(e=>(Array.isArray(e)?e:[e]).some(e=>typeof e==`string`&&e.toLowerCase().includes(n)))}function sortKey(e,t,n){let r=attributeValue(e,t),i=n.attributes.find(e=>e.name===t);if(i&&s.has(i.type)){let e=(i.options??[]).findIndex(e=>e.value===r);return{position:e===-1?null:e,value:r}}return r}function isOptionKey(e){return typeof e==`object`&&!!e&&`position`in e}function compareOptionKeys(e,t,n){let r=n===`desc`?-1:1;return e.position!==null&&t.position!==null?r*(e.position-t.position):e.position!==null||t.position!==null?e.position===null?1:-1:r*(compare(e.value,t.value,!1)??0)}function compareRecords(e,t){let n=e&&e.length>0?[...e]:[{attribute:`createdAt`,direction:`desc`}];return n.some(e=>e.attribute===`id`)||n.push({attribute:`id`,direction:`asc`}),(e,r)=>{for(let i of n){let n=t.attributes.find(e=>e.name===i.attribute)?.type,a=sortKey(e,i.attribute,t),s=sortKey(r,i.attribute,t),c=isOptionKey(a)?a.value:a,l=isOptionKey(s)?s.value:s,u=textOf(c)===null,d=textOf(l)===null;if(u||d){if(u&&d)continue;return u?1:-1}if(isOptionKey(a)&&isOptionKey(s)){let e=compareOptionKeys(a,s,i.direction);if(e!==0)return e;continue}let f=compare(a,s,n!==void 0&&o.has(n))??0;if(f!==0)return i.direction===`desc`?-f:f}return 0}}const u=`SCHEMA_RECORD_NOT_FOUND`,d=`SCHEMA_VALIDATION_FAILED`,readNotFound=e=>`Record "${e}" not found.`,writeNotFound=e=>`Record with id "${e}" not found`,f=[`id`,`createdAt`,`updatedAt`];function withSystemAttributes(e){return{...e,attributes:[...e.attributes,...(0,n.getObjectSystemAttributes)(e)]}}function withoutSystemKeys(e){let t={...e};for(let e of f)delete t[e];return t}function boundOf(t,n,r){if(t==null)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e._(400,`${n} must be a non-negative integer`);return t}function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function errorFor(t,n,r){return t===401||t===403?new e.h(t,n,r):new e._(t,n,r)}function asTheServerValidates(t){try{t()}catch(t){throw t instanceof n.ValidationError?new e._(400,t.message,t.code):t}}function notServed(t,n){return new e._(501,`The in-memory test workspace does not serve ${t} ${n}: only the records API is in memory.`)}function isoOf(e,t){return e===void 0?t:e instanceof Date?e.toISOString():new Date(e).toISOString()}function wire(e){return JSON.parse(JSON.stringify(e))}function createInMemoryApi(i){let a=new Map;for(let e of i.builders){let n=t.a(e);a.set(n.name,n)}let o=new Map([...a.keys()].map(e=>[e,[]])),s=new Set,c=null,l=0,f=1;function now(){return l=Math.max(Date.now(),l+1),new Date(l).toISOString()}function newId(){let e;do e=`00000000-0000-4000-8000-${(f++).toString(16).padStart(12,`0`)}`;while(s.has(e));return e}function objectOf(t){let n=a.get(t),r=o.get(t);if(!(n&&r))throw new e._(404,`Object "${t}" not found. Make sure the object exists and you have access to it.`);return{definition:n,records:r}}function insert(e,n){let{records:r}=objectOf(e),{id:i,createdAt:a,updatedAt:o,...c}=n,l=now(),u={id:i??newId(),values:wire(t.s(c)),createdAt:isoOf(a,l),updatedAt:isoOf(o,isoOf(a,l)),visibility:`workspace`,ownedBy:null,metadata:{}};return r.push(u),s.add(u.id),u}function find(t,n){let r=objectOf(t).records.find(e=>e.id===n);if(!r)throw new e._(404,readNotFound(n),u);return r}function requireWritable(t,n){if(!objectOf(t).records.some(e=>e.id===n))throw new e._(404,writeNotFound(n),u)}function update(t,n,r){let i=objectOf(t).records.find(e=>e.id===n);if(!i)throw new e._(404,writeNotFound(n),u);return Object.assign(i.values,withoutSystemKeys(r)),i.updatedAt=now(),i}function remove(t,n){let{records:r}=objectOf(t),i=r.findIndex(e=>e.id===n);if(i===-1)throw new e._(404,writeNotFound(n),u);r.splice(i,1)}function list(e,t,r){let{definition:i,records:a}=objectOf(e);for(let e of t.filters?.rules??[])asTheServerValidates(()=>(0,n.validateQualifiedRule)(structuredClone(e),{attributes:i.attributes}));assertServedOperators(t.filters,i);let o=Math.min(boundOf(t.limit,`limit`,20),1e3),s=boundOf(t.offset,`offset`,0);if(o===0)return{data:[],page:{hasMore:!1,total:null,countMode:`none`}};let c=r?t.q:void 0,l=a.filter(e=>matchesFilters(e,t.filters,i)).filter(e=>c===void 0||matchesSearch(e,c)).sort(compareRecords(t.sorts,i)),u=l.slice(s,s+o);return{data:u,page:{hasMore:s+u.length<l.length,total:null,countMode:`none`}}}function bulk(t,r,i){let a=i.records??i.updates??i.ids;if(!Array.isArray(a)||a.length>100)throw new e._(400,`A bulk request carries at most 100 items.`);let o=withSystemAttributes(objectOf(t).definition);if(r===`bulk-create`){let r=[],i=[];for(let[s,c]of a.entries()){if(!isObject(c)){i.push({index:s,error:`Record data must be an object`});continue}try{asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(o,c)),r.push(insert(t,withoutSystemKeys(c)))}catch(t){if(!(t instanceof e._))throw t;i.push({index:s,error:t.message})}}return{created:r,errors:i}}if(r===`bulk-update`){let r=[],i=[];for(let{id:s,data:c}of a)try{if(!isObject(c))throw new e._(400,`Update data must be an object`,d);requireWritable(t,s),asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(o,c)),r.push(update(t,s,c))}catch(t){if(!(t instanceof e._))throw t;i.push({id:s,error:t.message,code:t.code??d})}return{updated:r,errors:i}}let s=[],c=[];for(let e of a)try{remove(t,e),s.push(e)}catch{c.push({id:e,error:writeNotFound(e),code:u})}return{deleted:s,errors:c}}function route(t,r,i){let[a,o,s,...c]=r.replace(/^\/+/,``).split(`/`);if(a!==`records`||o===void 0||c.length>0)throw notServed(t,r);let l=decodeURIComponent(o),u=s===void 0?void 0:decodeURIComponent(s),d=isObject(i)?i:{};if(t===`POST`&&u===void 0){let e=isObject(d.data)?d.data:{};return asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(withSystemAttributes(objectOf(l).definition),e)),insert(l,withoutSystemKeys(e))}if(t===`POST`&&(u===`list`||u===`search`))return list(l,d,u===`search`);if(t===`POST`&&u?.startsWith(`bulk-`))return bulk(l,u,d);if(u===void 0)throw notServed(t,r);if(t===`GET`)return find(l,u);if(t===`PUT`||t===`PATCH`){if(Object.keys(d).length===0)throw new e._(400,`Request body cannot be empty`);return requireWritable(l,u),asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(withSystemAttributes(objectOf(l).definition),d)),update(l,u,d)}if(t===`DELETE`)return remove(l,u),null;throw notServed(t,r)}function request(e,t,n){return Promise.resolve().then(()=>(takeFailure(),wire(route(e,t,n===void 0?void 0:wire(n)))))}function takeFailure(){if(c){let{status:e,failure:t}=c;throw c=null,errorFor(e,t.message??`Request failed with status ${e}`,t.code)}}let p={call:(e,t)=>Promise.resolve().then(()=>{takeFailure();let{path:n}=(0,r.splitOperationInput)(e,t??{});throw notServed(e.method,n)}),get:e=>request(`GET`,e),post:(e,t)=>request(`POST`,e,t),patch:(e,t)=>request(`PATCH`,e,t),put:(e,t)=>request(`PUT`,e,t),delete:e=>request(`DELETE`,e),getText:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`GET`,e)}),postRaw:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)}),postMultipart:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)})};return{transport:p,get:p.get,post:p.post,definitionOf:e=>objectOf(e).definition,seed:(e,t)=>t.map(t=>insert(e,t)),records:e=>objectOf(e).records,failNextRequestWith(e,t={}){c={status:e,failure:t}}}}function createTestStandards(e){let n=e.bundles.flatMap(e=>e.objectBuilders),r=createInMemoryApi({builders:n}),flatten=(e,n)=>t.o(r.definitionOf(e),JSON.parse(JSON.stringify(n)));return{db:t.t(r.transport,n),seed:(e,t)=>r.seed(e,t).map(t=>flatten(e,t)),records:e=>r.records(e).map(t=>flatten(e,t)),failNextRequestWith:(e,t)=>r.failNextRequestWith(e,t)}}exports.UnsupportedFilterOperatorError=UnsupportedFilterOperatorError,exports.createTestStandards=createTestStandards;
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./create-standards-DH5Om9n4.js"),t=require("./http-transport-CfM3m5S2.js");let n=require("@standards/schema"),r=require("@standards/schema/api");var UnsupportedFilterOperatorError=class extends Error{constructor(e,t){super(`The in-memory test workspace does not serve the "${e}" operator (on "${t}"). Test it against a real workspace.`),this.name=`UnsupportedFilterOperatorError`,this.operator=e}};const i=/* @__PURE__ */ new Set([`id`,`createdAt`,`updatedAt`]),a=/* @__PURE__ */ new Set([`createdAt`,`updatedAt`]),o=/* @__PURE__ */ new Set([`number`,`currency`]),s=/* @__PURE__ */ new Set([`select`,`status`]),c=/^\d{4}-\d{2}-\d{2}/;function attributeValue(e,t){if(i.has(t))return e[t];let n=e.values[t];return typeof n==`object`&&n&&`value`in n&&!Array.isArray(n)?n.value:n}function isEmptyValue(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function textOf(e){return e==null?null:e instanceof Date?e.toISOString():typeof e==`string`?e:JSON.stringify(e)}function members(e){return Array.isArray(e)?e.map(String):null}function dayOf(e){let t=textOf(e);if(t===null||!c.test(t))return null;let n=t.slice(0,10);return Number.isNaN(Date.parse(`${n}T00:00:00.000Z`))?null:n}function nextDay(e){let t=/* @__PURE__ */ new Date(`${e}T00:00:00.000Z`);return t.setUTCDate(t.getUTCDate()+1),t.toISOString().slice(0,10)}function isUnmodelledDate(e){if(e?.type!==`date`)return!1;let t=e;return t.endDate===!0||t.includeTime===!0}function matchesDay(e,t,n,r){let i=dayOf(n);if(i===null)return!1;let a=textOf(t),o=nextDay(i),s=r?textOf(n)??i:i;switch(e){case`is`:return a!==null&&a>=s&&a<o;case`is_not`:return a===null||a<s||a>=o;case`greater_than`:return a!==null&&a>=o;case`greater_or_equal`:return a!==null&&a>=s;case`less_than`:return a!==null&&a<s;default:return a!==null&&a<o}}function compare(e,t,n){let r=textOf(e),i=textOf(t);if(r===null||i===null)return null;if(n){let e=Number(r),t=Number(i);return r===``||Number.isNaN(e)||Number.isNaN(t)?null:e-t}return r<i?-1:+(r>i)}function matchesRule(e,t,r){let i=r.attributes.find(e=>e.name===t.attribute)?.type,s=attributeValue(e,t.attribute),c=i!==void 0&&o.has(i),l=textOf(t.value),u=l===null?void 0:(0,n.foldText)(l),d=textOf(s),f=d===null?null:(0,n.foldText)(d);if((i===`date`||a.has(t.attribute))&&[`is`,`is_not`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`].includes(t.operator))return matchesDay(t.operator,s,t.value,a.has(t.attribute));switch(t.operator){case`is`:return i===`checkbox`||i===void 0&&typeof t.value==`boolean`?t.value===!0?s===!0:s!==!0:textOf(s)!==null&&textOf(s)===textOf(t.value);case`is_not`:return textOf(s)===null||textOf(s)!==textOf(t.value);case`contains`:return Array.isArray(s)?(Array.isArray(t.value)?t.value.map(String):[String(t.value)]).every(e=>s.map(String).includes(e)):f!==null&&u!==void 0&&f.includes(u);case`not_contains`:return s==null||!matchesRule(e,{...t,operator:`contains`},r);case`starts_with`:return f!==null&&u!==void 0&&f.startsWith(u);case`ends_with`:return f!==null&&u!==void 0&&f.endsWith(u);case`greater_than`:case`greater_or_equal`:case`less_than`:case`less_or_equal`:{let e=compare(s,t.value,c);return e===null?!1:t.operator===`greater_than`?e>0:t.operator===`greater_or_equal`?e>=0:t.operator===`less_than`?e<0:e<=0}case`is_empty`:return isEmptyValue(s);case`is_not_empty`:return!isEmptyValue(s);case`any_of`:{let e=members(t.value);return e===null||e.length===0||s==null?!1:Array.isArray(s)?s.some(t=>e.includes(String(t))):e.includes(textOf(s)??``)}case`none_of`:{let e=members(t.value);return e===null?!1:e.length===0||s==null?!0:Array.isArray(s)?!s.some(t=>e.includes(String(t))):!e.includes(textOf(s)??``)}default:throw new UnsupportedFilterOperatorError(t.operator,t.attribute)}}const l=/* @__PURE__ */ new Set([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`,`is_empty`,`is_not_empty`,`any_of`,`none_of`]);function assertServedOperators(e,t){for(let n of e?.rules??[])if(!l.has(n.operator)||isUnmodelledDate(t.attributes.find(e=>e.name===n.attribute))&&n.operator!==`is_empty`&&n.operator!==`is_not_empty`)throw new UnsupportedFilterOperatorError(n.operator,n.attribute)}function matchesFilters(e,t,n){let r=t?.rules??[];if(r.length===0)return!0;let i=r.map(t=>matchesRule(e,t,n));return t?.combinator===`or`?i.some(Boolean):i.every(Boolean)}function matchesSearch(e,t){let n=t.trim().toLowerCase();return n===``||Object.values(e.values).some(e=>(Array.isArray(e)?e:[e]).some(e=>typeof e==`string`&&e.toLowerCase().includes(n)))}function sortKey(e,t,n){let r=attributeValue(e,t),i=n.attributes.find(e=>e.name===t);if(i&&s.has(i.type)){let e=(i.options??[]).findIndex(e=>e.value===r);return{position:e===-1?null:e,value:r}}return r}function isOptionKey(e){return typeof e==`object`&&!!e&&`position`in e}function compareOptionKeys(e,t,n){let r=n===`desc`?-1:1;return e.position!==null&&t.position!==null?r*(e.position-t.position):e.position!==null||t.position!==null?e.position===null?1:-1:r*(compare(e.value,t.value,!1)??0)}function compareRecords(e,t){let n=e&&e.length>0?[...e]:[{attribute:`createdAt`,direction:`desc`}];return n.some(e=>e.attribute===`id`)||n.push({attribute:`id`,direction:`asc`}),(e,r)=>{for(let i of n){let n=t.attributes.find(e=>e.name===i.attribute)?.type,a=sortKey(e,i.attribute,t),s=sortKey(r,i.attribute,t),c=isOptionKey(a)?a.value:a,l=isOptionKey(s)?s.value:s,u=textOf(c)===null,d=textOf(l)===null;if(u||d){if(u&&d)continue;return u?1:-1}if(isOptionKey(a)&&isOptionKey(s)){let e=compareOptionKeys(a,s,i.direction);if(e!==0)return e;continue}let f=compare(a,s,n!==void 0&&o.has(n))??0;if(f!==0)return i.direction===`desc`?-f:f}return 0}}const u=`SCHEMA_RECORD_NOT_FOUND`,d=`SCHEMA_VALIDATION_FAILED`,readNotFound=e=>`Record "${e}" not found.`,writeNotFound=e=>`Record with id "${e}" not found`,f=[`id`,`createdAt`,`updatedAt`];function withSystemAttributes(e){return{...e,attributes:[...e.attributes,...(0,n.getObjectSystemAttributes)(e)]}}function withoutSystemKeys(e){let t={...e};for(let e of f)delete t[e];return t}function boundOf(e,n,r){if(e==null)return r;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<0)throw new t._(400,`${n} must be a non-negative integer`);return e}function errorFor(e,n,r){return e===401||e===403?new t.h(e,n,r):new t._(e,n,r)}function asTheServerValidates(e){try{e()}catch(e){throw e instanceof n.ValidationError?new t._(400,e.message,e.code):e}}function notServed(e,n){return new t._(501,`The in-memory test workspace does not serve ${e} ${n}: only the records API is in memory.`)}function isoOf(e,t){return e===void 0?t:e instanceof Date?e.toISOString():new Date(e).toISOString()}function wire(e){return JSON.parse(JSON.stringify(e))}function createInMemoryApi(i){let a=/* @__PURE__ */ new Map;for(let t of i.builders){let n=e.a(t);a.set(n.name,n)}let o=new Map([...a.keys()].map(e=>[e,[]])),s=/* @__PURE__ */ new Set,c=null,l=0,f=1;function now(){return l=Math.max(Date.now(),l+1),new Date(l).toISOString()}function newId(){let e;do e=`00000000-0000-4000-8000-${(f++).toString(16).padStart(12,`0`)}`;while(s.has(e));return e}function objectOf(e){let n=a.get(e),r=o.get(e);if(!(n&&r))throw new t._(404,`Object "${e}" not found. Make sure the object exists and you have access to it.`);return{definition:n,records:r}}function insert(t,n){let{records:r}=objectOf(t),{id:i,createdAt:a,updatedAt:o,...c}=n,l=now(),u={id:i??newId(),values:wire(e.s(c)),createdAt:isoOf(a,l),updatedAt:isoOf(o,isoOf(a,l)),visibility:`workspace`,ownedBy:null,metadata:{}};return r.push(u),s.add(u.id),u}function find(e,n){let r=objectOf(e).records.find(e=>e.id===n);if(!r)throw new t._(404,readNotFound(n),u);return r}function requireWritable(e,n){if(!objectOf(e).records.some(e=>e.id===n))throw new t._(404,writeNotFound(n),u)}function update(e,n,r){let i=objectOf(e).records.find(e=>e.id===n);if(!i)throw new t._(404,writeNotFound(n),u);return Object.assign(i.values,withoutSystemKeys(r)),i.updatedAt=now(),i}function remove(e,n){let{records:r}=objectOf(e),i=r.findIndex(e=>e.id===n);if(i===-1)throw new t._(404,writeNotFound(n),u);r.splice(i,1)}function list(e,t,r){let{definition:i,records:a}=objectOf(e);for(let e of t.filters?.rules??[])asTheServerValidates(()=>(0,n.validateQualifiedRule)(structuredClone(e),{attributes:i.attributes}));assertServedOperators(t.filters,i);let o=Math.min(boundOf(t.limit,`limit`,20),1e3),s=boundOf(t.offset,`offset`,0);if(o===0)return{data:[],page:{hasMore:!1,total:null,countMode:`none`}};let c=r?t.q:void 0,l=a.filter(e=>matchesFilters(e,t.filters,i)).filter(e=>c===void 0||matchesSearch(e,c)).sort(compareRecords(t.sorts,i)),u=l.slice(s,s+o);return{data:u,page:{hasMore:s+u.length<l.length,total:null,countMode:`none`}}}function bulk(e,r,i){let a=i.records??i.updates??i.ids;if(!Array.isArray(a)||a.length>100)throw new t._(400,`A bulk request carries at most 100 items.`);let o=withSystemAttributes(objectOf(e).definition);if(r===`bulk-create`){let r=[],i=[];for(let[s,c]of a.entries())if(!(0,n.isPlainRecord)(c))i.push({index:s,error:`Record data must be an object`});else try{asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(o,c)),r.push(insert(e,withoutSystemKeys(c)))}catch(e){if(!(e instanceof t._))throw e;i.push({index:s,error:e.message})}return{created:r,errors:i}}if(r===`bulk-update`){let r=[],i=[];for(let{id:s,data:c}of a)try{if(!(0,n.isPlainRecord)(c))throw new t._(400,`Update data must be an object`,d);requireWritable(e,s),asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(o,c)),r.push(update(e,s,c))}catch(e){if(!(e instanceof t._))throw e;i.push({id:s,error:e.message,code:e.code??d})}return{updated:r,errors:i}}let s=[],c=[];for(let t of a)try{remove(e,t),s.push(t)}catch{c.push({id:t,error:writeNotFound(t),code:u})}return{deleted:s,errors:c}}function route(e,r,i){let[a,o,s,...c]=r.replace(/^\/+/,``).split(`/`);if(a!==`records`||o===void 0||c.length>0)throw notServed(e,r);let l=decodeURIComponent(o),u=s===void 0?void 0:decodeURIComponent(s),d=(0,n.isPlainRecord)(i)?i:{};if(e===`POST`&&u===void 0){let e=(0,n.isPlainRecord)(d.data)?d.data:{};return asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(withSystemAttributes(objectOf(l).definition),e)),insert(l,withoutSystemKeys(e))}if(e===`POST`&&(u===`list`||u===`search`))return list(l,d,u===`search`);if(e===`POST`&&u?.startsWith(`bulk-`))return bulk(l,u,d);if(u===void 0)throw notServed(e,r);if(e===`GET`)return find(l,u);if(e===`PUT`||e===`PATCH`){if(Object.keys(d).length===0)throw new t._(400,`Request body cannot be empty`);return requireWritable(l,u),asTheServerValidates(()=>(0,n.rejectUnknownAttributesOrThrow)(withSystemAttributes(objectOf(l).definition),d)),update(l,u,d)}if(e===`DELETE`)return remove(l,u),null;throw notServed(e,r)}function request(e,t,n){return Promise.resolve().then(()=>(takeFailure(),wire(route(e,t,n===void 0?void 0:wire(n)))))}function takeFailure(){if(c){let{status:e,failure:t}=c;throw c=null,errorFor(e,t.message??`Request failed with status ${e}`,t.code)}}let p={call:(e,t)=>Promise.resolve().then(()=>{takeFailure();let{path:n}=(0,r.splitOperationInput)(e,t??{});throw notServed(e.method,n)}),get:e=>request(`GET`,e),post:(e,t)=>request(`POST`,e,t),patch:(e,t)=>request(`PATCH`,e,t),put:(e,t)=>request(`PUT`,e,t),delete:e=>request(`DELETE`,e),getText:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`GET`,e)}),postRaw:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)}),postMultipart:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)})};return{transport:p,get:p.get,post:p.post,definitionOf:e=>objectOf(e).definition,seed:(e,t)=>t.map(t=>insert(e,t)),records:e=>objectOf(e).records,failNextRequestWith(e,t={}){c={status:e,failure:t}}}}function createTestStandards(t){let n=t.bundles.flatMap(e=>e.objectBuilders),r=createInMemoryApi({builders:n}),flatten=(t,n)=>e.o(r.definitionOf(t),JSON.parse(JSON.stringify(n)));return{db:e.t(r.transport,n),seed:(e,t)=>r.seed(e,t).map(t=>flatten(e,t)),records:e=>r.records(e).map(t=>flatten(e,t)),failNextRequestWith:(e,t)=>r.failNextRequestWith(e,t)}}exports.UnsupportedFilterOperatorError=UnsupportedFilterOperatorError,exports.createTestStandards=createTestStandards;
package/dist/testing.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{_ as e,h as t}from"./http-transport-BxgXm4Oi.mjs";import{a as n,o as r,s as i,t as a}from"./create-standards-CEL4N0C_.mjs";import{ValidationError as o,foldText as s,getObjectSystemAttributes as c,rejectUnknownAttributesOrThrow as l,validateQualifiedRule as u}from"@standards/schema";import{splitOperationInput as d}from"@standards/schema/api";var UnsupportedFilterOperatorError=class extends Error{constructor(e,t){super(`The in-memory test workspace does not serve the "${e}" operator (on "${t}"). Test it against a real workspace.`),this.name=`UnsupportedFilterOperatorError`,this.operator=e}};const f=new Set([`id`,`createdAt`,`updatedAt`]),p=new Set([`createdAt`,`updatedAt`]),m=new Set([`number`,`currency`]),h=new Set([`select`,`status`]),g=/^\d{4}-\d{2}-\d{2}/;function attributeValue(e,t){if(f.has(t))return e[t];let n=e.values[t];return typeof n==`object`&&n&&`value`in n&&!Array.isArray(n)?n.value:n}function isEmptyValue(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function textOf(e){return e==null?null:e instanceof Date?e.toISOString():typeof e==`string`?e:JSON.stringify(e)}function members(e){return Array.isArray(e)?e.map(String):null}function dayOf(e){let t=textOf(e);if(t===null||!g.test(t))return null;let n=t.slice(0,10);return Number.isNaN(Date.parse(`${n}T00:00:00.000Z`))?null:n}function nextDay(e){let t=new Date(`${e}T00:00:00.000Z`);return t.setUTCDate(t.getUTCDate()+1),t.toISOString().slice(0,10)}function isUnmodelledDate(e){if(e?.type!==`date`)return!1;let t=e;return t.endDate===!0||t.includeTime===!0}function matchesDay(e,t,n,r){let i=dayOf(n);if(i===null)return!1;let a=textOf(t),o=nextDay(i),s=r?textOf(n)??i:i;switch(e){case`is`:return a!==null&&a>=s&&a<o;case`is_not`:return a===null||a<s||a>=o;case`greater_than`:return a!==null&&a>=o;case`greater_or_equal`:return a!==null&&a>=s;case`less_than`:return a!==null&&a<s;default:return a!==null&&a<o}}function compare(e,t,n){let r=textOf(e),i=textOf(t);if(r===null||i===null)return null;if(n){let e=Number(r),t=Number(i);return r===``||Number.isNaN(e)||Number.isNaN(t)?null:e-t}return r<i?-1:+(r>i)}function matchesRule(e,t,n){let r=n.attributes.find(e=>e.name===t.attribute)?.type,i=attributeValue(e,t.attribute),a=r!==void 0&&m.has(r),o=textOf(t.value),c=o===null?void 0:s(o),l=textOf(i),u=l===null?null:s(l);if((r===`date`||p.has(t.attribute))&&[`is`,`is_not`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`].includes(t.operator))return matchesDay(t.operator,i,t.value,p.has(t.attribute));switch(t.operator){case`is`:return r===`checkbox`||r===void 0&&typeof t.value==`boolean`?t.value===!0?i===!0:i!==!0:textOf(i)!==null&&textOf(i)===textOf(t.value);case`is_not`:return textOf(i)===null||textOf(i)!==textOf(t.value);case`contains`:return Array.isArray(i)?(Array.isArray(t.value)?t.value.map(String):[String(t.value)]).every(e=>i.map(String).includes(e)):u!==null&&c!==void 0&&u.includes(c);case`not_contains`:return i==null||!matchesRule(e,{...t,operator:`contains`},n);case`starts_with`:return u!==null&&c!==void 0&&u.startsWith(c);case`ends_with`:return u!==null&&c!==void 0&&u.endsWith(c);case`greater_than`:case`greater_or_equal`:case`less_than`:case`less_or_equal`:{let e=compare(i,t.value,a);return e===null?!1:t.operator===`greater_than`?e>0:t.operator===`greater_or_equal`?e>=0:t.operator===`less_than`?e<0:e<=0}case`is_empty`:return isEmptyValue(i);case`is_not_empty`:return!isEmptyValue(i);case`any_of`:{let e=members(t.value);return e===null||e.length===0||i==null?!1:Array.isArray(i)?i.some(t=>e.includes(String(t))):e.includes(textOf(i)??``)}case`none_of`:{let e=members(t.value);return e===null?!1:e.length===0||i==null?!0:Array.isArray(i)?!i.some(t=>e.includes(String(t))):!e.includes(textOf(i)??``)}default:throw new UnsupportedFilterOperatorError(t.operator,t.attribute)}}const _=new Set([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`,`is_empty`,`is_not_empty`,`any_of`,`none_of`]);function assertServedOperators(e,t){for(let n of e?.rules??[])if(!_.has(n.operator)||isUnmodelledDate(t.attributes.find(e=>e.name===n.attribute))&&n.operator!==`is_empty`&&n.operator!==`is_not_empty`)throw new UnsupportedFilterOperatorError(n.operator,n.attribute)}function matchesFilters(e,t,n){let r=t?.rules??[];if(r.length===0)return!0;let i=r.map(t=>matchesRule(e,t,n));return t?.combinator===`or`?i.some(Boolean):i.every(Boolean)}function matchesSearch(e,t){let n=t.trim().toLowerCase();return n===``||Object.values(e.values).some(e=>(Array.isArray(e)?e:[e]).some(e=>typeof e==`string`&&e.toLowerCase().includes(n)))}function sortKey(e,t,n){let r=attributeValue(e,t),i=n.attributes.find(e=>e.name===t);if(i&&h.has(i.type)){let e=(i.options??[]).findIndex(e=>e.value===r);return{position:e===-1?null:e,value:r}}return r}function isOptionKey(e){return typeof e==`object`&&!!e&&`position`in e}function compareOptionKeys(e,t,n){let r=n===`desc`?-1:1;return e.position!==null&&t.position!==null?r*(e.position-t.position):e.position!==null||t.position!==null?e.position===null?1:-1:r*(compare(e.value,t.value,!1)??0)}function compareRecords(e,t){let n=e&&e.length>0?[...e]:[{attribute:`createdAt`,direction:`desc`}];return n.some(e=>e.attribute===`id`)||n.push({attribute:`id`,direction:`asc`}),(e,r)=>{for(let i of n){let n=t.attributes.find(e=>e.name===i.attribute)?.type,a=sortKey(e,i.attribute,t),o=sortKey(r,i.attribute,t),s=isOptionKey(a)?a.value:a,c=isOptionKey(o)?o.value:o,l=textOf(s)===null,u=textOf(c)===null;if(l||u){if(l&&u)continue;return l?1:-1}if(isOptionKey(a)&&isOptionKey(o)){let e=compareOptionKeys(a,o,i.direction);if(e!==0)return e;continue}let d=compare(a,o,n!==void 0&&m.has(n))??0;if(d!==0)return i.direction===`desc`?-d:d}return 0}}const v=`SCHEMA_RECORD_NOT_FOUND`,y=`SCHEMA_VALIDATION_FAILED`,readNotFound=e=>`Record "${e}" not found.`,writeNotFound=e=>`Record with id "${e}" not found`,b=[`id`,`createdAt`,`updatedAt`];function withSystemAttributes(e){return{...e,attributes:[...e.attributes,...c(e)]}}function withoutSystemKeys(e){let t={...e};for(let e of b)delete t[e];return t}function boundOf(t,n,r){if(t==null)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(400,`${n} must be a non-negative integer`);return t}function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function errorFor(n,r,i){return n===401||n===403?new t(n,r,i):new e(n,r,i)}function asTheServerValidates(t){try{t()}catch(t){throw t instanceof o?new e(400,t.message,t.code):t}}function notServed(t,n){return new e(501,`The in-memory test workspace does not serve ${t} ${n}: only the records API is in memory.`)}function isoOf(e,t){return e===void 0?t:e instanceof Date?e.toISOString():new Date(e).toISOString()}function wire(e){return JSON.parse(JSON.stringify(e))}function createInMemoryApi(t){let r=new Map;for(let e of t.builders){let t=n(e);r.set(t.name,t)}let a=new Map([...r.keys()].map(e=>[e,[]])),o=new Set,s=null,c=0,f=1;function now(){return c=Math.max(Date.now(),c+1),new Date(c).toISOString()}function newId(){let e;do e=`00000000-0000-4000-8000-${(f++).toString(16).padStart(12,`0`)}`;while(o.has(e));return e}function objectOf(t){let n=r.get(t),i=a.get(t);if(!(n&&i))throw new e(404,`Object "${t}" not found. Make sure the object exists and you have access to it.`);return{definition:n,records:i}}function insert(e,t){let{records:n}=objectOf(e),{id:r,createdAt:a,updatedAt:s,...c}=t,l=now(),u={id:r??newId(),values:wire(i(c)),createdAt:isoOf(a,l),updatedAt:isoOf(s,isoOf(a,l)),visibility:`workspace`,ownedBy:null,metadata:{}};return n.push(u),o.add(u.id),u}function find(t,n){let r=objectOf(t).records.find(e=>e.id===n);if(!r)throw new e(404,readNotFound(n),v);return r}function requireWritable(t,n){if(!objectOf(t).records.some(e=>e.id===n))throw new e(404,writeNotFound(n),v)}function update(t,n,r){let i=objectOf(t).records.find(e=>e.id===n);if(!i)throw new e(404,writeNotFound(n),v);return Object.assign(i.values,withoutSystemKeys(r)),i.updatedAt=now(),i}function remove(t,n){let{records:r}=objectOf(t),i=r.findIndex(e=>e.id===n);if(i===-1)throw new e(404,writeNotFound(n),v);r.splice(i,1)}function list(e,t,n){let{definition:r,records:i}=objectOf(e);for(let e of t.filters?.rules??[])asTheServerValidates(()=>u(structuredClone(e),{attributes:r.attributes}));assertServedOperators(t.filters,r);let a=Math.min(boundOf(t.limit,`limit`,20),1e3),o=boundOf(t.offset,`offset`,0);if(a===0)return{data:[],page:{hasMore:!1,total:null,countMode:`none`}};let s=n?t.q:void 0,c=i.filter(e=>matchesFilters(e,t.filters,r)).filter(e=>s===void 0||matchesSearch(e,s)).sort(compareRecords(t.sorts,r)),l=c.slice(o,o+a);return{data:l,page:{hasMore:o+l.length<c.length,total:null,countMode:`none`}}}function bulk(t,n,r){let i=r.records??r.updates??r.ids;if(!Array.isArray(i)||i.length>100)throw new e(400,`A bulk request carries at most 100 items.`);let a=withSystemAttributes(objectOf(t).definition);if(n===`bulk-create`){let n=[],r=[];for(let[o,s]of i.entries()){if(!isObject(s)){r.push({index:o,error:`Record data must be an object`});continue}try{asTheServerValidates(()=>l(a,s)),n.push(insert(t,withoutSystemKeys(s)))}catch(t){if(!(t instanceof e))throw t;r.push({index:o,error:t.message})}}return{created:n,errors:r}}if(n===`bulk-update`){let n=[],r=[];for(let{id:o,data:s}of i)try{if(!isObject(s))throw new e(400,`Update data must be an object`,y);requireWritable(t,o),asTheServerValidates(()=>l(a,s)),n.push(update(t,o,s))}catch(t){if(!(t instanceof e))throw t;r.push({id:o,error:t.message,code:t.code??y})}return{updated:n,errors:r}}let o=[],s=[];for(let e of i)try{remove(t,e),o.push(e)}catch{s.push({id:e,error:writeNotFound(e),code:v})}return{deleted:o,errors:s}}function route(t,n,r){let[i,a,o,...s]=n.replace(/^\/+/,``).split(`/`);if(i!==`records`||a===void 0||s.length>0)throw notServed(t,n);let c=decodeURIComponent(a),u=o===void 0?void 0:decodeURIComponent(o),d=isObject(r)?r:{};if(t===`POST`&&u===void 0){let e=isObject(d.data)?d.data:{};return asTheServerValidates(()=>l(withSystemAttributes(objectOf(c).definition),e)),insert(c,withoutSystemKeys(e))}if(t===`POST`&&(u===`list`||u===`search`))return list(c,d,u===`search`);if(t===`POST`&&u?.startsWith(`bulk-`))return bulk(c,u,d);if(u===void 0)throw notServed(t,n);if(t===`GET`)return find(c,u);if(t===`PUT`||t===`PATCH`){if(Object.keys(d).length===0)throw new e(400,`Request body cannot be empty`);return requireWritable(c,u),asTheServerValidates(()=>l(withSystemAttributes(objectOf(c).definition),d)),update(c,u,d)}if(t===`DELETE`)return remove(c,u),null;throw notServed(t,n)}function request(e,t,n){return Promise.resolve().then(()=>(takeFailure(),wire(route(e,t,n===void 0?void 0:wire(n)))))}function takeFailure(){if(s){let{status:e,failure:t}=s;throw s=null,errorFor(e,t.message??`Request failed with status ${e}`,t.code)}}let p={call:(e,t)=>Promise.resolve().then(()=>{takeFailure();let{path:n}=d(e,t??{});throw notServed(e.method,n)}),get:e=>request(`GET`,e),post:(e,t)=>request(`POST`,e,t),patch:(e,t)=>request(`PATCH`,e,t),put:(e,t)=>request(`PUT`,e,t),delete:e=>request(`DELETE`,e),getText:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`GET`,e)}),postRaw:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)}),postMultipart:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)})};return{transport:p,get:p.get,post:p.post,definitionOf:e=>objectOf(e).definition,seed:(e,t)=>t.map(t=>insert(e,t)),records:e=>objectOf(e).records,failNextRequestWith(e,t={}){s={status:e,failure:t}}}}function createTestStandards(e){let t=e.bundles.flatMap(e=>e.objectBuilders),n=createInMemoryApi({builders:t}),flatten=(e,t)=>r(n.definitionOf(e),JSON.parse(JSON.stringify(t)));return{db:a(n.transport,t),seed:(e,t)=>n.seed(e,t).map(t=>flatten(e,t)),records:e=>n.records(e).map(t=>flatten(e,t)),failNextRequestWith:(e,t)=>n.failNextRequestWith(e,t)}}export{UnsupportedFilterOperatorError,createTestStandards};
2
+ import{a as e,o as t,s as n,t as r}from"./create-standards-B63SENMD.mjs";import{_ as i,h as a}from"./http-transport-DHYafmv-.mjs";import{ValidationError as o,foldText as s,getObjectSystemAttributes as c,isPlainRecord as l,rejectUnknownAttributesOrThrow as u,validateQualifiedRule as d}from"@standards/schema";import{splitOperationInput as f}from"@standards/schema/api";var UnsupportedFilterOperatorError=class extends Error{constructor(e,t){super(`The in-memory test workspace does not serve the "${e}" operator (on "${t}"). Test it against a real workspace.`),this.name=`UnsupportedFilterOperatorError`,this.operator=e}};const p=/* @__PURE__ */ new Set([`id`,`createdAt`,`updatedAt`]),m=/* @__PURE__ */ new Set([`createdAt`,`updatedAt`]),h=/* @__PURE__ */ new Set([`number`,`currency`]),g=/* @__PURE__ */ new Set([`select`,`status`]),_=/^\d{4}-\d{2}-\d{2}/;function attributeValue(e,t){if(p.has(t))return e[t];let n=e.values[t];return typeof n==`object`&&n&&`value`in n&&!Array.isArray(n)?n.value:n}function isEmptyValue(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function textOf(e){return e==null?null:e instanceof Date?e.toISOString():typeof e==`string`?e:JSON.stringify(e)}function members(e){return Array.isArray(e)?e.map(String):null}function dayOf(e){let t=textOf(e);if(t===null||!_.test(t))return null;let n=t.slice(0,10);return Number.isNaN(Date.parse(`${n}T00:00:00.000Z`))?null:n}function nextDay(e){let t=/* @__PURE__ */ new Date(`${e}T00:00:00.000Z`);return t.setUTCDate(t.getUTCDate()+1),t.toISOString().slice(0,10)}function isUnmodelledDate(e){if(e?.type!==`date`)return!1;let t=e;return t.endDate===!0||t.includeTime===!0}function matchesDay(e,t,n,r){let i=dayOf(n);if(i===null)return!1;let a=textOf(t),o=nextDay(i),s=r?textOf(n)??i:i;switch(e){case`is`:return a!==null&&a>=s&&a<o;case`is_not`:return a===null||a<s||a>=o;case`greater_than`:return a!==null&&a>=o;case`greater_or_equal`:return a!==null&&a>=s;case`less_than`:return a!==null&&a<s;default:return a!==null&&a<o}}function compare(e,t,n){let r=textOf(e),i=textOf(t);if(r===null||i===null)return null;if(n){let e=Number(r),t=Number(i);return r===``||Number.isNaN(e)||Number.isNaN(t)?null:e-t}return r<i?-1:+(r>i)}function matchesRule(e,t,n){let r=n.attributes.find(e=>e.name===t.attribute)?.type,i=attributeValue(e,t.attribute),a=r!==void 0&&h.has(r),o=textOf(t.value),c=o===null?void 0:s(o),l=textOf(i),u=l===null?null:s(l);if((r===`date`||m.has(t.attribute))&&[`is`,`is_not`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`].includes(t.operator))return matchesDay(t.operator,i,t.value,m.has(t.attribute));switch(t.operator){case`is`:return r===`checkbox`||r===void 0&&typeof t.value==`boolean`?t.value===!0?i===!0:i!==!0:textOf(i)!==null&&textOf(i)===textOf(t.value);case`is_not`:return textOf(i)===null||textOf(i)!==textOf(t.value);case`contains`:return Array.isArray(i)?(Array.isArray(t.value)?t.value.map(String):[String(t.value)]).every(e=>i.map(String).includes(e)):u!==null&&c!==void 0&&u.includes(c);case`not_contains`:return i==null||!matchesRule(e,{...t,operator:`contains`},n);case`starts_with`:return u!==null&&c!==void 0&&u.startsWith(c);case`ends_with`:return u!==null&&c!==void 0&&u.endsWith(c);case`greater_than`:case`greater_or_equal`:case`less_than`:case`less_or_equal`:{let e=compare(i,t.value,a);return e===null?!1:t.operator===`greater_than`?e>0:t.operator===`greater_or_equal`?e>=0:t.operator===`less_than`?e<0:e<=0}case`is_empty`:return isEmptyValue(i);case`is_not_empty`:return!isEmptyValue(i);case`any_of`:{let e=members(t.value);return e===null||e.length===0||i==null?!1:Array.isArray(i)?i.some(t=>e.includes(String(t))):e.includes(textOf(i)??``)}case`none_of`:{let e=members(t.value);return e===null?!1:e.length===0||i==null?!0:Array.isArray(i)?!i.some(t=>e.includes(String(t))):!e.includes(textOf(i)??``)}default:throw new UnsupportedFilterOperatorError(t.operator,t.attribute)}}const v=/* @__PURE__ */ new Set([`is`,`is_not`,`contains`,`not_contains`,`starts_with`,`ends_with`,`greater_than`,`greater_or_equal`,`less_than`,`less_or_equal`,`is_empty`,`is_not_empty`,`any_of`,`none_of`]);function assertServedOperators(e,t){for(let n of e?.rules??[])if(!v.has(n.operator)||isUnmodelledDate(t.attributes.find(e=>e.name===n.attribute))&&n.operator!==`is_empty`&&n.operator!==`is_not_empty`)throw new UnsupportedFilterOperatorError(n.operator,n.attribute)}function matchesFilters(e,t,n){let r=t?.rules??[];if(r.length===0)return!0;let i=r.map(t=>matchesRule(e,t,n));return t?.combinator===`or`?i.some(Boolean):i.every(Boolean)}function matchesSearch(e,t){let n=t.trim().toLowerCase();return n===``||Object.values(e.values).some(e=>(Array.isArray(e)?e:[e]).some(e=>typeof e==`string`&&e.toLowerCase().includes(n)))}function sortKey(e,t,n){let r=attributeValue(e,t),i=n.attributes.find(e=>e.name===t);if(i&&g.has(i.type)){let e=(i.options??[]).findIndex(e=>e.value===r);return{position:e===-1?null:e,value:r}}return r}function isOptionKey(e){return typeof e==`object`&&!!e&&`position`in e}function compareOptionKeys(e,t,n){let r=n===`desc`?-1:1;return e.position!==null&&t.position!==null?r*(e.position-t.position):e.position!==null||t.position!==null?e.position===null?1:-1:r*(compare(e.value,t.value,!1)??0)}function compareRecords(e,t){let n=e&&e.length>0?[...e]:[{attribute:`createdAt`,direction:`desc`}];return n.some(e=>e.attribute===`id`)||n.push({attribute:`id`,direction:`asc`}),(e,r)=>{for(let i of n){let n=t.attributes.find(e=>e.name===i.attribute)?.type,a=sortKey(e,i.attribute,t),o=sortKey(r,i.attribute,t),s=isOptionKey(a)?a.value:a,c=isOptionKey(o)?o.value:o,l=textOf(s)===null,u=textOf(c)===null;if(l||u){if(l&&u)continue;return l?1:-1}if(isOptionKey(a)&&isOptionKey(o)){let e=compareOptionKeys(a,o,i.direction);if(e!==0)return e;continue}let d=compare(a,o,n!==void 0&&h.has(n))??0;if(d!==0)return i.direction===`desc`?-d:d}return 0}}const y=`SCHEMA_RECORD_NOT_FOUND`,b=`SCHEMA_VALIDATION_FAILED`,readNotFound=e=>`Record "${e}" not found.`,writeNotFound=e=>`Record with id "${e}" not found`,x=[`id`,`createdAt`,`updatedAt`];function withSystemAttributes(e){return{...e,attributes:[...e.attributes,...c(e)]}}function withoutSystemKeys(e){let t={...e};for(let e of x)delete t[e];return t}function boundOf(e,t,n){if(e==null)return n;if(typeof e!=`number`||!Number.isSafeInteger(e)||e<0)throw new i(400,`${t} must be a non-negative integer`);return e}function errorFor(e,t,n){return e===401||e===403?new a(e,t,n):new i(e,t,n)}function asTheServerValidates(e){try{e()}catch(e){throw e instanceof o?new i(400,e.message,e.code):e}}function notServed(e,t){return new i(501,`The in-memory test workspace does not serve ${e} ${t}: only the records API is in memory.`)}function isoOf(e,t){return e===void 0?t:e instanceof Date?e.toISOString():new Date(e).toISOString()}function wire(e){return JSON.parse(JSON.stringify(e))}function createInMemoryApi(t){let r=/* @__PURE__ */ new Map;for(let n of t.builders){let t=e(n);r.set(t.name,t)}let a=new Map([...r.keys()].map(e=>[e,[]])),o=/* @__PURE__ */ new Set,s=null,c=0,p=1;function now(){return c=Math.max(Date.now(),c+1),new Date(c).toISOString()}function newId(){let e;do e=`00000000-0000-4000-8000-${(p++).toString(16).padStart(12,`0`)}`;while(o.has(e));return e}function objectOf(e){let t=r.get(e),n=a.get(e);if(!(t&&n))throw new i(404,`Object "${e}" not found. Make sure the object exists and you have access to it.`);return{definition:t,records:n}}function insert(e,t){let{records:r}=objectOf(e),{id:i,createdAt:a,updatedAt:s,...c}=t,l=now(),u={id:i??newId(),values:wire(n(c)),createdAt:isoOf(a,l),updatedAt:isoOf(s,isoOf(a,l)),visibility:`workspace`,ownedBy:null,metadata:{}};return r.push(u),o.add(u.id),u}function find(e,t){let n=objectOf(e).records.find(e=>e.id===t);if(!n)throw new i(404,readNotFound(t),y);return n}function requireWritable(e,t){if(!objectOf(e).records.some(e=>e.id===t))throw new i(404,writeNotFound(t),y)}function update(e,t,n){let r=objectOf(e).records.find(e=>e.id===t);if(!r)throw new i(404,writeNotFound(t),y);return Object.assign(r.values,withoutSystemKeys(n)),r.updatedAt=now(),r}function remove(e,t){let{records:n}=objectOf(e),r=n.findIndex(e=>e.id===t);if(r===-1)throw new i(404,writeNotFound(t),y);n.splice(r,1)}function list(e,t,n){let{definition:r,records:i}=objectOf(e);for(let e of t.filters?.rules??[])asTheServerValidates(()=>d(structuredClone(e),{attributes:r.attributes}));assertServedOperators(t.filters,r);let a=Math.min(boundOf(t.limit,`limit`,20),1e3),o=boundOf(t.offset,`offset`,0);if(a===0)return{data:[],page:{hasMore:!1,total:null,countMode:`none`}};let s=n?t.q:void 0,c=i.filter(e=>matchesFilters(e,t.filters,r)).filter(e=>s===void 0||matchesSearch(e,s)).sort(compareRecords(t.sorts,r)),l=c.slice(o,o+a);return{data:l,page:{hasMore:o+l.length<c.length,total:null,countMode:`none`}}}function bulk(e,t,n){let r=n.records??n.updates??n.ids;if(!Array.isArray(r)||r.length>100)throw new i(400,`A bulk request carries at most 100 items.`);let a=withSystemAttributes(objectOf(e).definition);if(t===`bulk-create`){let t=[],n=[];for(let[o,s]of r.entries())if(!l(s))n.push({index:o,error:`Record data must be an object`});else try{asTheServerValidates(()=>u(a,s)),t.push(insert(e,withoutSystemKeys(s)))}catch(e){if(!(e instanceof i))throw e;n.push({index:o,error:e.message})}return{created:t,errors:n}}if(t===`bulk-update`){let t=[],n=[];for(let{id:o,data:s}of r)try{if(!l(s))throw new i(400,`Update data must be an object`,b);requireWritable(e,o),asTheServerValidates(()=>u(a,s)),t.push(update(e,o,s))}catch(e){if(!(e instanceof i))throw e;n.push({id:o,error:e.message,code:e.code??b})}return{updated:t,errors:n}}let o=[],s=[];for(let t of r)try{remove(e,t),o.push(t)}catch{s.push({id:t,error:writeNotFound(t),code:y})}return{deleted:o,errors:s}}function route(e,t,n){let[r,a,o,...s]=t.replace(/^\/+/,``).split(`/`);if(r!==`records`||a===void 0||s.length>0)throw notServed(e,t);let c=decodeURIComponent(a),d=o===void 0?void 0:decodeURIComponent(o),f=l(n)?n:{};if(e===`POST`&&d===void 0){let e=l(f.data)?f.data:{};return asTheServerValidates(()=>u(withSystemAttributes(objectOf(c).definition),e)),insert(c,withoutSystemKeys(e))}if(e===`POST`&&(d===`list`||d===`search`))return list(c,f,d===`search`);if(e===`POST`&&d?.startsWith(`bulk-`))return bulk(c,d,f);if(d===void 0)throw notServed(e,t);if(e===`GET`)return find(c,d);if(e===`PUT`||e===`PATCH`){if(Object.keys(f).length===0)throw new i(400,`Request body cannot be empty`);return requireWritable(c,d),asTheServerValidates(()=>u(withSystemAttributes(objectOf(c).definition),f)),update(c,d,f)}if(e===`DELETE`)return remove(c,d),null;throw notServed(e,t)}function request(e,t,n){return Promise.resolve().then(()=>(takeFailure(),wire(route(e,t,n===void 0?void 0:wire(n)))))}function takeFailure(){if(s){let{status:e,failure:t}=s;throw s=null,errorFor(e,t.message??`Request failed with status ${e}`,t.code)}}let m={call:(e,t)=>Promise.resolve().then(()=>{takeFailure();let{path:n}=f(e,t??{});throw notServed(e.method,n)}),get:e=>request(`GET`,e),post:(e,t)=>request(`POST`,e,t),patch:(e,t)=>request(`PATCH`,e,t),put:(e,t)=>request(`PUT`,e,t),delete:e=>request(`DELETE`,e),getText:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`GET`,e)}),postRaw:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)}),postMultipart:e=>Promise.resolve().then(()=>{throw takeFailure(),notServed(`POST`,e)})};return{transport:m,get:m.get,post:m.post,definitionOf:e=>objectOf(e).definition,seed:(e,t)=>t.map(t=>insert(e,t)),records:e=>objectOf(e).records,failNextRequestWith(e,t={}){s={status:e,failure:t}}}}function createTestStandards(e){let n=e.bundles.flatMap(e=>e.objectBuilders),i=createInMemoryApi({builders:n}),flatten=(e,n)=>t(i.definitionOf(e),JSON.parse(JSON.stringify(n)));return{db:r(i.transport,n),seed:(e,t)=>i.seed(e,t).map(t=>flatten(e,t)),records:e=>i.records(e).map(t=>flatten(e,t)),failNextRequestWith:(e,t)=>i.failNextRequestWith(e,t)}}export{UnsupportedFilterOperatorError,createTestStandards};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standards/client",
3
- "version": "1.0.0-alpha.416",
3
+ "version": "1.0.0-alpha.418",
4
4
  "description": "Public TypeScript client for Standards: declare schema sources with the fluent builders, sync them to a hosted tenant, and operate typed records over the REST API.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -47,15 +47,15 @@
47
47
  "node": ">=22"
48
48
  },
49
49
  "dependencies": {
50
- "@standards/schema": "1.0.0-alpha.416"
50
+ "@standards/schema": "1.0.0-alpha.418"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^25.6.0",
54
54
  "jsdom": "^25.0.1",
55
- "tsdown": "^0.23.0",
55
+ "tsdown": "^0.23.7",
56
56
  "typescript": "^5.6.3",
57
- "typescript7": "npm:typescript@^7.0.2",
58
- "vitest": "^5.0.5"
57
+ "typescript7": "npm:typescript@7.1.0-beta",
58
+ "vitest": "^5.1.0"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public",
@@ -1,4 +0,0 @@
1
- /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{_ as e,g as t,m as n,n as r,p as i}from"./http-transport-BxgXm4Oi.mjs";import{AggregateValidationError as a,DuplicateError as o,RecordQuery as s,SchemaErrorCode as c,ValidationError as l}from"@standards/schema";import{aiOperations as u,buildOperationPath as d,bundlesOperations as f,documentsOperations as p,filesOperations as m,recordAccessOperations as h,recordsOperations as g}from"@standards/schema/api";async function readInstalled(t,n){try{return await t.get(n)}catch(t){if(t instanceof e&&t.status===404)return null;throw t}}async function syncBundle(t,r,a={}){let o=await r.build(),s=d(f.sync,{name:o.name}),c=await readInstalled(t,s);if(c?.hash===o.hash&&c.label===o.label&&c.description===o.description&&c.uses.join(`
3
- `)===o.uses.join(`
4
- `))return{applied:!1,hash:o.hash};let l=a.resolutions&&a.resolutions.length>0?{...o,resolutions:a.resolutions}:o;try{return await t.put(s,l)}catch(t){throw t instanceof e&&t.status===409?new i(t.status,t.message,t.code):t instanceof e&&t.status===400?new n(t.status,t.message,t.code):t}}function assertTimeout(e){if(e!==void 0&&!(Number.isFinite(e)&&e>0))throw new l(`timeoutMs must be a positive number of milliseconds`,[{path:[`timeoutMs`],message:`Expected a positive, finite number`}])}function assertFileInput(e,t){if(!(e instanceof Blob))throw new l(`${t} must be a Blob or File`,[{path:[t],message:`Expected a Blob or File`}]);let n=e.name;if(typeof n!=`string`||n===``)throw new l(`${t} needs a filename`,[{path:[t,`name`],message:`Expected a non-empty filename`}]);if(e.type===``)throw new l(`${t} "${n}" needs a MIME type`,[{path:[t,`type`],message:`Expected a non-empty MIME type`}])}function reviveDocumentFile(e){return{...e,processedAt:e.processedAt===null?null:new Date(e.processedAt)}}function createDocumentsApi(e){async function attachToRecord(t){let{file:n}=t;assertFileInput(n,`file`),assertTimeout(t.timeoutMs);let r=d(g.attachDocument,{objectName:t.objectName,id:t.recordId}),i=new FormData;i.append(`files`,n,n.name),t.attributeName!==void 0&&i.append(`attributeName`,t.attributeName),t.documentId!==void 0&&i.append(`documentId`,t.documentId),t.title!==void 0&&i.append(`title`,t.title);let a=await e.postMultipart(r,i,{timeoutMs:t.timeoutMs});return{document:{id:a.document.id,title:a.document.title},file:reviveDocumentFile(a.file),action:a.action}}async function listFiles(t){return(await e.get(d(p.files,{id:t}))).map(reviveDocumentFile)}return{attachToRecord,listFiles}}function toUploadedFile(e){let t={id:e.id,name:e.name,mimeType:e.mimeType,size:e.size};return e.isPublic===!0&&typeof e.publicUrl==`string`?{...t,isPublic:!0,publicUrl:e.publicUrl}:{...t,isPublic:!1}}function createFilesApi(e){async function upload(t){assertFileInput(t.file,`file`),assertTimeout(t.timeoutMs);let[n]=await e.call(m.upload,{files:[t.file],public:t.public===!0?`true`:`false`,folderPath:t.folderPath},{timeoutMs:t.timeoutMs});return toUploadedFile(n)}async function getDownloadUrl(t){let{url:n}=await e.call(m.signedUrl,{id:t});return n}return{upload,getDownloadUrl}}function objectKeyOf(e){return e.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}const _=new Set([`from`,`files`,`documents`,`bundles`,`usage`]);function assertObjectKeys(e){let n=new Map;for(let r of e){if(r.includes(`--`)||r.endsWith(`-`))throw new t(`Object "${r}" has a doubled or trailing hyphen, which has no client key. Rename the object.`);let e=objectKeyOf(r);if(_.has(e))throw new t(`Object "${r}" maps to the client key "${e}", which is reserved. Rename the object.`);let i=n.get(e);if(i!==void 0&&i!==r)throw new t(`Objects "${i}" and "${r}" both map to the client key "${e}". Rename one of them.`);n.set(e,r)}}function assertObjectNames(e){let t=new Set;for(let n of e){if(t.has(n))throw new o(`object`,n);t.add(n)}assertObjectKeys(e)}const v=[`createdAt`,`updatedAt`,`deletedAt`];function dateAttributeNames(e){let t=new Set;for(let n of e?.attributes??[])n.type===`date`&&t.add(n.name);return t}function isRange(e){return typeof e==`object`&&!!e&&`start`in e&&`end`in e}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function flattenValues(e){let{values:t,...n}=e;return{...n,...isRecord(t)?t:{}}}function toDate(e){return typeof e==`string`?new Date(e):isRange(e)?{start:toDate(e.start),end:toDate(e.end)}:e}function reviveRecord(e,t){let n=dateAttributeNames(e),r=flattenValues(t);for(let e of v)e in r&&(r[e]=toDate(r[e]));for(let e of n)e in r&&(r[e]=toDate(r[e]));return r}function serializeInput(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof Date?t.toISOString():t]))}var y=class RecordsQueryImpl extends s{constructor(e,t,n,r={object:t,combinator:`and`,rules:[],sorts:[]}){super(r),this.transport=e,this.objectName=t,this.definition=n}with(e){return new RecordsQueryImpl(this.transport,this.objectName,this.definition,{...this.state,...e})}body(){let e={};return this.state.search!==void 0&&(e.q=this.state.search),this.state.rules.length>0&&(e.filters={combinator:this.state.combinator,rules:this.state.rules}),this.state.sorts.length>0&&(e.sorts=this.state.sorts),this.state.limit!==void 0&&(e.limit=this.state.limit),this.state.offset!==void 0&&(e.offset=this.state.offset),e}revive(e){return reviveRecord(this.definition,e)}async export(e,n={}){if(!this.transport.postRaw)throw new t(`export() needs a transport with postRaw(path, body): Promise<Response>`);let{filters:r,sorts:i}=this.body(),{ids:a,locale:o,filename:s}=n;return await this.transport.postRaw(d(g.export,{objectName:this.objectName}),{q:this.state.search??``,...r?{filters:r}:{},...i?{sorts:i}:{},columns:e,...a?{ids:a}:{},...o?{locale:o}:{},timezone:n.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone,...s?{filename:s}:{}})}async aggregate(e){if(this.state.search!==void 0)throw new a(c.AGGREGATE_SEARCH_UNSUPPORTED,`An aggregate cannot be narrowed by a search; use filters instead`);let t={...e,query:this.toDefinition(),timezone:e.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone};return await this.transport.post(d(g.aggregate,{objectName:this.objectName}),t)}async fetchPage(){let e=this.state.search===void 0?`list`:`search`,t=await this.transport.post(d(g[e],{objectName:this.objectName}),this.body());return{records:t.data.map(e=>this.revive(e)),page:t.page}}async fetch(){let{records:e,page:t}=await this.fetchPage();return{records:e,total:t.total}}async all(){if(this.state.limit!==void 0&&this.state.limit<0)return(await this.fetch()).records;let e=this.state.limit??1/0,t=[],n=this.state.offset??0;for(;;){let r=Math.min(1e3,e-t.length);if(r<=0)return t;let{records:i,page:a}=await this.with({limit:r,offset:n}).fetchPage();if(t.push(...i),!a.hasMore)return t;let o=a.nextOffset??n+i.length;if(o<=n)return t;n=o}}async single(){let{records:e}=await this.limit(1).fetch();return e[0]??null}async get(e){let t=await this.transport.get(d(g.get,{objectName:this.objectName,id:e}));return this.revive(t)}async create(e){let t=await this.transport.post(d(g.create,{objectName:this.objectName}),{data:serializeInput(e)});return this.revive(t)}async update(e,t){let n=await this.transport.put(d(g.update,{objectName:this.objectName,id:e}),serializeInput(t));return this.revive(n)}async delete(e){await this.transport.delete(d(g.delete,{objectName:this.objectName,id:e}))}async inChunks(e,t){for(let n=0;n<e.length;n+=100)await t(e.slice(n,n+100),n)}async createMany(e){let t={created:[],errors:[]};return await this.inChunks(e,async(e,n)=>{let r=await this.transport.post(d(g.bulkCreate,{objectName:this.objectName}),{records:e.map(serializeInput)});t.created.push(...r.created.map(e=>this.revive(e))),t.errors.push(...r.errors.map(e=>({...e,index:e.index+n})))}),t}async updateMany(e){let t={updated:[],errors:[]};return await this.inChunks(e,async e=>{let n=await this.transport.post(d(g.bulkUpdate,{objectName:this.objectName}),{updates:e.map(({id:e,data:t})=>({id:e,data:serializeInput(t)}))});t.updated.push(...n.updated.map(e=>this.revive(e))),t.errors.push(...n.errors)}),t}async deleteMany(e){let t={deleted:[],errors:[]};return await this.inChunks(e,async e=>{let n=await this.transport.post(d(g.bulkDelete,{objectName:this.objectName}),{ids:e});t.deleted.push(...n.deleted),t.errors.push(...n.errors)}),t}async listAccess(e){return await this.transport.get(d(h.list,{objectName:this.objectName,recordId:e}))}async grantAccess(e,t,n){return await this.transport.put(d(h.grant,{objectName:this.objectName,recordId:e,actorId:t}),{role:n})}async revokeAccess(e,t){return await this.transport.delete(d(h.revoke,{objectName:this.objectName,recordId:e,actorId:t}))}async clearAccess(e){return await this.transport.delete(d(h.clear,{objectName:this.objectName,recordId:e}))}};const b=new WeakMap;function definitionOf(e){let t=b.get(e);if(t)return t;let n=e.build();return b.set(e,n),n}function createRecordsQuery(e,t){if(typeof t==`string`)return new y(e,t,null);let n=definitionOf(t);return new y(e,n.name,n)}function createUsageApi(e){return{report:({from:t,to:n,scope:r=`me`})=>e.call(u.usage,{from:t,to:n,scope:r})}}function readEnvironment(){return typeof process>`u`||!process.env?{}:{baseUrl:process.env.STANDARDS_API_URL||void 0,apiKey:process.env.STANDARDS_API_KEY||void 0}}function resolveConfig(e){if(globalThis.window!==void 0){if(e.apiKey)throw new t(`createStandards received an apiKey in a browser context. API keys belong to server code only (Route Handlers, Server Components, scripts).`);if(e.baseUrl===void 0)throw new t(`createStandards needs an explicit baseUrl in a browser context: STANDARDS_API_URL and STANDARDS_API_KEY are never read from the environment there.`);return{...e,baseUrl:e.baseUrl,apiKey:``}}let n=readEnvironment(),r=e.baseUrl??n.baseUrl;if(r===void 0)throw new t(`createStandards needs a base URL: pass baseUrl or set the STANDARDS_API_URL environment variable.`);let i=e.apiKey??n.apiKey;if(i===void 0)throw new t(`createStandards needs an API key: pass apiKey or set the STANDARDS_API_KEY environment variable.`);return{...e,baseUrl:r,apiKey:i}}function createStandards(e={}){let{bundles:t=[],...n}=e;return buildStandards(r(resolveConfig(n)),t.flatMap(e=>e.objectBuilders))}function buildStandards(e,t){let n={bundles:{sync:(t,n)=>syncBundle(e,t,n)},from:t=>createRecordsQuery(e,t),files:createFilesApi(e),documents:createDocumentsApi(e),usage:createUsageApi(e)},r=t.map(e=>definitionOf(e).name);return assertObjectNames(r),t.forEach((t,i)=>{n[objectKeyOf(r[i])]=createRecordsQuery(e,t)}),n}export{definitionOf as a,createFilesApi as c,createRecordsQuery as i,createDocumentsApi as l,createStandards as n,reviveRecord as o,createUsageApi as r,serializeInput as s,buildStandards as t,syncBundle as u};
@@ -1,4 +0,0 @@
1
- /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- const e=require("./http-transport-CAPVZuiv.js");let t=require("@standards/schema"),n=require("@standards/schema/api");async function readInstalled(t,n){try{return await t.get(n)}catch(t){if(t instanceof e._&&t.status===404)return null;throw t}}async function syncBundle(t,r,i={}){let a=await r.build(),o=(0,n.buildOperationPath)(n.bundlesOperations.sync,{name:a.name}),s=await readInstalled(t,o);if(s?.hash===a.hash&&s.label===a.label&&s.description===a.description&&s.uses.join(`
3
- `)===a.uses.join(`
4
- `))return{applied:!1,hash:a.hash};let c=i.resolutions&&i.resolutions.length>0?{...a,resolutions:i.resolutions}:a;try{return await t.put(o,c)}catch(t){throw t instanceof e._&&t.status===409?new e.p(t.status,t.message,t.code):t instanceof e._&&t.status===400?new e.m(t.status,t.message,t.code):t}}function assertTimeout(e){if(e!==void 0&&!(Number.isFinite(e)&&e>0))throw new t.ValidationError(`timeoutMs must be a positive number of milliseconds`,[{path:[`timeoutMs`],message:`Expected a positive, finite number`}])}function assertFileInput(e,n){if(!(e instanceof Blob))throw new t.ValidationError(`${n} must be a Blob or File`,[{path:[n],message:`Expected a Blob or File`}]);let r=e.name;if(typeof r!=`string`||r===``)throw new t.ValidationError(`${n} needs a filename`,[{path:[n,`name`],message:`Expected a non-empty filename`}]);if(e.type===``)throw new t.ValidationError(`${n} "${r}" needs a MIME type`,[{path:[n,`type`],message:`Expected a non-empty MIME type`}])}function reviveDocumentFile(e){return{...e,processedAt:e.processedAt===null?null:new Date(e.processedAt)}}function createDocumentsApi(e){async function attachToRecord(t){let{file:r}=t;assertFileInput(r,`file`),assertTimeout(t.timeoutMs);let i=(0,n.buildOperationPath)(n.recordsOperations.attachDocument,{objectName:t.objectName,id:t.recordId}),a=new FormData;a.append(`files`,r,r.name),t.attributeName!==void 0&&a.append(`attributeName`,t.attributeName),t.documentId!==void 0&&a.append(`documentId`,t.documentId),t.title!==void 0&&a.append(`title`,t.title);let o=await e.postMultipart(i,a,{timeoutMs:t.timeoutMs});return{document:{id:o.document.id,title:o.document.title},file:reviveDocumentFile(o.file),action:o.action}}async function listFiles(t){return(await e.get((0,n.buildOperationPath)(n.documentsOperations.files,{id:t}))).map(reviveDocumentFile)}return{attachToRecord,listFiles}}function toUploadedFile(e){let t={id:e.id,name:e.name,mimeType:e.mimeType,size:e.size};return e.isPublic===!0&&typeof e.publicUrl==`string`?{...t,isPublic:!0,publicUrl:e.publicUrl}:{...t,isPublic:!1}}function createFilesApi(e){async function upload(t){assertFileInput(t.file,`file`),assertTimeout(t.timeoutMs);let[r]=await e.call(n.filesOperations.upload,{files:[t.file],public:t.public===!0?`true`:`false`,folderPath:t.folderPath},{timeoutMs:t.timeoutMs});return toUploadedFile(r)}async function getDownloadUrl(t){let{url:r}=await e.call(n.filesOperations.signedUrl,{id:t});return r}return{upload,getDownloadUrl}}function objectKeyOf(e){return e.replace(/-([a-z0-9])/g,(e,t)=>t.toUpperCase())}const r=new Set([`from`,`files`,`documents`,`bundles`,`usage`]);function assertObjectKeys(t){let n=new Map;for(let i of t){if(i.includes(`--`)||i.endsWith(`-`))throw new e.g(`Object "${i}" has a doubled or trailing hyphen, which has no client key. Rename the object.`);let t=objectKeyOf(i);if(r.has(t))throw new e.g(`Object "${i}" maps to the client key "${t}", which is reserved. Rename the object.`);let a=n.get(t);if(a!==void 0&&a!==i)throw new e.g(`Objects "${a}" and "${i}" both map to the client key "${t}". Rename one of them.`);n.set(t,i)}}function assertObjectNames(e){let n=new Set;for(let r of e){if(n.has(r))throw new t.DuplicateError(`object`,r);n.add(r)}assertObjectKeys(e)}const i=[`createdAt`,`updatedAt`,`deletedAt`];function dateAttributeNames(e){let t=new Set;for(let n of e?.attributes??[])n.type===`date`&&t.add(n.name);return t}function isRange(e){return typeof e==`object`&&!!e&&`start`in e&&`end`in e}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function flattenValues(e){let{values:t,...n}=e;return{...n,...isRecord(t)?t:{}}}function toDate(e){return typeof e==`string`?new Date(e):isRange(e)?{start:toDate(e.start),end:toDate(e.end)}:e}function reviveRecord(e,t){let n=dateAttributeNames(e),r=flattenValues(t);for(let e of i)e in r&&(r[e]=toDate(r[e]));for(let e of n)e in r&&(r[e]=toDate(r[e]));return r}function serializeInput(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof Date?t.toISOString():t]))}var a=class RecordsQueryImpl extends t.RecordQuery{constructor(e,t,n,r={object:t,combinator:`and`,rules:[],sorts:[]}){super(r),this.transport=e,this.objectName=t,this.definition=n}with(e){return new RecordsQueryImpl(this.transport,this.objectName,this.definition,{...this.state,...e})}body(){let e={};return this.state.search!==void 0&&(e.q=this.state.search),this.state.rules.length>0&&(e.filters={combinator:this.state.combinator,rules:this.state.rules}),this.state.sorts.length>0&&(e.sorts=this.state.sorts),this.state.limit!==void 0&&(e.limit=this.state.limit),this.state.offset!==void 0&&(e.offset=this.state.offset),e}revive(e){return reviveRecord(this.definition,e)}async export(t,r={}){if(!this.transport.postRaw)throw new e.g(`export() needs a transport with postRaw(path, body): Promise<Response>`);let{filters:i,sorts:a}=this.body(),{ids:o,locale:s,filename:c}=r;return await this.transport.postRaw((0,n.buildOperationPath)(n.recordsOperations.export,{objectName:this.objectName}),{q:this.state.search??``,...i?{filters:i}:{},...a?{sorts:a}:{},columns:t,...o?{ids:o}:{},...s?{locale:s}:{},timezone:r.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone,...c?{filename:c}:{}})}async aggregate(e){if(this.state.search!==void 0)throw new t.AggregateValidationError(t.SchemaErrorCode.AGGREGATE_SEARCH_UNSUPPORTED,`An aggregate cannot be narrowed by a search; use filters instead`);let r={...e,query:this.toDefinition(),timezone:e.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone};return await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.aggregate,{objectName:this.objectName}),r)}async fetchPage(){let e=this.state.search===void 0?`list`:`search`,t=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations[e],{objectName:this.objectName}),this.body());return{records:t.data.map(e=>this.revive(e)),page:t.page}}async fetch(){let{records:e,page:t}=await this.fetchPage();return{records:e,total:t.total}}async all(){if(this.state.limit!==void 0&&this.state.limit<0)return(await this.fetch()).records;let e=this.state.limit??1/0,t=[],n=this.state.offset??0;for(;;){let r=Math.min(1e3,e-t.length);if(r<=0)return t;let{records:i,page:a}=await this.with({limit:r,offset:n}).fetchPage();if(t.push(...i),!a.hasMore)return t;let o=a.nextOffset??n+i.length;if(o<=n)return t;n=o}}async single(){let{records:e}=await this.limit(1).fetch();return e[0]??null}async get(e){let t=await this.transport.get((0,n.buildOperationPath)(n.recordsOperations.get,{objectName:this.objectName,id:e}));return this.revive(t)}async create(e){let t=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.create,{objectName:this.objectName}),{data:serializeInput(e)});return this.revive(t)}async update(e,t){let r=await this.transport.put((0,n.buildOperationPath)(n.recordsOperations.update,{objectName:this.objectName,id:e}),serializeInput(t));return this.revive(r)}async delete(e){await this.transport.delete((0,n.buildOperationPath)(n.recordsOperations.delete,{objectName:this.objectName,id:e}))}async inChunks(e,t){for(let n=0;n<e.length;n+=100)await t(e.slice(n,n+100),n)}async createMany(e){let t={created:[],errors:[]};return await this.inChunks(e,async(e,r)=>{let i=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkCreate,{objectName:this.objectName}),{records:e.map(serializeInput)});t.created.push(...i.created.map(e=>this.revive(e))),t.errors.push(...i.errors.map(e=>({...e,index:e.index+r})))}),t}async updateMany(e){let t={updated:[],errors:[]};return await this.inChunks(e,async e=>{let r=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkUpdate,{objectName:this.objectName}),{updates:e.map(({id:e,data:t})=>({id:e,data:serializeInput(t)}))});t.updated.push(...r.updated.map(e=>this.revive(e))),t.errors.push(...r.errors)}),t}async deleteMany(e){let t={deleted:[],errors:[]};return await this.inChunks(e,async e=>{let r=await this.transport.post((0,n.buildOperationPath)(n.recordsOperations.bulkDelete,{objectName:this.objectName}),{ids:e});t.deleted.push(...r.deleted),t.errors.push(...r.errors)}),t}async listAccess(e){return await this.transport.get((0,n.buildOperationPath)(n.recordAccessOperations.list,{objectName:this.objectName,recordId:e}))}async grantAccess(e,t,r){return await this.transport.put((0,n.buildOperationPath)(n.recordAccessOperations.grant,{objectName:this.objectName,recordId:e,actorId:t}),{role:r})}async revokeAccess(e,t){return await this.transport.delete((0,n.buildOperationPath)(n.recordAccessOperations.revoke,{objectName:this.objectName,recordId:e,actorId:t}))}async clearAccess(e){return await this.transport.delete((0,n.buildOperationPath)(n.recordAccessOperations.clear,{objectName:this.objectName,recordId:e}))}};const o=new WeakMap;function definitionOf(e){let t=o.get(e);if(t)return t;let n=e.build();return o.set(e,n),n}function createRecordsQuery(e,t){if(typeof t==`string`)return new a(e,t,null);let n=definitionOf(t);return new a(e,n.name,n)}function createUsageApi(e){return{report:({from:t,to:r,scope:i=`me`})=>e.call(n.aiOperations.usage,{from:t,to:r,scope:i})}}function readEnvironment(){return typeof process>`u`||!process.env?{}:{baseUrl:process.env.STANDARDS_API_URL||void 0,apiKey:process.env.STANDARDS_API_KEY||void 0}}function resolveConfig(t){if(globalThis.window!==void 0){if(t.apiKey)throw new e.g(`createStandards received an apiKey in a browser context. API keys belong to server code only (Route Handlers, Server Components, scripts).`);if(t.baseUrl===void 0)throw new e.g(`createStandards needs an explicit baseUrl in a browser context: STANDARDS_API_URL and STANDARDS_API_KEY are never read from the environment there.`);return{...t,baseUrl:t.baseUrl,apiKey:``}}let n=readEnvironment(),r=t.baseUrl??n.baseUrl;if(r===void 0)throw new e.g(`createStandards needs a base URL: pass baseUrl or set the STANDARDS_API_URL environment variable.`);let i=t.apiKey??n.apiKey;if(i===void 0)throw new e.g(`createStandards needs an API key: pass apiKey or set the STANDARDS_API_KEY environment variable.`);return{...t,baseUrl:r,apiKey:i}}function createStandards(t={}){let{bundles:n=[],...r}=t;return buildStandards(e.n(resolveConfig(r)),n.flatMap(e=>e.objectBuilders))}function buildStandards(e,t){let n={bundles:{sync:(t,n)=>syncBundle(e,t,n)},from:t=>createRecordsQuery(e,t),files:createFilesApi(e),documents:createDocumentsApi(e),usage:createUsageApi(e)},r=t.map(e=>definitionOf(e).name);return assertObjectNames(r),t.forEach((t,i)=>{n[objectKeyOf(r[i])]=createRecordsQuery(e,t)}),n}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return definitionOf}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return createFilesApi}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return createRecordsQuery}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return createDocumentsApi}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return createStandards}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return reviveRecord}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return createUsageApi}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return serializeInput}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return buildStandards}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return syncBundle}});
@@ -1,2 +0,0 @@
1
- /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- import{DRAFT_CONFLICT_KINDS as e,SchemaErrorCode as t,ValidationError as n}from"@standards/schema";import{encodePathSegment as r,splitOperationInput as i}from"@standards/schema/api";var StandardsRequestError=class extends Error{constructor(e,t,n,r){super(t),this.name=`StandardsRequestError`,this.status=e,this.code=n,this.details=r}},StandardsAuthError=class extends StandardsRequestError{constructor(e,t,n,r){super(e,t,n,r),this.name=`StandardsAuthError`}},BundleConflictError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleConflictError`;let r=/"([^"]+)" is owned by (\S+)/.exec(t);this.objectName=r?.[1]??``,this.owner=r?.[2]??``}},BundleValidationError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleValidationError`}},StandardsConfigurationError=class extends Error{constructor(e){super(e),this.name=`StandardsConfigurationError`}};function schemaApiErrorCode(e){if(typeof e!=`object`||!e||!(`code`in e))return;let{code:t}=e;return typeof t==`string`?t:void 0}const a=new Set([t.CONFIGURATION_REQUIRED]);function isPermanentRefusal(e){let t=schemaApiErrorCode(e);return t!==void 0&&a.has(t)}function isObjectNotFound(e){if(typeof e!=`object`||!e)return!1;let{code:n,status:r}=e;return n===t.OBJECT_NOT_FOUND||r===404}function isDraftRevisionConflict(e){return schemaApiErrorCode(e)===t.DRAFT_REVISION_CONFLICT}const o=new Set(e);function draftConflictChanges(e){if(!isDraftRevisionConflict(e))return[];let t=e.details?.changes;return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.key==`string`&&typeof e.label==`string`&&typeof e.seen==`string`&&o.has(e.kind)):[]}function isViewNotFound(e){return typeof e!=`object`||!e?!1:e.status===404}function parseContentDispositionFilename(e){if(!e)return;let t=e.match(/filename\*\s*=\s*(?:UTF-8|utf-8)''([^;]+)/i);if(t?.[1])try{return decodeURIComponent(t[1].trim())}catch{}let n=e.match(/filename\s*=\s*"([^"]*)"|filename\s*=\s*([^;]+)/i);return(n?.[1]??n?.[2])?.trim()||void 0}function recordsPath(e,...t){return[`/records`,...[e,...t].map(r)].join(`/`)}function resolveWithinBase(e,t){let r=e.endsWith(`/`)?e:`${e}/`,i=new URL(r),a=t.replace(/^\/+/,``),[o]=a.split(/[?#]/);if((o??``).split(`/`).some(e=>e===`..`||e===`.`))throw new n(`Request path "${t}" walks outside its own collection`,[]);let s=new URL(a,i);if(s.origin!==i.origin||!s.pathname.startsWith(i.pathname))throw new n(`Request path "${t}" resolves outside the API base "${i.pathname}"`,[]);return s}function readJson(e){return e.status===204||e.headers.get(`content-length`)===`0`?null:e.json()}async function readDownload(e){let t=await e.blob();return{blob:t,filename:parseContentDispositionFilename(e.headers.get(`Content-Disposition`)),mimeType:e.headers.get(`Content-Type`)??t.type}}function multipartBody(e,t){let n=new FormData;for(let[r,i]of Object.entries(t??{}))if(i!=null){if(r===e)for(let t of Array.isArray(i)?i:[i]){let r=t.name;typeof r==`string`?n.append(e,t,r):n.append(e,t)}else n.append(r,String(i))}return n}function headerRecord(e){return e===void 0?{}:e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}}function withoutContentType(e){return Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`content-type`))}function parseJsonObject(e){try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return}}function refusalFrom(e,t,n){let r=parseJsonObject(t),i=r?.message??r?.error??r?.detail,a=i==null?n&&r===void 0&&t?t:`Request failed with status ${e}`:String(i),o=typeof r?.code==`string`?r.code:void 0;return new(e===401||e===403?StandardsAuthError:StandardsRequestError)(e,a,o,r?.details)}function refusalOf(e,t){return refusalFrom(e,t,!1)}async function readRefusal(e){return refusalOf(e.status,await e.text().catch(()=>``))}function isTimeout(e){return e instanceof DOMException&&e.name===`TimeoutError`}function trimSlashes(e,t){let n=0,r=e.length;for(;t&&n<r&&e[n]===`/`;)n+=1;for(;r>n&&e[r-1]===`/`;)--r;return e.slice(n,r)}function backoff(e){return new Promise(t=>setTimeout(t,1e3*2**e))}function abortReason(e){return e?.aborted?e.reason:new DOMException(`The operation was aborted.`,`AbortError`)}function canReportUploadProgress(e){return typeof XMLHttpRequest>`u`?!1:e.fetch===void 0||e.uploadAuthorization!==void 0}function sendWithProgress(e,t){let{signal:n}=e;return n?.aborted?Promise.reject(abortReason(n)):new Promise((r,i)=>{let a=new XMLHttpRequest;a.open(e.method,e.url);for(let[t,n]of Object.entries(e.headers))a.setRequestHeader(t,n);let o=Object.keys(e.headers).some(e=>e.toLowerCase()===`authorization`);e.token&&!o&&a.setRequestHeader(`Authorization`,`Bearer ${e.token}`),a.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onUploadProgress({loaded:t.loaded,total:t.total})});let onAbort=()=>a.abort();n?.addEventListener(`abort`,onAbort,{once:!0});let settle=()=>n?.removeEventListener(`abort`,onAbort);a.addEventListener(`load`,()=>{if(settle(),a.status<200||a.status>=300){i(refusalOf(a.status,a.responseText));return}try{r(t(a.responseText))}catch(e){i(e)}}),a.addEventListener(`error`,()=>{settle(),i(new StandardsRequestError(0,`Network request failed`))}),a.addEventListener(`abort`,()=>{settle(),i(abortReason(n))}),a.send(e.form)})}function createHttpTransport(e){let{baseUrl:t,onUnauthorized:n,getRetries:r=0}=e,a=e.timeoutMs??3e4,o=e.apiPrefix===void 0?void 0:trimSlashes(e.apiPrefix,!0),s=o?`${trimSlashes(t,!1)}/${o}`:t;function buildUrl(e,t){let n=resolveWithinBase(s,e);for(let[e,r]of Object.entries(t??{}))r!=null&&n.searchParams.set(e,String(r));return n.toString()}async function headersFor(t){let n={"Content-Type":`application/json`,...headerRecord(await e.headers?.()),...headerRecord(t.headers)};return t.body instanceof FormData?withoutContentType(n):n}function observe(t){try{e.onResponse?.(t)}catch{}}async function fetchOnce(t,n,r){let i=n.signal??void 0;i?.throwIfAborted();let a=r===null?void 0:AbortSignal.timeout(r),o=new AbortController,expire=()=>o.abort(a?.reason);a?.addEventListener(`abort`,expire,{once:!0});let s=i?AbortSignal.any([i,o.signal]):o.signal,c=new Promise((e,t)=>{s.addEventListener(`abort`,()=>t(s.reason),{once:!0})});try{let r=e.fetch??fetch,i=await headersFor(n);return await Promise.race([r(t,{...n,headers:i,signal:s}),c])}catch(e){throw i?.aborted?i.reason:e}finally{a?.removeEventListener(`abort`,expire)}}function connectionFailure(e){return e instanceof TypeError||isTimeout(e)?new StandardsRequestError(0,`Could not connect to ${t}`):e}async function refreshAndRetry(e,t,r){try{if(!await n?.())return;let i=await fetchOnce(e,t,r);return observe(i),i}catch{if(t.signal?.aborted)throw t.signal.reason;return}}async function readRefusalWithin(e){let t,n=new Promise(n=>{t=setTimeout(()=>n(refusalFrom(e.status,``,!1)),1500)});try{let t=e.text().catch(()=>``).then(t=>refusalFrom(e.status,t,!1));return await Promise.race([t,n])}finally{clearTimeout(t)}}async function send(e,t,i,o){let s=buildUrl(e,i.params),c=(t.method??`GET`).toUpperCase(),l=i.maxRetries??(c===`GET`?r:0),u=i.timeoutMs===void 0?a:i.timeoutMs;for(let e=0;;e++){let r=e<l,a;try{a=await fetchOnce(s,t,u)}catch(n){if(r&&n instanceof TypeError&&!t.signal?.aborted){await backoff(e);continue}throw connectionFailure(n)}if(observe(a),a.status>=500&&r){let t=await readRefusalWithin(a);if(isPermanentRefusal(t))throw t;await backoff(e);continue}if(a.status===401&&n&&(a=await refreshAndRetry(s,t,u)??a),!a.ok){let e=await a.text().catch(()=>``);throw refusalFrom(a.status,e,i.plainTextRefusal??!1)}return await o(a)}}async function stream(t,r,a={}){let{path:o,query:s,body:c,headers:l}=i(t,r??{}),u=buildUrl(o,s),{signal:d,onRequest:f}=a,p=e.fetch??fetch,attempt=async()=>(f?.(),await p(u,{method:t.method,body:c===void 0?void 0:JSON.stringify(c),signal:d,headers:await headersFor({headers:{...l,...a.headers}})})),m=await attempt();if(m.status===401){let e=await readRefusal(m);if(e.code===`MFA_REQUIRED`||!n||!await n().catch(()=>!1))throw e;d?.throwIfAborted(),m=await attempt()}if(!m.ok)throw await readRefusal(m);return m}async function json(e,t,n){return await send(t,{method:e,body:n?JSON.stringify(n):void 0},{},readJson)}return{async call(t,n,r={}){if(t.response===`events`)return await stream(t,n,{signal:r.signal});let{path:a,query:o,body:s,headers:c}=i(t,n??{});if(t.upload!==void 0&&r.onUploadProgress&&canReportUploadProgress(e)){r.signal?.throwIfAborted();let n=await e.uploadAuthorization?.()??null;return await sendWithProgress({url:buildUrl(a,o),method:t.method,headers:withoutContentType({...headerRecord(await e.headers?.()),...c}),token:n,form:multipartBody(t.upload.field,s),onUploadProgress:r.onUploadProgress,signal:r.signal},e=>e?JSON.parse(e):null)}let l=t.upload===void 0?s===void 0?void 0:JSON.stringify(s):multipartBody(t.upload.field,s),u=t.response===`bytes`?readDownload:readJson;return await send(a,{method:t.method,body:l,signal:r.signal,...c?{headers:c}:{},...r.keepalive?{keepalive:!0}:{}},{params:o,maxRetries:r.maxRetries,timeoutMs:r.timeoutMs},u)},stream,async get(e,t){return await send(e,{method:`GET`},{params:t},readJson)},post:(e,t)=>json(`POST`,e,t),patch:(e,t)=>json(`PATCH`,e,t),put:(e,t)=>json(`PUT`,e,t),delete:e=>json(`DELETE`,e),async getText(e,t){return await send(e,{method:`GET`},{params:t,plainTextRefusal:!0},e=>e.text())},async postRaw(e,t){return await send(e,{method:`POST`,body:JSON.stringify(t)},{plainTextRefusal:!0},e=>e)},async postMultipart(e,t,n={}){return await send(e,{method:`POST`,body:t},{timeoutMs:n.timeoutMs},readJson)}}}function createTransport(e){let{baseUrl:t,apiKey:n,tenantId:r,timeoutMs:i}=e,a={Authorization:`Bearer ${n}`,...r?{"X-Tenant-ID":r}:{}};return createHttpTransport({baseUrl:t,timeoutMs:i,headers:()=>a})}export{StandardsRequestError as _,recordsPath as a,isDraftRevisionConflict as c,isViewNotFound as d,schemaApiErrorCode as f,StandardsConfigurationError as g,StandardsAuthError as h,refusalOf as i,isObjectNotFound as l,BundleValidationError as m,createTransport as n,parseContentDispositionFilename as o,BundleConflictError as p,readRefusal as r,draftConflictChanges as s,createHttpTransport as t,isPermanentRefusal as u};
@@ -1,2 +0,0 @@
1
- /*! © 2025-2026 AND YOU CREATE SAS (RCS Paris 940 190 614). Proprietary — see LICENSE (Standards SDK License 1.0). */
2
- let e=require("@standards/schema"),t=require("@standards/schema/api");var StandardsRequestError=class extends Error{constructor(e,t,n,r){super(t),this.name=`StandardsRequestError`,this.status=e,this.code=n,this.details=r}},StandardsAuthError=class extends StandardsRequestError{constructor(e,t,n,r){super(e,t,n,r),this.name=`StandardsAuthError`}},BundleConflictError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleConflictError`;let r=/"([^"]+)" is owned by (\S+)/.exec(t);this.objectName=r?.[1]??``,this.owner=r?.[2]??``}},BundleValidationError=class extends StandardsRequestError{constructor(e,t,n){super(e,t,n),this.name=`BundleValidationError`}},StandardsConfigurationError=class extends Error{constructor(e){super(e),this.name=`StandardsConfigurationError`}};function schemaApiErrorCode(e){if(typeof e!=`object`||!e||!(`code`in e))return;let{code:t}=e;return typeof t==`string`?t:void 0}const n=new Set([e.SchemaErrorCode.CONFIGURATION_REQUIRED]);function isPermanentRefusal(e){let t=schemaApiErrorCode(e);return t!==void 0&&n.has(t)}function isObjectNotFound(t){if(typeof t!=`object`||!t)return!1;let{code:n,status:r}=t;return n===e.SchemaErrorCode.OBJECT_NOT_FOUND||r===404}function isDraftRevisionConflict(t){return schemaApiErrorCode(t)===e.SchemaErrorCode.DRAFT_REVISION_CONFLICT}const r=new Set(e.DRAFT_CONFLICT_KINDS);function draftConflictChanges(e){if(!isDraftRevisionConflict(e))return[];let t=e.details?.changes;return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.key==`string`&&typeof e.label==`string`&&typeof e.seen==`string`&&r.has(e.kind)):[]}function isViewNotFound(e){return typeof e!=`object`||!e?!1:e.status===404}function parseContentDispositionFilename(e){if(!e)return;let t=e.match(/filename\*\s*=\s*(?:UTF-8|utf-8)''([^;]+)/i);if(t?.[1])try{return decodeURIComponent(t[1].trim())}catch{}let n=e.match(/filename\s*=\s*"([^"]*)"|filename\s*=\s*([^;]+)/i);return(n?.[1]??n?.[2])?.trim()||void 0}function recordsPath(e,...n){return[`/records`,...[e,...n].map(t.encodePathSegment)].join(`/`)}function resolveWithinBase(t,n){let r=t.endsWith(`/`)?t:`${t}/`,i=new URL(r),a=n.replace(/^\/+/,``),[o]=a.split(/[?#]/);if((o??``).split(`/`).some(e=>e===`..`||e===`.`))throw new e.ValidationError(`Request path "${n}" walks outside its own collection`,[]);let s=new URL(a,i);if(s.origin!==i.origin||!s.pathname.startsWith(i.pathname))throw new e.ValidationError(`Request path "${n}" resolves outside the API base "${i.pathname}"`,[]);return s}function readJson(e){return e.status===204||e.headers.get(`content-length`)===`0`?null:e.json()}async function readDownload(e){let t=await e.blob();return{blob:t,filename:parseContentDispositionFilename(e.headers.get(`Content-Disposition`)),mimeType:e.headers.get(`Content-Type`)??t.type}}function multipartBody(e,t){let n=new FormData;for(let[r,i]of Object.entries(t??{}))if(i!=null){if(r===e)for(let t of Array.isArray(i)?i:[i]){let r=t.name;typeof r==`string`?n.append(e,t,r):n.append(e,t)}else n.append(r,String(i))}return n}function headerRecord(e){return e===void 0?{}:e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}}function withoutContentType(e){return Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`content-type`))}function parseJsonObject(e){try{let t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return}}function refusalFrom(e,t,n){let r=parseJsonObject(t),i=r?.message??r?.error??r?.detail,a=i==null?n&&r===void 0&&t?t:`Request failed with status ${e}`:String(i),o=typeof r?.code==`string`?r.code:void 0;return new(e===401||e===403?StandardsAuthError:StandardsRequestError)(e,a,o,r?.details)}function refusalOf(e,t){return refusalFrom(e,t,!1)}async function readRefusal(e){return refusalOf(e.status,await e.text().catch(()=>``))}function isTimeout(e){return e instanceof DOMException&&e.name===`TimeoutError`}function trimSlashes(e,t){let n=0,r=e.length;for(;t&&n<r&&e[n]===`/`;)n+=1;for(;r>n&&e[r-1]===`/`;)--r;return e.slice(n,r)}function backoff(e){return new Promise(t=>setTimeout(t,1e3*2**e))}function abortReason(e){return e?.aborted?e.reason:new DOMException(`The operation was aborted.`,`AbortError`)}function canReportUploadProgress(e){return typeof XMLHttpRequest>`u`?!1:e.fetch===void 0||e.uploadAuthorization!==void 0}function sendWithProgress(e,t){let{signal:n}=e;return n?.aborted?Promise.reject(abortReason(n)):new Promise((r,i)=>{let a=new XMLHttpRequest;a.open(e.method,e.url);for(let[t,n]of Object.entries(e.headers))a.setRequestHeader(t,n);let o=Object.keys(e.headers).some(e=>e.toLowerCase()===`authorization`);e.token&&!o&&a.setRequestHeader(`Authorization`,`Bearer ${e.token}`),a.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onUploadProgress({loaded:t.loaded,total:t.total})});let onAbort=()=>a.abort();n?.addEventListener(`abort`,onAbort,{once:!0});let settle=()=>n?.removeEventListener(`abort`,onAbort);a.addEventListener(`load`,()=>{if(settle(),a.status<200||a.status>=300){i(refusalOf(a.status,a.responseText));return}try{r(t(a.responseText))}catch(e){i(e)}}),a.addEventListener(`error`,()=>{settle(),i(new StandardsRequestError(0,`Network request failed`))}),a.addEventListener(`abort`,()=>{settle(),i(abortReason(n))}),a.send(e.form)})}function createHttpTransport(e){let{baseUrl:n,onUnauthorized:r,getRetries:i=0}=e,a=e.timeoutMs??3e4,o=e.apiPrefix===void 0?void 0:trimSlashes(e.apiPrefix,!0),s=o?`${trimSlashes(n,!1)}/${o}`:n;function buildUrl(e,t){let n=resolveWithinBase(s,e);for(let[e,r]of Object.entries(t??{}))r!=null&&n.searchParams.set(e,String(r));return n.toString()}async function headersFor(t){let n={"Content-Type":`application/json`,...headerRecord(await e.headers?.()),...headerRecord(t.headers)};return t.body instanceof FormData?withoutContentType(n):n}function observe(t){try{e.onResponse?.(t)}catch{}}async function fetchOnce(t,n,r){let i=n.signal??void 0;i?.throwIfAborted();let a=r===null?void 0:AbortSignal.timeout(r),o=new AbortController,expire=()=>o.abort(a?.reason);a?.addEventListener(`abort`,expire,{once:!0});let s=i?AbortSignal.any([i,o.signal]):o.signal,c=new Promise((e,t)=>{s.addEventListener(`abort`,()=>t(s.reason),{once:!0})});try{let r=e.fetch??fetch,i=await headersFor(n);return await Promise.race([r(t,{...n,headers:i,signal:s}),c])}catch(e){throw i?.aborted?i.reason:e}finally{a?.removeEventListener(`abort`,expire)}}function connectionFailure(e){return e instanceof TypeError||isTimeout(e)?new StandardsRequestError(0,`Could not connect to ${n}`):e}async function refreshAndRetry(e,t,n){try{if(!await r?.())return;let i=await fetchOnce(e,t,n);return observe(i),i}catch{if(t.signal?.aborted)throw t.signal.reason;return}}async function readRefusalWithin(e){let t,n=new Promise(n=>{t=setTimeout(()=>n(refusalFrom(e.status,``,!1)),1500)});try{let t=e.text().catch(()=>``).then(t=>refusalFrom(e.status,t,!1));return await Promise.race([t,n])}finally{clearTimeout(t)}}async function send(e,t,n,o){let s=buildUrl(e,n.params),c=(t.method??`GET`).toUpperCase(),l=n.maxRetries??(c===`GET`?i:0),u=n.timeoutMs===void 0?a:n.timeoutMs;for(let e=0;;e++){let i=e<l,a;try{a=await fetchOnce(s,t,u)}catch(n){if(i&&n instanceof TypeError&&!t.signal?.aborted){await backoff(e);continue}throw connectionFailure(n)}if(observe(a),a.status>=500&&i){let t=await readRefusalWithin(a);if(isPermanentRefusal(t))throw t;await backoff(e);continue}if(a.status===401&&r&&(a=await refreshAndRetry(s,t,u)??a),!a.ok){let e=await a.text().catch(()=>``);throw refusalFrom(a.status,e,n.plainTextRefusal??!1)}return await o(a)}}async function stream(n,i,a={}){let{path:o,query:s,body:c,headers:l}=(0,t.splitOperationInput)(n,i??{}),u=buildUrl(o,s),{signal:d,onRequest:f}=a,p=e.fetch??fetch,attempt=async()=>(f?.(),await p(u,{method:n.method,body:c===void 0?void 0:JSON.stringify(c),signal:d,headers:await headersFor({headers:{...l,...a.headers}})})),m=await attempt();if(m.status===401){let e=await readRefusal(m);if(e.code===`MFA_REQUIRED`||!r||!await r().catch(()=>!1))throw e;d?.throwIfAborted(),m=await attempt()}if(!m.ok)throw await readRefusal(m);return m}async function json(e,t,n){return await send(t,{method:e,body:n?JSON.stringify(n):void 0},{},readJson)}return{async call(n,r,i={}){if(n.response===`events`)return await stream(n,r,{signal:i.signal});let{path:a,query:o,body:s,headers:c}=(0,t.splitOperationInput)(n,r??{});if(n.upload!==void 0&&i.onUploadProgress&&canReportUploadProgress(e)){i.signal?.throwIfAborted();let t=await e.uploadAuthorization?.()??null;return await sendWithProgress({url:buildUrl(a,o),method:n.method,headers:withoutContentType({...headerRecord(await e.headers?.()),...c}),token:t,form:multipartBody(n.upload.field,s),onUploadProgress:i.onUploadProgress,signal:i.signal},e=>e?JSON.parse(e):null)}let l=n.upload===void 0?s===void 0?void 0:JSON.stringify(s):multipartBody(n.upload.field,s),u=n.response===`bytes`?readDownload:readJson;return await send(a,{method:n.method,body:l,signal:i.signal,...c?{headers:c}:{},...i.keepalive?{keepalive:!0}:{}},{params:o,maxRetries:i.maxRetries,timeoutMs:i.timeoutMs},u)},stream,async get(e,t){return await send(e,{method:`GET`},{params:t},readJson)},post:(e,t)=>json(`POST`,e,t),patch:(e,t)=>json(`PATCH`,e,t),put:(e,t)=>json(`PUT`,e,t),delete:e=>json(`DELETE`,e),async getText(e,t){return await send(e,{method:`GET`},{params:t,plainTextRefusal:!0},e=>e.text())},async postRaw(e,t){return await send(e,{method:`POST`,body:JSON.stringify(t)},{plainTextRefusal:!0},e=>e)},async postMultipart(e,t,n={}){return await send(e,{method:`POST`,body:t},{timeoutMs:n.timeoutMs},readJson)}}}function createTransport(e){let{baseUrl:t,apiKey:n,tenantId:r,timeoutMs:i}=e,a={Authorization:`Bearer ${n}`,...r?{"X-Tenant-ID":r}:{}};return createHttpTransport({baseUrl:t,timeoutMs:i,headers:()=>a})}Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return StandardsRequestError}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return recordsPath}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return isDraftRevisionConflict}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return isViewNotFound}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return schemaApiErrorCode}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return StandardsConfigurationError}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return StandardsAuthError}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return refusalOf}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return isObjectNotFound}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return BundleValidationError}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return createTransport}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return parseContentDispositionFilename}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return BundleConflictError}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return readRefusal}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return draftConflictChanges}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return createHttpTransport}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return isPermanentRefusal}});