JSON ↔ YAML ಪರಿವರ್ತನೆ ಎಂದರೇನು?
JSON (JavaScript Object Notation, RFC 8259) ರಚನಾತ್ಮಕ ಡೇಟಾಗಾಗಿ ಒಂದು ಕಟ್ಟುನಿಟ್ಟಾದ, ಗ್ರೇಷಾ-ಸೀಮಿತ ಪಠ್ಯ ಫಾರ್ಮ್ಯಾಟ್ ಆಗಿದೆ; YAML (YAML Ain't Markup Language, ಆವೃತ್ತಿ 1.2) JSON ನ ಒಂದು superset ಆಗಿದ್ದು, ಅದೇ ಮೌಲ್ಯ ಮಾದರಿಗಾಗಿ indentation, ಸಾಲು ವಿರಾಮಗಳು ಮತ್ತು ಮಾನವ-ಓದಬಲ್ಲ ವಾಕ್ಯರಚನೆಯನ್ನು ಬಳಸುತ್ತದೆ. ಅವುಗಳ ನಡುವೆ ಪರಿವರ್ತಿಸುವುದರಿಂದ ಒಂದೇ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಯಂತ್ರ-ಸ್ನೇಹಿ ರೂಪ (APIs, schema validation, ಪ್ರೋಗ್ರಾಮ್ಯಾಟಿಕ್ ಪರಿವರ್ತನೆಗಳಿಗಾಗಿ JSON) ಮತ್ತು ಮಾನವ-ಸ್ನೇಹಿ ರೂಪ (code review, Kubernetes manifests, GitHub Actions workflows ಗಾಗಿ YAML) ನಡುವೆ ಒಂದೇ ಒಂದು ಕೀ ಮರು-ಟೈಪ್ ಮಾಡದೆ pivot ಮಾಡಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
JSON ↔ YAML ಪರಿವರ್ತನೆ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ?
ಪ್ರತಿ ಪರಿವರ್ತನೆ ಅಳವಡಿಸಿದ js-yaml ಗ್ರಂಥಾಲಯ (MIT, ಆವೃತ್ತಿ 4.1.0) ಬಳಸಿ ನಿಮ್ಮ ಬ್ರೌಸರ್ನಲ್ಲಿ ಸ್ಥಳೀಯವಾಗಿ ನಡೆಯುತ್ತದೆ. ಉನ್ನತ-ಮಟ್ಟದ ಹಂತಗಳು:
- ವಿಧಾನ ಆಯ್ಕೆಕಾರ (ಸ್ವಯಂ-ಪತ್ತೆ / JSON → YAML / YAML → JSON) ಯಾವ ಪೈಪ್ಲೈನ್ ನಡೆಯಬೇಕು ಎಂದು ನಿರ್ಧರಿಸುತ್ತದೆ. ಸ್ವಯಂ-ಪತ್ತೆ ವಿಧಾನದಲ್ಲಿ ಇನ್ಪುಟ್ನ ಮೊದಲ ಖಾಲಿ ಜಾಗ-ರಹಿತ ಅಕ್ಷರ ದಿಕ್ಕು ಆಯ್ಕೆ ಮಾಡುತ್ತದೆ —
{ಅಥವಾ[JSON ಅರ್ಥ; ಬೇರೆ ಏನಾದರೂ YAML ಅರ್ಥ. - JSON → YAML:
JSON.parseಇನ್ಪುಟ್ ಅನ್ನು ಮಾನ್ಯಗೊಳಿಸಿ ಒಂದು JavaScript ಮೌಲ್ಯ ಉತ್ಪಾದಿಸುತ್ತದೆ;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })YAML 1.2 ರೂಪ ಬರೆಯುತ್ತದೆ. ಬಹು-ದಾಖಲೆ ಚಾಲು ಇದ್ದಾಗ, ಇನ್ಪುಟ್ ಜಾಲವನ್ನು ಪ್ರತಿ ಅಂಶ ಒಂದು ದಾಖಲೆಯಾಗಿ ತ್ಯಜಿಸಿ---ವಿಭಾಜಕಗಳ ಸಮೇತ ಜೋಡಿಸಲಾಗುತ್ತದೆ. - YAML → JSON:
jsyaml.loadAllಇನ್ಪುಟ್ನಲ್ಲಿರುವ ಪ್ರತಿ ದಾಖಲೆ ವಿಶ್ಲೇಷಿಸಿ (---ವಿಭಾಜಕಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ) ಒಂದು ಜಾಲ ಮಾಡುತ್ತದೆ; ಏಕ-ದಾಖಲೆ ಇನ್ಪುಟ್ಗಳನ್ನು ತೆರೆಯಲಾಗುತ್ತದೆ ಆದ್ದರಿಂದ JSON ಔಟ್ಪುಟ್ ಒಂದೇ-ಅಂಶ ಜಾಲ ಆಗದೆ ದಾಖಲೆ ಸ್ವತಃ ಆಗಿರುತ್ತದೆ. - ಅಂತರ (2 ಅಥವಾ 4 ಖಾಲಿ ಜಾಗ) ಮತ್ತು ಸುಂದರ ಮುದ್ರಣ ಸಂರಚನೆ ಮಾಡಬಹುದಾಗಿದೆ. ಸುಂದರ ಮುದ್ರಣ ಆಫ್ ಮಾಡಿದಾಗ
JSON.stringify(value)ಖಾಲಿ ಜಾಗವಿಲ್ಲದ ಮಿನಿಫೈ ಮಾಡಿದ JSON ಹೊರಸೂಸುತ್ತದೆ. - ಔಟ್ಪುಟ್ ಓದು-ಮಾತ್ರ ಪಠ್ಯ ಪ್ರದೇಶಕ್ಕೆ ಬರೆಯಲ್ಪಡುತ್ತದೆ. YAML ವಿಶ್ಲೇಷಣ ವಿಫಲವಾದಾಗ, ದೋಷ ಸಂದೇಶ
js-yamlನe.markವರದಿ ಮಾಡಿದ 1-ಆಧಾರಿತ ಸಾಲು ಮತ್ತು ಕಾಲಮ್ ಸೇರಿಸುತ್ತದೆ, ಇದರಿಂದ ನೀವು ನೇರ ದೋಷಕ್ಕೆ ಹೋಗಬಹುದು.
ಈ ಟೂಲ್ನಿಂದ JSON ಮತ್ತು YAML ಪರಿವರ್ತಿಸುವ ಕಾರಣ?
- ಗೌಪ್ಯತೆ: ಪ್ರತಿ ವಿಶ್ಲೇಷಣ, ರೂಪಾಂತರ ಮತ್ತು ಹೊರಸೂಸುವಿಕೆ ಹಂತ ನಿಮ್ಮ ಬ್ರೌಸರ್ನಲ್ಲಿ ನಡೆಯುತ್ತದೆ. Kubernetes ರಹಸ್ಯಗಳು, ಸಹಿ ಮಾಡಿದ JWT ಗಳು ಮತ್ತು ಸ್ವಾಮ್ಯದ ಸಂರಚನೆಗಳು ಸೇರಿದ ಮಾಹಿತಿ ನಮ್ಮ ಸರ್ವರ್ಗಳನ್ನು ಎಂದಿಗೂ ತಲುಪುವುದಿಲ್ಲ.
- ಬಹು-ದಾಖಲೆ YAML:
jsyaml.loadAll---ವಿಭಾಜಕಗಳನ್ನು ಗುರುತಿಸಿ ದಾಖಲೆಗಳ ಜಾಲ ಮರಳಿಸುತ್ತದೆ, ಇದನ್ನು ಪರಿವರ್ತಕ ಏಕ-ದಾಖಲೆ ಸಂದರ್ಭಗಳಲ್ಲಿ ತೆರೆಯುತ್ತದೆ ಅಥವಾ ಬಹು-ದಾಖಲೆ ಸಂದರ್ಭಗಳಲ್ಲಿ JSON ಜಾಲವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ. - ಲಂಗರು ಮತ್ತು ಉಪನಾಮಗಳು ಪರಿಹರಿಸಲ್ಪಡುತ್ತವೆ: YAML ನ
&anchor/*aliasಕಾರ್ಯ ವಿಧಾನವನ್ನುjs-yamlನ ಪೂರ್ವನಿಯೋಜಿತ ಯೋಜನೆ ನಿರ್ವಹಿಸುತ್ತದೆ. ಒಮ್ಮೆ ವ್ಯಾಖ್ಯಾನಿಸಿ ಎರಡು ಬಾರಿ ಉಲ್ಲೇಖಿಸಿದ ಮೌಲ್ಯ, ಎಲ್ಲ ಉಲ್ಲೇಖಗಳು ಸಮಾನ ಮೌಲ್ಯಗಳನ್ನು ಹೊಂದಿರುವ JSON ವಸ್ತುಗೆ ಮೂಲ ಸ್ಥಿತಿಗೆ ಮರಳಿ ಹೋಗುತ್ತದೆ. - CDN ಇಲ್ಲ, ದತ್ತ ಸಂಗ್ರಹ ಇಲ್ಲ:
js-yaml.min.jsಗ್ರಂಥಾಲಯ ಪುಟದಂತೆ ಅದೇ ಮೂಲದಿಂದ ಕಳಿಸಲ್ಪಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಉಪಕರಣ ಅಂತರ್ಜಾಲ ಸಂಪರ್ಕವಿಲ್ಲದೆ, ಕಂಪನಿ ಪ್ರಾಕ್ಸಿ ಹಿಂದೆ ಮತ್ತು ಗಾಳಿ-ಅಡಚಣೆ ಪರಿಸರಗಳಲ್ಲಿ ಕಾರ್ಯ ನಿರ್ವಹಿಸುತ್ತದೆ.
JSON ↔ YAML ಪರಿವರ್ತನೆಯ ಸಾಮಾನ್ಯ ಅನ್ವಯಗಳು ಯಾವುವು?
DevOps, ವೇದಿಕಾ ಎಂಜಿನಿಯರಿಂಗ್ ಮತ್ತು API ಉಪಕರಣ ನಿರ್ಮಾಣದಾದ್ಯಂತ JSON ಮತ್ತು YAML ನಡುವೆ ಬದಲಾಯಿಸುವ ಅವಶ್ಯಕತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ:
- Kubernetes ಪ್ರಕಟ ಕಡತಗಳು: YAML
Deployment,ConfigMap, ಅಥವಾHelmReleaseಅನ್ನು JSON ಗೆ ಪರಿವರ್ತಿಸಿ ಒಂದು ಆಂತರಿಕ ನೀತಿ ಮಾನ್ಯೀಕರಣಕಾರ (Joi, Ajv, OPA Rego) ಪ್ರೋಗ್ರಾಂ ಮೂಲಕ ಪರಿಶೀಲಿಸಲು ಅನುವು ಮಾಡಿ, ನಂತರ ಸಮೂಹ ಅನ್ವಯಕ್ಕಾಗಿ YAML ಗೆ ಮರಳಿ ಪರಿವರ್ತಿಸಿ. - CI/CD ಕಾರ್ಯಪ್ರವಾಹಗಳು: GitHub Actions
workflow.ymlಅನ್ನು JSON ಮೂಲಕ ಮೂಲ ಸ್ಥಿತಿಗೆ ಮರಳಿಸಿ ಒಂದು ಕೋಡ್-ಜನರೇಟರ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅಥವಾ ಕೆಲಸ ಅವಲಂಬನೆಗಳನ್ನು ಮರುಬರೆಯಲು ಸಾಧ್ಯವಾಗಿಸಿ, ನಂತರ PR ಗಾಗಿ ಸ್ವಚ್ಛ YAML ಹೊರಸೂಸಿ. - OpenAPI ವಿಶೇಷಣಗಳು: ಬ್ಯಾಕೆಂಡ್ನ ಸ್ವಯಂ-ಉತ್ಪಾದಿತ ದಾಖಲೆಯಿಂದ JSON
openapi.jsonಅಂಟಿಸಿ ಭಂಡಾರಕ್ಕೆ ಸೇರಿಸಲಾದ ಮಾನವ-ಸಂಪಾದಿತ ಉಲ್ಲೇಖಕ್ಕಾಗಿopenapi.yamlಗೆ ಪರಿವರ್ತಿಸಿ.
JSON ↔ YAML round-trip ಉದಾಹರಣೆ ಹೇಗೆ ಕಾಣುತ್ತದೆ?
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} ಅಂಟಿಸಿ JSON → YAML ವಿಧಾನದಲ್ಲಿ ಪರಿವರ್ತಿಸಿ ಒತ್ತಿದರೆ ಮೊದಲ ಸಾಲಿನಲ್ಲಿ apiVersion: apps/v1 ಇರುವ ಎಂಟು ಸಾಲುಗಳ ಅಂತರ ನೀಡಿದ YAML ತಯಾರಿಸಲ್ಪಡುತ್ತದೆ. ಆ YAML ಅನ್ನು YAML → JSON ವಿಧಾನದಲ್ಲಿ ಸುಂದರ ಮುದ್ರಣ ಚಾಲು ಮಾಡಿ ಮರಳಿ ಹಾಕಿದರೆ, JSON.stringify(value, null, 2) ಮೂಲಕ ಸ್ಥಿರ ರೀತಿಯಲ್ಲಿ ಮೂಲ ವಸ್ತು ಬೈಟ್-ಮೇಲೆ-ಬೈಟ್ ಮರಳಿಸಲ್ಪಡುತ್ತದೆ, ಮತ್ತು ಕೀ ಕ್ರಮ ಉಳಿಯುತ್ತದೆ ಏಕೆಂದರೆ js-yaml ನ ಪೂರ್ವನಿಯೋಜಿತ ಯೋಜನೆ ಎರಡೂ ದಿಕ್ಕಿನಲ್ಲಿ ಸೇರ್ಪಡೆ ಕ್ರಮ ಗೌರವಿಸುತ್ತದೆ.
ಈ JSON ↔ YAML ಪರಿವರ್ತಕ ಸಂಪೂರ್ಣವಾಗಿ ನನ್ನ ಬ್ರೌಸರ್ನಲ್ಲಿ ನಡೆಯುತ್ತದೆಯೇ?
ಹೌದು. ಪ್ರತಿ ವಿಶ್ಲೇಷಣ, ರೂಪಾಂತರ ಮತ್ತು ಹೊರಸೂಸುವಿಕೆ ಹಂತ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಟ್ಯಾಬ್ನಲ್ಲಿ JavaScript ಆಗಿ ಸ್ಥಳೀಯವಾಗಿ ನಡೆಯುತ್ತದೆ. ಅಳವಡಿಸಿದ js-yaml ಗ್ರಂಥಾಲಯ ಪುಟದಂತೆ ಅದೇ ಮೂಲದಿಂದ ಕಳಿಸಲ್ಪಡುತ್ತದೆ — CDN ಇಲ್ಲ, fetch ಇಲ್ಲ, XMLHttpRequest ಇಲ್ಲ, ಇನ್ಪುಟ್ ಮೇಲೆ navigator.sendBeacon ಇಲ್ಲ. Kubernetes ರಹಸ್ಯಗಳು, JWT ಮೊತ್ತಗಳು, ಸಹಿ ಮಾಡಿದ CloudFormation YAML ಗಳು ಮತ್ತು ಸ್ವಾಮ್ಯದ ಸಂರಚನೆಗಳು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಉಳಿಯುತ್ತವೆ.
ಪರಿವರ್ತಕ multi-document YAML ಹೇಗೆ handle ಮಾಡುತ್ತದೆ?
YAML ಒಂದು ಪ್ರವಾಹದಲ್ಲಿ ಕೇವಲ --- ಮಾತ್ರ ಇರುವ ಸಾಲುಗಳಿಂದ ಬೇರ್ಪಡಿಸಿದ ಅನೇಕ ದಾಖಲೆಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. YAML → JSON ನಲ್ಲಿ ಪರಿವರ್ತಕ jsyaml.loadAll ಕರೆಯುತ್ತದೆ, ಇದು ಪ್ರತಿ ದಾಖಲೆಯನ್ನು JavaScript ಮೌಲ್ಯವಾಗಿ ಮರಳಿಸುತ್ತದೆ. ಒಂದೇ ದಾಖಲೆ ಕಂಡರೆ JSON ಔಟ್ಪುಟ್ ಅದೇ ದಾಖಲೆ; ಎರಡು ಅಥವಾ ಹೆಚ್ಚಿದ್ದರೆ JSON ಔಟ್ಪುಟ್ ಒಂದು ಜಾಲ. JSON → YAML ನಲ್ಲಿ, ಇನ್ಪುಟ್ JSON ಜಾಲ ಆಗಿದ್ದು ಬಹು-ದಾಖಲೆ ಟಾಗಲ್ ಚಾಲು ಆದಾಗ, ಪ್ರತಿ ಜಾಲ ಅಂಶ ತನ್ನದೇ ದಾಖಲೆಯಾಗಿ --- ವಿಭಾಜಕಗಳ ಸಮೇತ ಹೊರಸೂಸಲ್ಪಡುತ್ತದೆ — JSON ಸಂಪನ್ಮೂಲ ಜಾಲದಿಂದ kubectl apply-ಸ್ನೇಹಿ ಬಂಡಲ್ ತಯಾರಿಸಲು ಉಪಯುಕ್ತ.
YAML anchors ಮತ್ತು aliases support ಮಾಡಲ್ಪಡುತ್ತವೆಯೇ?
ಹೌದು — ಲೋಡ್ ಹಂತದಲ್ಲಿ &anchor ವ್ಯಾಖ್ಯಾನಗಳು ಮತ್ತು *alias ಉಲ್ಲೇಖಗಳನ್ನು js-yaml ನ ಪೂರ್ವನಿಯೋಜಿತ ಯೋಜನೆ ಪರಿಹರಿಸುತ್ತದೆ. defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d ನಂತಹ YAML ಇನ್ಪುಟ್, job_a ಮತ್ತು job_b ಎರಡೂ retries: 3, timeout: 30 ಒಳಗೊಂಡ JSON ವಸ್ತುಗೆ ವಿಶ್ಲೇಷಿಸಲ್ಪಡುತ್ತದೆ. ವಿಲೀನ ಕೀ << (YAML 1.1 ವಿಸ್ತರಣೆ ಇದನ್ನು js-yaml ಪೂರ್ವನಿಯೋಜಿತ ಯೋಜನೆ ಇನ್ನೂ ಗೌರವಿಸುತ್ತದೆ) ಕೂಡ ಬೆಂಬಲಿಸಲ್ಪಡುತ್ತದೆ.
JSON ಗೆ ಪರಿವರ್ತಿಸಿ ಮತ್ತೆ ಹಿಂದಿರುಗುವಾಗ YAML ಕಾಮೆಂಟ್ಗಳು ಉಳಿಯುತ್ತವೆಯೇ?
ಇಲ್ಲ — js-yaml ವಿಶ್ಲೇಷಣ ಹಂತದಲ್ಲಿ ಟಿಪ್ಪಣಿಗಳನ್ನು ತೆಗೆಯುತ್ತದೆ, ಆದ್ದರಿಂದ YAML → JSON → YAML ಮೂಲ ಸ್ಥಿತಿಗೆ ಮರಳಿಸಿದಾಗ ಎಲ್ಲ #-ಮೊದಲ ಸಾಲುಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ. ಇದು ಲೋಡ್/ಡಂಪ್ ಮಾದರಿಯ ಒಂದು ತಿಳಿದ ಮಿತಿ; ಟಿಪ್ಪಣಿ ಸಂರಕ್ಷಣೆ ಅತ್ಯಗತ್ಯವಾಗಿದ್ದರೆ, ಟ್ರಿವಿಯಾ ಉಳಿಸಲು ವಿನ್ಯಾಸಗೊಂಡ CST + AST API ಹೊಂದಿರುವ yaml npm ಪ್ಯಾಕೇಜ್ನಂತಹ ಟಿಪ್ಪಣಿ-ಅರಿಯುವ ಗ್ರಂಥಾಲಯ ಬಳಸಿ, js-yaml ಅಲ್ಲ. ಹೆಚ್ಚಿನ ಸಂರಚನಾ-ಪರಿವರ್ತನ ಕಾರ್ಯಪ್ರವಾಹಗಳಿಗೆ ಸಮಾಧಾನ ಒಪ್ಪಿತ: ಮೂಲ ಸ್ಥಿತಿಗೆ ಮರಳಿಸಿದ YAML ಪ್ರತಿ ಕೀ, ಮೌಲ್ಯ, ಲಂಗರು ಮತ್ತು ಉಪನಾಮ ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ, ಕೇವಲ ಮಾನವ-ರಚಿತ ಟಿಪ್ಪಣಿಗಳಿಲ್ಲದೆ.
Custom YAML tags ಗೆ ಏನಾಗುತ್ತದೆ?
ಪರಿವರ್ತಕ js-yaml ನ DEFAULT_SCHEMA ಬಳಸುತ್ತದೆ, ಇದು !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary, ಮತ್ತು !!timestamp — YAML 1.2 ಮೂಲ ಮತ್ತು JSON ಯೋಜನೆಗಳ ಪ್ರತಿ ಟ್ಯಾಗ್ — ಅರ್ಥಮಾಡಿಕೊಳ್ಳುತ್ತದೆ. ಕಸ್ಟಮ್ ಅಥವಾ ಅನ್ವಯ-ನಿರ್ದಿಷ್ಟ ಟ್ಯಾಗ್ಗಳು (ಉದಾ. CloudFormation ನಲ್ಲಿ !Ref, Ansible ನಲ್ಲಿ !vault) ಗುರುತಿಸಲ್ಪಡುವುದಿಲ್ಲ ಮತ್ತು ಬೆಂಬಲಿಸದ ಟ್ಯಾಗ್ ಉಲ್ಲೇಖಿಸುವ ಸ್ಪಷ್ಟ ದೋಷ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. CloudFormation ಗಾಗಿ ನಿರ್ದಿಷ್ಟವಾಗಿ, ಕಸ್ಟಮ್ ಟ್ಯಾಗ್ಗಳನ್ನು ವಿಸ್ತರಿಸಲು ಈ ಪರಿವರ್ತಕಕ್ಕೆ ಅಂಟಿಸುವ ಮೊದಲು aws cloudformation package + --output-template-file ಪ್ರವಾಹ ಬಳಸಿ.
ಈ JSON ↔ YAML ಪರಿವರ್ತಕ ಒಂದೇ ಮೂಲದಲ್ಲಿ ಅಳವಡಿಸಿದ js-yaml@4.1.0 ಸಮೇತ ಕಳಿಸಲ್ಪಡುತ್ತದೆ, ಬಹು-ದಾಖಲೆ ಪ್ರವಾಹಗಳು ಮತ್ತು ಲಂಗರು/ಉಪನಾಮಗಳನ್ನು ತಕ್ಷಣ ಬೆಂಬಲಿಸುತ್ತದೆ, ಮತ್ತು YAML ವಿಶ್ಲೇಷಣ ದೋಷಗಳನ್ನು ಸಾಲು ಮತ್ತು ಕಾಲಮ್ ಸಮೇತ ವರದಿ ಮಾಡುತ್ತದೆ. ಅಪ್ಲೋಡ್ ಇಲ್ಲ, CDN ಇಲ್ಲ, ದತ್ತ ಸಂಗ್ರಹ ಇಲ್ಲ — ಪ್ರತಿ ಬೈಟ್ ನಿಮ್ಮ ಬ್ರೌಸರ್ನಲ್ಲಿ ಉಳಿಯುತ್ತದೆ.