@stacksjs/browser 0.72.103 → 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-init.js +1 -1
- package/dist/composables/auth/useGithub.d.ts +0 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/model-loader.d.ts +2 -2
- package/dist/model-loader.js +1 -1
- package/dist/types/globals.d.ts +27 -0
- package/dist/types/globals.js +1 -0
- package/dist/utils/sleep.js +1 -1
- package/package.json +4 -4
package/dist/auto-init.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser}from"bun-query-builder/browser";import*as Composables from"./composables";import*as Utils from"./utils";import{loadBrowserModels}from"./model-loader";let isInitialized=!1;export function getBrowserAutoImports(){return{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser,...Utils,...Composables}}function autoInit(){if(isInitialized)return;if(typeof window>"u")return;if(typeof document>"u")return;isInitialized=!0;const baseUrl=window.__STACKS_API_URL__||`${window.location.origin}/api`;configureBrowser({baseUrl,getToken:()=>{try{return localStorage.getItem("token")}catch{return null}},onUnauthorized:()=>{const loginUrl=window.__STACKS_LOGIN_URL__||"/login";if(!window.location.pathname.startsWith(loginUrl))window.location.href=loginUrl},transformResponse:(data)=>{return data?.data??data}});window.StacksBrowser=getBrowserAutoImports();loadBrowserModels();window.dispatchEvent(new CustomEvent("stacks:api-ready"));if(window.__STACKS_DEBUG__)console.debug("[Stacks] Browser API initialized:",baseUrl)}autoInit();export{autoInit,isInitialized};
|
|
1
|
+
import{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser}from"bun-query-builder/browser";import*as Composables from"./composables";import*as Utils from"./utils";import{loadBrowserModels}from"./model-loader";let isInitialized=!1;export function getBrowserAutoImports(){return{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser,...Utils,...Composables}}function autoInit(){if(isInitialized)return;if(typeof window>"u")return;if(typeof document>"u")return;isInitialized=!0;const baseUrl=window.__STACKS_API_URL__||`${window.location.origin}/api`;configureBrowser({baseUrl,getToken:()=>{try{return localStorage.getItem("token")}catch{return null}},onUnauthorized:()=>{const loginUrl=window.__STACKS_LOGIN_URL__||"/login";if(!window.location.pathname.startsWith(loginUrl))window.location.href=loginUrl},transformResponse:(data)=>{return data?.data??data}});window.StacksBrowser=Object.assign(window.StacksBrowser??{},getBrowserAutoImports());loadBrowserModels();window.dispatchEvent(new CustomEvent("stacks:api-ready"));if(window.__STACKS_DEBUG__)console.debug("[Stacks] Browser API initialized:",baseUrl)}autoInit();export{autoInit,isInitialized};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./auto-init";export*from"./composables";export*from"./utils";export*from"./model-loader";export{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser}from"bun-query-builder/browser";
|
|
1
|
+
import"./types/globals";import"./auto-init";export*from"./composables";export*from"./utils";export*from"./model-loader";export{browserQuery,BrowserQueryBuilder,BrowserQueryError,browserAuth,configureBrowser,getBrowserConfig,createBrowserDb,createBrowserModel,isBrowser}from"bun-query-builder/browser";
|
package/dist/model-loader.d.ts
CHANGED
|
@@ -72,13 +72,13 @@ export declare interface BrowserModel {
|
|
|
72
72
|
/**
|
|
73
73
|
* Window augmentation for the framework's `StacksBrowser` global
|
|
74
74
|
* (stacksjs/stacks#1894 T-9). Pre-fix every access went through
|
|
75
|
-
* `(window
|
|
75
|
+
* `(window)` — typos in model names silently returned
|
|
76
76
|
* `undefined`. The augmented index signature still permits any
|
|
77
77
|
* model name at runtime; what it adds is the existence + shape of
|
|
78
78
|
* the StacksBrowser bag itself.
|
|
79
79
|
*/
|
|
80
80
|
declare global {
|
|
81
81
|
interface Window {
|
|
82
|
-
StacksBrowser?: Record<string,
|
|
82
|
+
StacksBrowser?: Record<string, unknown>
|
|
83
83
|
}
|
|
84
84
|
}
|
package/dist/model-loader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createBrowserModel}from"bun-query-builder/browser";const modelModules=typeof import.meta.glob==="function"?import.meta.glob("~/app/Models/*.ts",{eager:!0}):{};export function loadBrowserModels(){if(typeof window>"u")return;if(!window.StacksBrowser)window.StacksBrowser={};for(const[path,module]of Object.entries(modelModules)){const definition=module.default;if(!definition||!definition.name){console.warn(`[model-loader] Skipping ${path}: no valid model definition`);continue}if(!definition.traits?.useApi?.uri)continue;try{const browserModel=createBrowserModel({name:definition.name,table:definition.table??definition.name.toLowerCase(),primaryKey:definition.primaryKey||"id",traits:{useUuid:definition.traits?.useUuid??!1,useTimestamps:definition.traits?.useTimestamps??!0,useSoftDeletes:definition.traits?.useSoftDeletes??!1,useApi:definition.traits?.useApi},attributes:extractBrowserAttributes(definition.attributes??{})});window.StacksBrowser[definition.name]=browserModel}catch(error){console.error(`[model-loader] Failed to create browser model for ${definition.name}:`,error)}}}function extractBrowserAttributes(attributes){const browserAttrs={};for(const[name,attr]of Object.entries(attributes))browserAttrs[name]={fillable:attr.fillable??!1,hidden:attr.hidden??!1,guarded:attr.guarded??!1,nullable:attr.nullable??!1};return browserAttrs}export function getBrowserModel(name){if(typeof window>"u")return null;
|
|
1
|
+
import{createBrowserModel}from"bun-query-builder/browser";function isBrowserModel(value){return value!=null&&typeof value.all==="function"&&typeof value.find==="function"}const modelModules=typeof import.meta.glob==="function"?import.meta.glob("~/app/Models/*.ts",{eager:!0}):{};export function loadBrowserModels(){if(typeof window>"u")return;if(!window.StacksBrowser)window.StacksBrowser={};for(const[path,module]of Object.entries(modelModules)){const definition=module.default;if(!definition||!definition.name){console.warn(`[model-loader] Skipping ${path}: no valid model definition`);continue}if(!definition.traits?.useApi?.uri)continue;try{const browserModel=createBrowserModel({name:definition.name,table:definition.table??definition.name.toLowerCase(),primaryKey:definition.primaryKey||"id",traits:{useUuid:definition.traits?.useUuid??!1,useTimestamps:definition.traits?.useTimestamps??!0,useSoftDeletes:definition.traits?.useSoftDeletes??!1,useApi:definition.traits?.useApi},attributes:extractBrowserAttributes(definition.attributes??{})});window.StacksBrowser[definition.name]=browserModel}catch(error){console.error(`[model-loader] Failed to create browser model for ${definition.name}:`,error)}}}function extractBrowserAttributes(attributes){const browserAttrs={};for(const[name,attr]of Object.entries(attributes))browserAttrs[name]={fillable:attr.fillable??!1,hidden:attr.hidden??!1,guarded:attr.guarded??!1,nullable:attr.nullable??!1};return browserAttrs}export function getBrowserModel(name){if(typeof window>"u")return null;const entry=window.StacksBrowser?.[name];return isBrowserModel(entry)?entry:null}export function getBrowserModelNames(){if(typeof window>"u")return[];const stacksBrowser=window.StacksBrowser;if(!stacksBrowser)return[];return Object.keys(stacksBrowser).filter((key)=>isBrowserModel(stacksBrowser[key]))}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The globals the server injects into the page, declared once.
|
|
3
|
+
*
|
|
4
|
+
* Every one of these was read through `(window)` or `(globalThis as
|
|
5
|
+
* any)` - six casts across five files - so a typo in a key was a silent
|
|
6
|
+
* `undefined` and the default beside it quietly won. `__STACKS_CONFIG__` is
|
|
7
|
+
* how an application overrides its API base URL and auth endpoints, so a
|
|
8
|
+
* misspelt `AUTH_ME_PATH` looks exactly like not having set one.
|
|
9
|
+
*
|
|
10
|
+
* `composables/auth/useGithub.ts` did carry a `declare global` meant to fix
|
|
11
|
+
* this, but it declared `interface Window {}` - empty, so it merged nothing -
|
|
12
|
+
* under a `@ts-ignore` that hid the fact it was doing nothing at all.
|
|
13
|
+
*/
|
|
14
|
+
export declare interface StacksBrowserConfig {
|
|
15
|
+
API_URL?: string
|
|
16
|
+
AUTH_ME_PATH?: string
|
|
17
|
+
AUTH_REFRESH_PATH?: string
|
|
18
|
+
FRONTEND_STRIPE_PUBLIC_KEY?: string
|
|
19
|
+
[key: string]: unknown
|
|
20
|
+
}
|
|
21
|
+
declare global {
|
|
22
|
+
var __STACKS_CONFIG__: StacksBrowserConfig | undefined;
|
|
23
|
+
var __STACKS_API_URL__: string | undefined;
|
|
24
|
+
var __STACKS_LOGIN_URL__: string | undefined;
|
|
25
|
+
var __STACKS_DEBUG__: boolean | undefined;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
package/dist/utils/sleep.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export function sleep(ms){if(ms<0||!Number.isInteger(ms))throw Error("sleep() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function wait(ms){if(ms<0||!Number.isInteger(ms))throw Error("wait() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function delay(ms){if(ms<0||!Number.isInteger(ms))throw Error("delay() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function waitUntil(condition,options={}){return new Promise((resolve)=>{const{interval,timeout}=normalizeOptions(options);if(condition()){resolve();return}const check=()=>{if(condition())resolve();else setTimeout(check,interval)};if(timeout)setTimeout(resolve,timeout);check()})}function normalizeOptions(options){if(typeof options==="number")return{interval:options,timeout:0};return{interval:options.interval??100,timeout:options.timeout??0}}export function waitWhile(condition,options={}){return new Promise((resolve)=>{const{interval
|
|
1
|
+
export function sleep(ms){if(ms<0||!Number.isInteger(ms))throw Error("sleep() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function wait(ms){if(ms<0||!Number.isInteger(ms))throw Error("wait() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function delay(ms){if(ms<0||!Number.isInteger(ms))throw Error("delay() requires a non-negative integer");return new Promise((resolve)=>setTimeout(resolve,ms))}export function waitUntil(condition,options={}){return new Promise((resolve)=>{const{interval,timeout}=normalizeOptions(options);if(condition()){resolve();return}const check=()=>{if(condition())resolve();else setTimeout(check,interval)};if(timeout)setTimeout(resolve,timeout);check()})}function normalizeOptions(options){if(typeof options==="number")return{interval:options,timeout:0};return{interval:options.interval??100,timeout:options.timeout??0}}export function waitWhile(condition,options={}){return new Promise((resolve)=>{const{interval,timeout}=normalizeOptions(options);if(!condition()){resolve();return}const check=()=>{if(!condition())resolve();else setTimeout(check,interval)};if(timeout)setTimeout(resolve,timeout);check()})}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/browser",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.73.0",
|
|
6
6
|
"description": "Stacks core frontend/browser functionalities.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"prepublishOnly": "bun run build"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@stacksjs/composables": "0.
|
|
73
|
-
"@stacksjs/stx": "^0.2.
|
|
72
|
+
"@stacksjs/composables": "0.73.0",
|
|
73
|
+
"@stacksjs/stx": "^0.2.246",
|
|
74
74
|
"bun-query-builder": "^0.2.53"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"better-dx": "^0.2.24",
|
|
86
|
-
"@stacksjs/utils": "0.
|
|
86
|
+
"@stacksjs/utils": "0.73.0",
|
|
87
87
|
"@stripe/stripe-js": "^9.10.0"
|
|
88
88
|
}
|
|
89
89
|
}
|