@biblioteksentralen/marc 0.3.0 → 0.4.0

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/README.md CHANGED
@@ -103,5 +103,6 @@ const result = validate(record.toJSON());
103
103
 
104
104
  ## Changelog
105
105
 
106
+ - 0.4.0: Line MARC serialization: Remove linebreaks and trim surrounding whitespace
106
107
  - 0.3.0: Upgrade to Zod 4
107
108
  - 0.2.0: Removed the logger argument from `MarcRecord.fromJSON()`.
package/dist/index.cjs CHANGED
@@ -247,14 +247,18 @@ function serializeMarcXmlCollection(input, pretty = false) {
247
247
  }
248
248
 
249
249
  // src/marc-record/serializeLineMarc.ts
250
- function serializeLineMarc(input) {
250
+ var BIBLIOFIL_DOLLAR_ESCAPE_CHARACTER = "@{2}";
251
+ function serializeLineMarc(input, options = {}) {
252
+ const serializer = createDefaultSerializer({
253
+ dollarEscapeCharacter: options.dollarEscapeCharacter ?? BIBLIOFIL_DOLLAR_ESCAPE_CHARACTER
254
+ });
251
255
  const leader = serializer.leader(input.leader);
252
256
  const control = input.getControlFields().map(serializer.controlfield).join("");
253
257
  const data = input.getDataFields().map(serializer.datafield).join("");
254
258
  return `${leader}${control}${data}^
255
259
  `;
256
260
  }
257
- var serializer = {
261
+ var createDefaultSerializer = (options) => ({
258
262
  leader: (leader) => `*LDR${leader}
259
263
  `,
260
264
  controlfield: (field) => `*${field.tag}${field.value}
@@ -263,14 +267,14 @@ var serializer = {
263
267
  const ind1 = field.ind1 ?? " ";
264
268
  const ind2 = field.ind2 ?? " ";
265
269
  const subfields = field.subfields.map(
266
- (subfield) => `$${subfield.code}${escapeSubfieldValue(subfield.value)}`
270
+ (subfield) => `$${subfield.code}${escapeSubfieldValue(subfield.value, options)}`
267
271
  ).join("");
268
272
  return `*${field.tag}${ind1}${ind2}${subfields}
269
273
  `;
270
274
  }
271
- };
272
- var escapeSubfieldValue = (value) => {
273
- return value.replace(/\n/g, " ").replace(/\$/g, "@{2}");
275
+ });
276
+ var escapeSubfieldValue = (value, options) => {
277
+ return value.replace(/[\n|\r]/g, " ").replace(/\s\s+/g, " ").replace(/\$/g, options.dollarEscapeCharacter).trim();
274
278
  };
275
279
 
276
280
  // src/marc-record/MarcRecord.ts
package/dist/index.d.cts CHANGED
@@ -153,7 +153,14 @@ declare const marcRecordZodSchema: z.ZodObject<{
153
153
  }, z.core.$strip>]>>;
154
154
  }, z.core.$strip>;
155
155
 
156
- declare function serializeLineMarc(input: MarcRecord): string;
156
+ type SerializeLineMarcOptions = {
157
+ /**
158
+ * Replacement character to use for $ characters in field values.
159
+ * Defaults to `@{2}`
160
+ */
161
+ dollarEscapeCharacter: string;
162
+ };
163
+ declare function serializeLineMarc(input: MarcRecord, options?: Partial<SerializeLineMarcOptions>): string;
157
164
 
158
165
  declare function serializeMarcXml(input: MarcRecord, pretty?: boolean): string;
159
166
  declare function serializeMarcXmlCollection(input: MarcRecord[], pretty?: boolean): string;
package/dist/index.d.ts CHANGED
@@ -153,7 +153,14 @@ declare const marcRecordZodSchema: z.ZodObject<{
153
153
  }, z.core.$strip>]>>;
154
154
  }, z.core.$strip>;
155
155
 
156
- declare function serializeLineMarc(input: MarcRecord): string;
156
+ type SerializeLineMarcOptions = {
157
+ /**
158
+ * Replacement character to use for $ characters in field values.
159
+ * Defaults to `@{2}`
160
+ */
161
+ dollarEscapeCharacter: string;
162
+ };
163
+ declare function serializeLineMarc(input: MarcRecord, options?: Partial<SerializeLineMarcOptions>): string;
157
164
 
158
165
  declare function serializeMarcXml(input: MarcRecord, pretty?: boolean): string;
159
166
  declare function serializeMarcXmlCollection(input: MarcRecord[], pretty?: boolean): string;
package/dist/index.js CHANGED
@@ -245,14 +245,18 @@ function serializeMarcXmlCollection(input, pretty = false) {
245
245
  }
246
246
 
247
247
  // src/marc-record/serializeLineMarc.ts
248
- function serializeLineMarc(input) {
248
+ var BIBLIOFIL_DOLLAR_ESCAPE_CHARACTER = "@{2}";
249
+ function serializeLineMarc(input, options = {}) {
250
+ const serializer = createDefaultSerializer({
251
+ dollarEscapeCharacter: options.dollarEscapeCharacter ?? BIBLIOFIL_DOLLAR_ESCAPE_CHARACTER
252
+ });
249
253
  const leader = serializer.leader(input.leader);
250
254
  const control = input.getControlFields().map(serializer.controlfield).join("");
251
255
  const data = input.getDataFields().map(serializer.datafield).join("");
252
256
  return `${leader}${control}${data}^
253
257
  `;
254
258
  }
255
- var serializer = {
259
+ var createDefaultSerializer = (options) => ({
256
260
  leader: (leader) => `*LDR${leader}
257
261
  `,
258
262
  controlfield: (field) => `*${field.tag}${field.value}
@@ -261,14 +265,14 @@ var serializer = {
261
265
  const ind1 = field.ind1 ?? " ";
262
266
  const ind2 = field.ind2 ?? " ";
263
267
  const subfields = field.subfields.map(
264
- (subfield) => `$${subfield.code}${escapeSubfieldValue(subfield.value)}`
268
+ (subfield) => `$${subfield.code}${escapeSubfieldValue(subfield.value, options)}`
265
269
  ).join("");
266
270
  return `*${field.tag}${ind1}${ind2}${subfields}
267
271
  `;
268
272
  }
269
- };
270
- var escapeSubfieldValue = (value) => {
271
- return value.replace(/\n/g, " ").replace(/\$/g, "@{2}");
273
+ });
274
+ var escapeSubfieldValue = (value, options) => {
275
+ return value.replace(/[\n|\r]/g, " ").replace(/\s\s+/g, " ").replace(/\$/g, options.dollarEscapeCharacter).trim();
272
276
  };
273
277
 
274
278
  // src/marc-record/MarcRecord.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@biblioteksentralen/marc",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "MARC record parser and serializer",
@@ -32,7 +32,7 @@
32
32
  "devDependencies": {
33
33
  "@arethetypeswrong/cli": "^0.15.4",
34
34
  "@types/json-schema": "^7.0.15",
35
- "@types/node": "^22.15.3",
35
+ "@types/node": "^24.11.0",
36
36
  "eslint": "^9.26.0",
37
37
  "rimraf": "^5.0.5",
38
38
  "tsup": "^8.0.2",