react-luna-form 0.0.45 → 0.0.46

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.
@@ -1,227 +1 @@
1
- // ../luna-core/src/util/constant.ts
2
- var INPUT = "input";
3
- var INPUT_DATE = "input/date";
4
- var INPUT_EMAIL = "input/email";
5
- var INPUT_NUMBER = "input/number";
6
- var INPUT_PASSWORD = "input/password";
7
- var INPUT_TEL = "input/tel";
8
- var INPUT_TEXT = "input/text";
9
- var INPUT_TIME = "input/time";
10
- var INPUTS = [
11
- INPUT,
12
- INPUT_DATE,
13
- INPUT_EMAIL,
14
- INPUT_NUMBER,
15
- INPUT_PASSWORD,
16
- INPUT_TEL,
17
- INPUT_TEXT,
18
- INPUT_TIME
19
- ];
20
- var TEXTAREA = "textarea";
21
- var RADIO = "radio";
22
- var CHECKBOX = "checkbox";
23
- var SELECT = "select";
24
- var SELECT_DAY = "select/day";
25
- var SELECT_MONTH = "select/month";
26
- var SELECT_TIMEZONE = "select/timezone";
27
- var SELECT_YEAR = "select/year";
28
- var SELECTS = [
29
- SELECT,
30
- SELECT_DAY,
31
- SELECT_MONTH,
32
- SELECT_TIMEZONE,
33
- SELECT_YEAR
34
- ];
35
- var CHIPS = "chips";
36
- var CHIPS_DAYS = "chips/day";
37
- var CHIPS_MONTHS = "chips/month";
38
- var COMMON_URL = "http://luna.internal";
39
-
40
- // ../luna-core/src/util/is-type.ts
41
- function isObject(value) {
42
- return value !== null && Object.prototype.toString.call(value) === "[object Object]";
43
- }
44
- function isString(value) {
45
- return typeof value === "string";
46
- }
47
-
48
- // ../luna-core/src/util/string.ts
49
- function isInterpolated(template) {
50
- if (isString(template)) {
51
- return /{([^}]{1,200})}/.test(template);
52
- }
53
- if (Array.isArray(template)) {
54
- return template.some((item) => isInterpolated(item));
55
- }
56
- if (isObject(template)) {
57
- return Object.values(template).some((value) => isInterpolated(value));
58
- }
59
- return false;
60
- }
61
-
62
- // ../luna-core/src/util/logger.ts
63
- var logger = {
64
- error: (...args) => {
65
- if (isConsoleAvailable() && !isProduction()) {
66
- getConsole().error("[Luna Form]", ...args);
67
- }
68
- },
69
- warn: (...args) => {
70
- if (isConsoleAvailable() && !isProduction()) {
71
- getConsole().warn("[Luna Form]", ...args);
72
- }
73
- },
74
- info: (...args) => {
75
- if (isConsoleAvailable() && !isProduction()) {
76
- getConsole().info("[Luna Form]", ...args);
77
- }
78
- }
79
- };
80
- var isConsoleAvailable = () => typeof getConsole() !== "undefined";
81
- var isProduction = () => false;
82
- var getConsole = () => globalThis.console;
83
-
84
- // ../luna-core/src/util/stringify.ts
85
- function stringify(body) {
86
- try {
87
- if (body instanceof FormData) {
88
- return null;
89
- }
90
- if (isString(body)) {
91
- return body;
92
- }
93
- return JSON.stringify(body);
94
- } catch {
95
- logger.error("Failed to stringify body:", body);
96
- return null;
97
- }
98
- }
99
-
100
- // ../luna-core/src/fetcher.ts
101
- var REGEX_INVALID_URL_SEGMENTS = /(^|[\/?=&])(null|undefined)([\/?=&]|$)/;
102
- async function fetcher(dataSource) {
103
- const [url, method] = buildRequest(dataSource);
104
- let body = dataSource.body;
105
- let headers = buildHeaders(dataSource);
106
- if (body && !isGetMethod(method)) {
107
- const bodyStringify = stringify(body);
108
- if (bodyStringify !== null) {
109
- body = bodyStringify;
110
- headers = asJson(headers);
111
- }
112
- }
113
- const target = url.origin === COMMON_URL ? url.toString().replace(COMMON_URL, "") : url.toString();
114
- const request = await fetch(target, {
115
- body: buildBody(method, body),
116
- cache: dataSource.cache,
117
- headers,
118
- method
119
- });
120
- const response = await request.json();
121
- if (request.ok) {
122
- return response;
123
- }
124
- throw response;
125
- }
126
- function buildRequest(dataSource) {
127
- const current = dataSource.url?.trim();
128
- if (!current || !isValid(current)) {
129
- throw new Error(`Invalid URL: ${dataSource.url}`);
130
- }
131
- const url = new URL(current, COMMON_URL);
132
- const method = buildMethod(dataSource);
133
- if (dataSource.body && isGetMethod(method)) {
134
- Object.entries(dataSource.body).filter(([, value]) => value !== void 0 && value !== "undefined").forEach(([key, value]) => {
135
- url.searchParams.append(key, String(value));
136
- });
137
- }
138
- return [url, method];
139
- }
140
- function asJson(headers) {
141
- return {
142
- ...headers,
143
- "Content-Type": "application/json"
144
- };
145
- }
146
- function isValid(value) {
147
- if (!isString(value) || isInterpolated(value)) {
148
- return false;
149
- }
150
- return !REGEX_INVALID_URL_SEGMENTS.test(value);
151
- }
152
- function buildMethod(dataSource) {
153
- return dataSource.method ?? "GET";
154
- }
155
- function buildHeaders(dataSource) {
156
- const headers = dataSource.headers ?? {};
157
- return {
158
- Accept: "application/json",
159
- ...headers
160
- };
161
- }
162
- function isGetMethod(method) {
163
- return method.toUpperCase() === "GET";
164
- }
165
- function buildBody(method, body) {
166
- if (!isGetMethod(method)) {
167
- return body;
168
- }
169
- }
170
-
171
- // src/config/index.ts
172
- function defineConfig(options) {
173
- const config = {
174
- alert: options.alert,
175
- env: options.env,
176
- fetcher: {
177
- provider: fetcher,
178
- remotePatterns: options.fetcher?.remotePatterns
179
- },
180
- inputs: {},
181
- style: options.style
182
- };
183
- config.validation = options.validation ?? {
184
- blur: true,
185
- change: true,
186
- showError: true,
187
- submit: true
188
- };
189
- options.inputs.forEach(({ types, input }) => {
190
- const type = Array.isArray(types) ? types : [types];
191
- type.forEach((t) => {
192
- config.inputs[t] = input;
193
- });
194
- });
195
- return config;
196
- }
197
- var defineCheckbox = createDefineFunction([CHECKBOX]);
198
- var defineChips = createDefineFunction([
199
- CHIPS,
200
- CHIPS_DAYS,
201
- CHIPS_MONTHS
202
- ]);
203
- var defineInput = createDefineFunction(INPUTS);
204
- var defineRadio = createDefineFunction([RADIO]);
205
- var defineSelect = createDefineFunction(SELECTS);
206
- var defineTextArea = createDefineFunction([TEXTAREA]);
207
- function defineCustomInput(types, input) {
208
- return createDefineFunction(types)(input);
209
- }
210
- function createDefineFunction(types) {
211
- return (input) => {
212
- return {
213
- types,
214
- input
215
- };
216
- };
217
- }
218
- export {
219
- defineCheckbox,
220
- defineChips,
221
- defineConfig,
222
- defineCustomInput,
223
- defineInput,
224
- defineRadio,
225
- defineSelect,
226
- defineTextArea
227
- };
1
+ var _="input",L="input/date",O="input/email",D="input/number",w="input/password",M="input/tel",U="input/text",k="input/time",g=[_,L,O,D,w,M,U,k],A="textarea",m="radio",I="checkbox";var H="select",X="select/day",v="select/month",Y="select/timezone",j="select/year",h=[H,X,v,Y,j],S="chips",y="chips/day",R="chips/month";var a="http://luna.internal";function P(t){return t!==null&&Object.prototype.toString.call(t)==="[object Object]"}function s(t){return typeof t=="string"}function u(t){return s(t)?/{([^}]{1,200})}/.test(t):Array.isArray(t)?t.some(n=>u(n)):P(t)?Object.values(t).some(n=>u(n)):!1}var b={error:(...t)=>{f()&&!l()&&p().error("[Luna Form]",...t)},warn:(...t)=>{f()&&!l()&&p().warn("[Luna Form]",...t)},info:(...t)=>{f()&&!l()&&p().info("[Luna Form]",...t)}},f=()=>typeof p()<"u",l=()=>!0,p=()=>globalThis.console;function C(t){try{return t instanceof FormData?null:s(t)?t:JSON.stringify(t)}catch{return b.error("Failed to stringify body:",t),null}}var B=/(^|[\/?=&])(null|undefined)([\/?=&]|$)/;async function N(t){let[n,r]=F(t),o=t.body,e=$(t);if(o&&!T(r)){let E=C(o);E!==null&&(o=E,e=G(e))}let c=n.origin===a?n.toString().replace(a,""):n.toString(),x=await fetch(c,{body:W(r,o),cache:t.cache,headers:e,method:r}),d=await x.json();if(x.ok)return d;throw d}function F(t){let n=t.url?.trim();if(!n||!V(n))throw new Error(`Invalid URL: ${t.url}`);let r=new URL(n,a),o=K(t);return t.body&&T(o)&&Object.entries(t.body).filter(([,e])=>e!==void 0&&e!=="undefined").forEach(([e,c])=>{r.searchParams.append(e,String(c))}),[r,o]}function G(t){return{...t,"Content-Type":"application/json"}}function V(t){return!s(t)||u(t)?!1:!B.test(t)}function K(t){return t.method??"GET"}function $(t){return{Accept:"application/json",...t.headers??{}}}function T(t){return t.toUpperCase()==="GET"}function W(t,n){if(!T(t))return n}function pt(t){let n={alert:t.alert,env:t.env,fetcher:{provider:N,remotePatterns:t.fetcher?.remotePatterns},inputs:{},style:t.style};return n.validation=t.validation??{blur:!0,change:!0,showError:!0,submit:!0},t.inputs.forEach(({types:r,input:o})=>{(Array.isArray(r)?r:[r]).forEach(c=>{n.inputs[c]=o})}),n}var ft=i([I]),lt=i([S,y,R]),Tt=i(g),xt=i([m]),dt=i(h),Et=i([A]);function gt(t,n){return i(t)(n)}function i(t){return n=>({types:t,input:n})}export{ft as defineCheckbox,lt as defineChips,pt as defineConfig,gt as defineCustomInput,Tt as defineInput,xt as defineRadio,dt as defineSelect,Et as defineTextArea};