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.
package/dist/config/esm/index.js
CHANGED
|
@@ -1,227 +1 @@
|
|
|
1
|
-
|
|
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};
|