|
17 | 17 | (function(module) {
|
18 | 18 | 'use strict';
|
19 | 19 |
|
20 |
| -function JFormatter(format) { |
21 |
| - this.format = function(arr) { |
22 |
| - var args = []; |
23 |
| - if (arguments.length === 1 && typeof(arr) === 'object') { |
24 |
| - args = arr; |
25 |
| - } else { |
26 |
| - for (var i = 0; i < arguments.length; i++) { |
27 |
| - args.push(arguments[i]); |
28 |
| - } |
29 |
| - } |
30 |
| - var regex = /%s/; |
31 |
| - var _r = function(p,c) { return p.replace(regex, c); } |
32 |
| - return args.reduce(_r, format); |
33 |
| - }; |
34 |
| -} |
35 |
| - |
36 |
| -/** |
37 |
| - * <strong>This class shouldn't be used in any public API or library.</strong> It is designed to be used for in-house development |
38 |
| - * of end user applications which will report Bugs in standardized error pages or post them to issue tracker. |
39 |
| - * <p> |
40 |
| - * Exception identifier for all Eid Runtime Exceptions. |
41 |
| - * @constructor |
42 |
| - * @param {string} id - the exception id, must be unique developer inserted string, from date |
43 |
| - * @param {string} ref - an optional reference |
44 |
| - */ |
45 |
| -function Eid(id, ref) { |
46 |
| - var uniq = EidInternal.uniqIdGenerator.generateUniqId(); |
47 |
| - ref = (ref === null || ref == undefined) ? "" : ref; |
48 |
| - |
49 |
| - /** |
50 |
| - * Makes a log message from this EID object |
51 |
| - * <p> |
52 |
| - * <p>This method is for convenience of usage of EID in logging. You can use it like this: |
53 |
| - * <p> |
54 |
| - * <pre> |
55 |
| - * log.debug(new Eid("20151025:202129").makeLogMessage("A request: %s", request)); |
56 |
| - * </pre> |
57 |
| - * @param {string} logMessageFormat - a log message format as accepted by {@link String#format(String, Object...)} |
58 |
| - * @param {Object...} parameters - a parameters for logMessageFormat to by passed to {@link String#format(String, Object...)} |
59 |
| - * @return {string} a formatted message |
60 |
| - */ |
61 |
| - this.makeLogMessage = function(logMessageFormat) { |
62 |
| - var parameters = []; |
63 |
| - for (var i = 1; i < arguments.length; i++) { |
64 |
| - parameters.push(arguments[i]); |
65 |
| - } |
66 |
| - var message = new JFormatter(logMessageFormat).format(parameters); |
67 |
| - return new JFormatter(Eid.getMessageFormat()).format(this.toString(), message); |
68 |
| - } |
69 |
| - |
70 |
| - /** |
71 |
| - * Standard to string method |
72 |
| - */ |
73 |
| - this.toString = function() { |
74 |
| - if ("" === ref) { |
75 |
| - return new JFormatter(EidInternal.format).format(id, uniq); |
76 |
| - } |
77 |
| - return new JFormatter(EidInternal.refFormat).format(id, ref, uniq); |
78 |
| - } |
79 |
| - |
80 |
| - /** |
81 |
| - * Getter for constant Exception ID |
82 |
| - * |
83 |
| - * @return {string} ID of exception |
84 |
| - */ |
85 |
| - this.getId = function() { |
86 |
| - return id; |
87 |
| - } |
88 |
| - |
89 |
| - /** |
90 |
| - * Get custom ref passed to Exception ID |
91 |
| - * |
92 |
| - * @return {string} ID of exception |
93 |
| - */ |
94 |
| - this.getRef = function() { |
95 |
| - return ref; |
96 |
| - } |
97 |
| - |
98 |
| - /** |
99 |
| - * Gets unique generated string for this instance of Eid |
100 |
| - * |
101 |
| - * @return {string} a unique string |
102 |
| - */ |
103 |
| - this.getUniq = function() { |
104 |
| - return uniq; |
105 |
| - } |
106 |
| -} |
107 |
| - |
108 |
| -function MathRandom() { |
109 |
| - var LONG_MAX = Math.pow(2, 53) - 1; |
110 |
| - var LONG_MIN = -1 * Math.pow(2, 53); |
111 |
| - this.nextLong = function() { |
112 |
| - return random(LONG_MIN, LONG_MAX); |
113 |
| - }; |
114 |
| - this.nextInt = function(max) { |
115 |
| - return random(0, max); |
116 |
| - }; |
117 |
| - var random = function(min, max) { |
118 |
| - return Math.floor(Math.random() * (max - min + 1)) + min; |
119 |
| - }; |
120 |
| -} |
121 |
| - |
122 |
| -function StdUniqIdGenerator() { |
123 |
| - var BASE36 = 36; |
124 |
| - var INTEGER_MAX_VALUE = Math.pow(2, 31); |
125 |
| - var generator = new MathRandom(); |
126 |
| - this.generateUniqId = function() { |
127 |
| - var first = Math.abs(generator.nextLong() + 1); |
128 |
| - var second = Math.abs(generator.nextInt(INTEGER_MAX_VALUE)); |
129 |
| - var calc = first + second; |
130 |
| - return (Math.abs(calc) % INTEGER_MAX_VALUE).toString(BASE36); |
131 |
| - }; |
132 |
| -} |
133 |
| - |
134 |
| -var DEFAULT_FORMAT = "[%s]<%s>"; |
135 |
| -var DEFAULT_REF_FORMAT = "[%s|%s]<%s>"; |
136 |
| -var DEFAULT_MESSAGE_FORMAT = "%s => %s"; |
137 |
| -var DEFAULT_UNIQ_ID_GENERATOR = new StdUniqIdGenerator(); |
138 |
| - |
139 |
| -Object.defineProperty(Eid, "DEFAULT_FORMAT", { |
140 |
| - get: function() { return DEFAULT_FORMAT; } |
141 |
| -}); |
142 |
| -Object.defineProperty(Eid, "DEFAULT_MESSAGE_FORMAT", { |
143 |
| - get: function() { return DEFAULT_MESSAGE_FORMAT; } |
144 |
| -}); |
145 |
| -Object.defineProperty(Eid, "DEFAULT_REF_FORMAT", { |
146 |
| - get: function() { return DEFAULT_REF_FORMAT; } |
147 |
| -}); |
148 |
| -Object.defineProperty(Eid, "DEFAULT_UNIQ_ID_GENERATOR", { |
149 |
| - get: function() { return DEFAULT_UNIQ_ID_GENERATOR; } |
150 |
| -}); |
151 |
| - |
152 |
| -var FORMAT_NUM_SPEC = 2; |
153 |
| -var REF_FORMAT_NUM_SPEC = 3; |
154 |
| -var MESSAGE_FORMAT_NUM_SPEC = 2; |
155 |
| - |
156 |
| -var EidInternal = { |
157 |
| - messageFormat: DEFAULT_MESSAGE_FORMAT, |
158 |
| - uniqIdGenerator: DEFAULT_UNIQ_ID_GENERATOR, |
159 |
| - format: DEFAULT_FORMAT, |
160 |
| - refFormat: DEFAULT_REF_FORMAT |
161 |
| -}; |
162 |
| - |
163 |
| -var validateFormat = function(format, numSpecifiers) { |
164 |
| - if (format === null || format === undefined) { |
165 |
| - throw new TypeError("Format can't be null, but just received one"); |
166 |
| - } |
167 |
| - var specifiers = []; |
168 |
| - for (var i = 0; i < numSpecifiers; i++) { |
169 |
| - specifiers.push(i + "-test-id"); |
170 |
| - } |
171 |
| - var formatted = new JFormatter(format).format(specifiers); |
172 |
| - for (var specifier in specifiers) { |
173 |
| - if (formatted.indexOf(specifier) === -1) { |
174 |
| - throw new TypeError("Given format contains to little format specifiers, " + |
175 |
| - "expected " + numSpecifiers + " but given \"" + format + "\""); |
176 |
| - } |
177 |
| - } |
178 |
| -}; |
179 |
| - |
180 |
| -/** |
181 |
| - * Sets the actual unique ID generator that will be used to generate IDs for all Eid objects. It will return previously used |
182 |
| - * generator. |
183 |
| - * |
184 |
| - * @param {UniqIdGenerator} uniqIdGenerator - new instance of unique ID generator |
185 |
| - * @return {UniqIdGenerator} a previously used unique ID generator |
186 |
| - * @throws {TypeError} if given generator was null |
187 |
| - */ |
188 |
| -Eid.setUniqIdGenerator = function(uniqIdGenerator) { |
189 |
| - if (uniqIdGenerator === null || uniqIdGenerator === undefined) { |
190 |
| - throw new TypeError("Unique ID generator can't be null, but given one"); |
191 |
| - } |
192 |
| - var previous = EidInternal.uniqIdGenerator; |
193 |
| - EidInternal.uniqIdGenerator = uniqIdGenerator; |
194 |
| - return previous; |
195 |
| -}; |
196 |
| - |
197 |
| -/** |
198 |
| - * Sets the actual format that will be used in {@link #toString()} method. It will return previously used format. |
199 |
| - * |
200 |
| - * @param {string} format - a format compliant with {@link String#format(String, Object...)} with 2 object arguments |
201 |
| - * @return {string} a previously used format |
202 |
| - * @throws {TypeError} if given format hasn't got two format specifiers <tt>"%s"</tt>, or if given format was |
203 |
| - * null |
204 |
| - */ |
205 |
| -Eid.setFormat = function(format) { |
206 |
| - validateFormat(format, FORMAT_NUM_SPEC); |
207 |
| - var previously = EidInternal.format; |
208 |
| - EidInternal.format = format; |
209 |
| - return previously; |
210 |
| -}; |
211 |
| - |
212 |
| -/** |
213 |
| - * Sets the actual format that will be used in {@link #toString()} method |
214 |
| - * |
215 |
| - * @param {string} refFormat - a format compliant with {@link String#format(String, Object...)} with 3 object arguments |
216 |
| - * @return {string} a previously used format |
217 |
| - * @throws {TypeError} if given format hasn't got tree format specifiers <tt>"%s"</tt>, or if given format was |
218 |
| - * null |
219 |
| - */ |
220 |
| -Eid.setRefFormat = function(refFormat) { |
221 |
| - validateFormat(refFormat, REF_FORMAT_NUM_SPEC); |
222 |
| - var previously = EidInternal.refFormat; |
223 |
| - EidInternal.refFormat = refFormat; |
224 |
| - return previously; |
225 |
| -}; |
226 |
| - |
227 |
| -/** |
228 |
| - * Sets a format that will be used for all Eid exceptions when printing a detail message. |
229 |
| - * <p> |
230 |
| - * Format must be non-null and contain two format specifiers <tt>"%s"</tt> |
231 |
| - * |
232 |
| - * @param {string} format - a format that will be used, must be non-null and contain two format specifiers <tt>"%s"</tt> |
233 |
| - * @return {string} previously used format |
234 |
| - * @throws {TypeError} if given format hasn't got two format specifiers <tt>"%s"</tt>, or if given format was |
235 |
| - * null |
236 |
| - */ |
237 |
| -Eid.setMessageFormat = function(format) { |
238 |
| - validateFormat(format, MESSAGE_FORMAT_NUM_SPEC); |
239 |
| - var oldFormat = EidInternal.messageFormat; |
240 |
| - EidInternal.messageFormat = format; |
241 |
| - return oldFormat; |
242 |
| -}; |
243 |
| - |
244 |
| -/** |
245 |
| - * Gets actually set message format |
246 |
| - * |
247 |
| - * @return {string} actually setted message format |
248 |
| - */ |
249 |
| -Eid.getMessageFormat = function() { |
250 |
| - return EidInternal.messageFormat; |
251 |
| -}; |
| 20 | +var Eid = require('./eid/eid'); |
| 21 | +Eid.preconditions = require('./eid/preconditions'); |
| 22 | +Eid.exceptions = require('./eid/exceptions'); |
252 | 23 |
|
253 | 24 | module.exports = Eid;
|
254 | 25 |
|
|
0 commit comments