ngx-dsxlibrary 2.21.62 → 2.21.63

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Pipe } from '@angular/core';
2
+ import { Pipe, isDevMode } from '@angular/core';
3
3
 
4
4
  /**
5
5
  * Pipe `joinByPipe`
@@ -114,7 +114,15 @@ class JsonHighlightPipe {
114
114
  });
115
115
  return `{\n${lines.join(',\n')}\n${spaces}}`;
116
116
  }
117
+ instanceId = Math.random().toString(36).slice(2, 8);
118
+ executions = 0;
117
119
  transform(value) {
120
+ if (isDevMode()) {
121
+ this.executions++;
122
+ if (this.executions % 10 === 0) {
123
+ console.log(`[jsonHighlight:${this.instanceId}] ${this.executions}`);
124
+ }
125
+ }
118
126
  if (!value) {
119
127
  return '';
120
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-dsxlibrary-src-lib-pipe.mjs","sources":["../../../projects/ngx-dsx/src/lib/pipe/src/join-by.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/json-highlight.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/truncate.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/ngx-dsxlibrary-src-lib-pipe.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe `joinByPipe`\n *\n * Une los valores de una propiedad de un arreglo de objetos en una sola cadena\n * separado por el `separator` proporcionado.\n *\n * Uso (template):\n * - `items | joinByPipe:'name'` => une la propiedad `name` con `, ` como separador\n * - `items | joinByPipe:'name':'; '` => usa `; ` como separador\n *\n * Ejemplo:\n * const items = [{ name: 'Ana' }, { name: 'Luis' }, { other: 'x' }];\n * // Resultado: 'Ana, Luis'\n *\n * Comportamiento:\n * - Si el arreglo es nulo, indefinido o vacío devuelve `''`.\n * - Si la propiedad no existe en el primer elemento devuelve `''` y registra\n * una advertencia en la consola.\n * - Convierte cada valor a `string`, filtra valores vacíos y los concatena.\n */\n@Pipe({\n name: 'joinBy',\n standalone: true,\n})\nexport class JoinByPipe implements PipeTransform {\n /**\n * Transforma un arreglo de objetos en una cadena unida por `separator` usando\n * la propiedad indicada.\n *\n * @param array - Arreglo de objetos o `null`/`undefined`.\n * @param property - Clave del objeto cuyos valores se van a unir.\n * @param separator - Cadena que separará los valores (por defecto `', '`).\n * @returns Una cadena con los valores unidos o `''` si no hay datos válidos.\n */\n transform<T extends Record<string, any>>(\n array: T[] | null | undefined,\n property: keyof T,\n separator: string = ', ',\n ): string {\n // Si el arreglo está vacío o es nulo/indefinido retornamos cadena vacía\n if (!array?.length) return '';\n\n // Validar que la propiedad exista al menos en el primer elemento\n if (!(property in array[0])) {\n console.warn(\n `JoinByPipe: La propiedad \"${String(property)}\" no existe en el objeto.`,\n );\n return '';\n }\n\n // Convertir valores a string, eliminar vacíos y unir con el separador\n return array\n .map((item) => String(item[property] ?? ''))\n .filter((value) => value.length > 0)\n .join(separator);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'jsonHighlight',\r\n})\r\nexport class JsonHighlightPipe implements PipeTransform {\r\n /**\r\n * Stringifica el JSON manteniendo arrays en una línea para una vista más compacta\r\n */\r\n private compactStringify(obj: any, indent: number = 0): string {\r\n const spaces = ' '.repeat(indent);\r\n\r\n if (obj === null) {\r\n return 'null';\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n if (typeof obj === 'string') {\r\n return JSON.stringify(obj);\r\n }\r\n return String(obj);\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return JSON.stringify(obj.toISOString());\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n // Mantener arrays en una línea\r\n const items = obj.map((item) => {\r\n if (item instanceof Date) {\r\n return JSON.stringify(item.toISOString());\r\n }\r\n if (typeof item === 'object' && item !== null) {\r\n return this.compactStringify(item, indent);\r\n }\r\n return typeof item === 'string'\r\n ? JSON.stringify(item)\r\n : item === null\r\n ? 'null'\r\n : String(item);\r\n });\r\n return `[${items.join(', ')}]`;\r\n }\r\n\r\n // Para objetos, mantener la indentación\r\n const keys = Object.keys(obj);\r\n if (keys.length === 0) {\r\n return '{}';\r\n }\r\n\r\n const innerIndent = indent + 2;\r\n const innerSpaces = ' '.repeat(innerIndent);\r\n const lines = keys.map((key) => {\r\n const value = obj[key];\r\n const stringified =\r\n value instanceof Date\r\n ? JSON.stringify(value.toISOString())\r\n : typeof value === 'object' && value !== null\r\n ? this.compactStringify(value, innerIndent)\r\n : typeof value === 'string'\r\n ? JSON.stringify(value)\r\n : value === null\r\n ? 'null'\r\n : String(value);\r\n return `${innerSpaces}\"${key}\": ${stringified}`;\r\n });\r\n\r\n return `{\\n${lines.join(',\\n')}\\n${spaces}}`;\r\n }\r\n\r\n transform(value: any): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const json = this.compactStringify(value);\r\n // Detecta fechas ISO: \"YYYY-MM-DDTHH:MM:SS.mmmZ\"\r\n const ISO_DATE_RE = /^\"(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)\"$/;\r\n\r\n // Aplica estilo y colores para diferenciar claves, valores, booleanos, números, etc.\r\n return json\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?)/g, (match) => {\r\n // Si es una clave (tiene dos puntos al final)\r\n if (/:$/.test(match)) {\r\n return `<span class=\"json-key\">${match}</span>`;\r\n }\r\n // Detectar fechas ISO (YYYY-MM-DDTHH:MM:SS.mmmZ)\r\n const isoMatch = match.match(ISO_DATE_RE);\r\n if (isoMatch) {\r\n return `<span class=\"json-string json-date\">\"<span class=\"json-date-part\">${isoMatch[1]}</span><span class=\"json-date-sep\">T</span><span class=\"json-date-time\">${isoMatch[2]}</span>\"</span>`;\r\n }\r\n // Si es un string (no tiene dos puntos)\r\n return `<span class=\"json-string\">${match}</span>`;\r\n })\r\n .replace(/\\b(true|false|null)\\b/g, (match) => {\r\n if (match === 'null') {\r\n return '<span class=\"json-null\">null</span>';\r\n }\r\n return `<span class=\"json-boolean\">${match}</span>`;\r\n })\r\n .replace(/\\b(\\d+\\.?\\d*)\\b/g, '<span class=\"json-number\">$1</span>')\r\n .replace(/[{}\\[\\]]/g, '<span class=\"json-bracket\">$&</span>')\r\n .replace(/,/g, '<span class=\"json-comma\">$&</span>')\r\n .replace(/:/g, '<span class=\"json-colon\">$&</span>');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate',\r\n standalone: true,\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n /**\r\n * Transforma una cadena de texto truncándola según los parámetros proporcionados.\r\n *\r\n * @param value - La cadena de texto que se desea truncar.\r\n * @param limit - El número máximo de caracteres permitidos. Por defecto es 100. Si no se encuentra un espacio dentro del límite, usa el límite original (15).\r\n * @param completeWords - Si es true, evita cortar palabras a la mitad. Por defecto es false.\r\n * @param ellipsis - La cadena que se añadirá al final del texto truncado. Por defecto es '...'.\r\n * @returns La cadena truncada con el ellipsis añadido, si es necesario.\r\n */\r\n transform(\r\n value: string,\r\n limit: number = 20,\r\n completeWords: boolean = false,\r\n ellipsis: string = '...'\r\n ): string {\r\n // Si el valor es nulo o indefinido, devuelve una cadena vacía para evitar errores.\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n // Si completeWords es true, ajusta el límite para no cortar palabras.\r\n if (completeWords) {\r\n // Encuentra el último espacio dentro del límite para evitar cortar palabras.\r\n limit = value.slice(0, limit).lastIndexOf(' ');\r\n\r\n // Si no se encuentra un espacio dentro del límite, usa el límite original.\r\n if (limit < 0) {\r\n limit = 15; // Valor por defecto si no hay espacios.\r\n }\r\n }\r\n\r\n // Trunca el texto y añade el ellipsis si la longitud del texto supera el límite.\r\n return value.length > limit ? value.slice(0, limit) + ellipsis : value;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-dsxlibrary-src-lib-pipe.mjs","sources":["../../../projects/ngx-dsx/src/lib/pipe/src/join-by.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/json-highlight.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/truncate.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/ngx-dsxlibrary-src-lib-pipe.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe `joinByPipe`\n *\n * Une los valores de una propiedad de un arreglo de objetos en una sola cadena\n * separado por el `separator` proporcionado.\n *\n * Uso (template):\n * - `items | joinByPipe:'name'` => une la propiedad `name` con `, ` como separador\n * - `items | joinByPipe:'name':'; '` => usa `; ` como separador\n *\n * Ejemplo:\n * const items = [{ name: 'Ana' }, { name: 'Luis' }, { other: 'x' }];\n * // Resultado: 'Ana, Luis'\n *\n * Comportamiento:\n * - Si el arreglo es nulo, indefinido o vacío devuelve `''`.\n * - Si la propiedad no existe en el primer elemento devuelve `''` y registra\n * una advertencia en la consola.\n * - Convierte cada valor a `string`, filtra valores vacíos y los concatena.\n */\n@Pipe({\n name: 'joinBy',\n standalone: true,\n})\nexport class JoinByPipe implements PipeTransform {\n /**\n * Transforma un arreglo de objetos en una cadena unida por `separator` usando\n * la propiedad indicada.\n *\n * @param array - Arreglo de objetos o `null`/`undefined`.\n * @param property - Clave del objeto cuyos valores se van a unir.\n * @param separator - Cadena que separará los valores (por defecto `', '`).\n * @returns Una cadena con los valores unidos o `''` si no hay datos válidos.\n */\n transform<T extends Record<string, any>>(\n array: T[] | null | undefined,\n property: keyof T,\n separator: string = ', ',\n ): string {\n // Si el arreglo está vacío o es nulo/indefinido retornamos cadena vacía\n if (!array?.length) return '';\n\n // Validar que la propiedad exista al menos en el primer elemento\n if (!(property in array[0])) {\n console.warn(\n `JoinByPipe: La propiedad \"${String(property)}\" no existe en el objeto.`,\n );\n return '';\n }\n\n // Convertir valores a string, eliminar vacíos y unir con el separador\n return array\n .map((item) => String(item[property] ?? ''))\n .filter((value) => value.length > 0)\n .join(separator);\n }\n}\n","import { isDevMode, Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'jsonHighlight',\r\n})\r\nexport class JsonHighlightPipe implements PipeTransform {\r\n /**\r\n * Stringifica el JSON manteniendo arrays en una línea para una vista más compacta\r\n */\r\n private compactStringify(obj: any, indent: number = 0): string {\r\n const spaces = ' '.repeat(indent);\r\n\r\n if (obj === null) {\r\n return 'null';\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n if (typeof obj === 'string') {\r\n return JSON.stringify(obj);\r\n }\r\n return String(obj);\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return JSON.stringify(obj.toISOString());\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n // Mantener arrays en una línea\r\n const items = obj.map((item) => {\r\n if (item instanceof Date) {\r\n return JSON.stringify(item.toISOString());\r\n }\r\n if (typeof item === 'object' && item !== null) {\r\n return this.compactStringify(item, indent);\r\n }\r\n return typeof item === 'string'\r\n ? JSON.stringify(item)\r\n : item === null\r\n ? 'null'\r\n : String(item);\r\n });\r\n return `[${items.join(', ')}]`;\r\n }\r\n\r\n // Para objetos, mantener la indentación\r\n const keys = Object.keys(obj);\r\n if (keys.length === 0) {\r\n return '{}';\r\n }\r\n\r\n const innerIndent = indent + 2;\r\n const innerSpaces = ' '.repeat(innerIndent);\r\n const lines = keys.map((key) => {\r\n const value = obj[key];\r\n const stringified =\r\n value instanceof Date\r\n ? JSON.stringify(value.toISOString())\r\n : typeof value === 'object' && value !== null\r\n ? this.compactStringify(value, innerIndent)\r\n : typeof value === 'string'\r\n ? JSON.stringify(value)\r\n : value === null\r\n ? 'null'\r\n : String(value);\r\n return `${innerSpaces}\"${key}\": ${stringified}`;\r\n });\r\n\r\n return `{\\n${lines.join(',\\n')}\\n${spaces}}`;\r\n }\r\n\r\n private readonly instanceId = Math.random().toString(36).slice(2, 8);\r\n private executions = 0;\r\n\r\n transform(value: any): string {\r\n if (isDevMode()) {\r\n this.executions++;\r\n\r\n if (this.executions % 10 === 0) {\r\n console.log(`[jsonHighlight:${this.instanceId}] ${this.executions}`);\r\n }\r\n }\r\n\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const json = this.compactStringify(value);\r\n // Detecta fechas ISO: \"YYYY-MM-DDTHH:MM:SS.mmmZ\"\r\n const ISO_DATE_RE = /^\"(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)\"$/;\r\n\r\n // Aplica estilo y colores para diferenciar claves, valores, booleanos, números, etc.\r\n return json\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?)/g, (match) => {\r\n // Si es una clave (tiene dos puntos al final)\r\n if (/:$/.test(match)) {\r\n return `<span class=\"json-key\">${match}</span>`;\r\n }\r\n // Detectar fechas ISO (YYYY-MM-DDTHH:MM:SS.mmmZ)\r\n const isoMatch = match.match(ISO_DATE_RE);\r\n if (isoMatch) {\r\n return `<span class=\"json-string json-date\">\"<span class=\"json-date-part\">${isoMatch[1]}</span><span class=\"json-date-sep\">T</span><span class=\"json-date-time\">${isoMatch[2]}</span>\"</span>`;\r\n }\r\n // Si es un string (no tiene dos puntos)\r\n return `<span class=\"json-string\">${match}</span>`;\r\n })\r\n .replace(/\\b(true|false|null)\\b/g, (match) => {\r\n if (match === 'null') {\r\n return '<span class=\"json-null\">null</span>';\r\n }\r\n return `<span class=\"json-boolean\">${match}</span>`;\r\n })\r\n .replace(/\\b(\\d+\\.?\\d*)\\b/g, '<span class=\"json-number\">$1</span>')\r\n .replace(/[{}\\[\\]]/g, '<span class=\"json-bracket\">$&</span>')\r\n .replace(/,/g, '<span class=\"json-comma\">$&</span>')\r\n .replace(/:/g, '<span class=\"json-colon\">$&</span>');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate',\r\n standalone: true,\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n /**\r\n * Transforma una cadena de texto truncándola según los parámetros proporcionados.\r\n *\r\n * @param value - La cadena de texto que se desea truncar.\r\n * @param limit - El número máximo de caracteres permitidos. Por defecto es 100. Si no se encuentra un espacio dentro del límite, usa el límite original (15).\r\n * @param completeWords - Si es true, evita cortar palabras a la mitad. Por defecto es false.\r\n * @param ellipsis - La cadena que se añadirá al final del texto truncado. Por defecto es '...'.\r\n * @returns La cadena truncada con el ellipsis añadido, si es necesario.\r\n */\r\n transform(\r\n value: string,\r\n limit: number = 20,\r\n completeWords: boolean = false,\r\n ellipsis: string = '...'\r\n ): string {\r\n // Si el valor es nulo o indefinido, devuelve una cadena vacía para evitar errores.\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n // Si completeWords es true, ajusta el límite para no cortar palabras.\r\n if (completeWords) {\r\n // Encuentra el último espacio dentro del límite para evitar cortar palabras.\r\n limit = value.slice(0, limit).lastIndexOf(' ');\r\n\r\n // Si no se encuentra un espacio dentro del límite, usa el límite original.\r\n if (limit < 0) {\r\n limit = 15; // Valor por defecto si no hay espacios.\r\n }\r\n }\r\n\r\n // Trunca el texto y añade el ellipsis si la longitud del texto supera el límite.\r\n return value.length > limit ? value.slice(0, limit) + ellipsis : value;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}