@prairielearn/sanitize 2.0.13 → 2.0.15

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @prairielearn/sanitize
2
2
 
3
+ ## 2.0.15
4
+
5
+ ### Patch Changes
6
+
7
+ - be4444e: Upgrade all JavaScript dependencies
8
+
9
+ ## 2.0.14
10
+
11
+ ### Patch Changes
12
+
13
+ - cec09b5: Upgrade all JavaScript dependencies
14
+
3
15
  ## 2.0.13
4
16
 
5
17
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import { assert } from 'chai';
1
+ import { assert, describe, it } from 'vitest';
2
2
  import { recursivelyTruncateStrings, sanitizeObject } from './index.js';
3
3
  describe('sanitizeObject', () => {
4
4
  it('sanitizes an empty object', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from 'chai';\n\nimport { recursivelyTruncateStrings, sanitizeObject } from './index.js';\n\ndescribe('sanitizeObject', () => {\n it('sanitizes an empty object', () => {\n const input = {};\n const expected = {};\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in top-level string', () => {\n const input = { test: 'test\\u0000ing' };\n const expected = { test: 'test\\\\u0000ing' };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles multiple null bytes in top-level string', () => {\n const input = { test: 'test\\u0000ing\\u0000' };\n const expected = { test: 'test\\\\u0000ing\\\\u0000' };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in nested string', () => {\n const input = {\n test: {\n nestedTest: 'test\\u0000ing',\n },\n };\n const expected = {\n test: {\n nestedTest: 'test\\\\u0000ing',\n },\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in top-level array', () => {\n const input = {\n test: ['testing', 'test\\u0000ing'],\n };\n const expected = {\n test: ['testing', 'test\\\\u0000ing'],\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in nested array', () => {\n const input = {\n test: {\n test2: ['testing', 'test\\u0000ing'],\n },\n };\n const expected = {\n test: {\n test2: ['testing', 'test\\\\u0000ing'],\n },\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles numbers correctly', () => {\n const input = {\n test: 'test\\u0000ing',\n a: 1,\n b: 2.45,\n };\n const expected = {\n test: 'test\\\\u0000ing',\n a: 1,\n b: 2.45,\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null values correctly', () => {\n const input = {\n test: 'test\\u0000ing',\n a: null,\n };\n const expected = {\n test: 'test\\\\u0000ing',\n a: null,\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n});\n\ndescribe('recursivelyTruncateStrings', () => {\n it('handles empty object', () => {\n assert.deepEqual(recursivelyTruncateStrings({}, 10), {});\n });\n\n it('handles null and undefined', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: null }, 10), { test: null });\n assert.deepEqual(recursivelyTruncateStrings({ test: undefined }, 10), { test: undefined });\n });\n\n it('handles legal string', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: 'test' }, 10), { test: 'test' });\n });\n\n it('handles long string', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: 'testtest' }, 4), {\n test: 'test...[truncated]',\n });\n });\n\n it('handles long string in array', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: ['testtest'] }, 4), {\n test: ['test...[truncated]'],\n });\n });\n\n it('handles long string in object in array', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: [{ test: 'testtest' }] }, 4), {\n test: [{ test: 'test...[truncated]' }],\n });\n });\n});\n"]}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, describe, it } from 'vitest';\n\nimport { recursivelyTruncateStrings, sanitizeObject } from './index.js';\n\ndescribe('sanitizeObject', () => {\n it('sanitizes an empty object', () => {\n const input = {};\n const expected = {};\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in top-level string', () => {\n const input = { test: 'test\\u0000ing' };\n const expected = { test: 'test\\\\u0000ing' };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles multiple null bytes in top-level string', () => {\n const input = { test: 'test\\u0000ing\\u0000' };\n const expected = { test: 'test\\\\u0000ing\\\\u0000' };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in nested string', () => {\n const input = {\n test: {\n nestedTest: 'test\\u0000ing',\n },\n };\n const expected = {\n test: {\n nestedTest: 'test\\\\u0000ing',\n },\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in top-level array', () => {\n const input = {\n test: ['testing', 'test\\u0000ing'],\n };\n const expected = {\n test: ['testing', 'test\\\\u0000ing'],\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null byte in nested array', () => {\n const input = {\n test: {\n test2: ['testing', 'test\\u0000ing'],\n },\n };\n const expected = {\n test: {\n test2: ['testing', 'test\\\\u0000ing'],\n },\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles numbers correctly', () => {\n const input = {\n test: 'test\\u0000ing',\n a: 1,\n b: 2.45,\n };\n const expected = {\n test: 'test\\\\u0000ing',\n a: 1,\n b: 2.45,\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n\n it('handles null values correctly', () => {\n const input = {\n test: 'test\\u0000ing',\n a: null,\n };\n const expected = {\n test: 'test\\\\u0000ing',\n a: null,\n };\n assert.deepEqual(expected, sanitizeObject(input));\n });\n});\n\ndescribe('recursivelyTruncateStrings', () => {\n it('handles empty object', () => {\n assert.deepEqual(recursivelyTruncateStrings({}, 10), {});\n });\n\n it('handles null and undefined', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: null }, 10), { test: null });\n assert.deepEqual(recursivelyTruncateStrings({ test: undefined }, 10), { test: undefined });\n });\n\n it('handles legal string', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: 'test' }, 10), { test: 'test' });\n });\n\n it('handles long string', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: 'testtest' }, 4), {\n test: 'test...[truncated]',\n });\n });\n\n it('handles long string in array', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: ['testtest'] }, 4), {\n test: ['test...[truncated]'],\n });\n });\n\n it('handles long string in object in array', () => {\n assert.deepEqual(recursivelyTruncateStrings({ test: [{ test: 'testtest' }] }, 4), {\n test: [{ test: 'test...[truncated]' }],\n });\n });\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prairielearn/sanitize",
3
- "version": "2.0.13",
3
+ "version": "2.0.15",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -11,26 +11,14 @@
11
11
  "scripts": {
12
12
  "build": "tsc",
13
13
  "dev": "tsc --watch --preserveWatchOutput",
14
- "test": "c8 mocha src/**/*.test.ts"
14
+ "test": "vitest run --coverage"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@prairielearn/tsconfig": "^0.0.0",
18
- "@types/node": "^20.17.30",
19
- "c8": "^10.1.3",
20
- "chai": "^5.2.0",
21
- "mocha": "^11.1.0",
22
- "tsx": "^4.19.3",
23
- "typescript": "^5.8.3"
24
- },
25
- "c8": {
26
- "reporter": [
27
- "html",
28
- "text-summary",
29
- "cobertura"
30
- ],
31
- "all": true,
32
- "include": [
33
- "src/**"
34
- ]
18
+ "@types/node": "^20.17.57",
19
+ "@vitest/coverage-v8": "^3.1.4",
20
+ "tsx": "^4.19.4",
21
+ "typescript": "^5.8.3",
22
+ "vitest": "^3.1.4"
35
23
  }
36
24
  }
package/src/index.test.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { assert } from 'chai';
1
+ import { assert, describe, it } from 'vitest';
2
2
 
3
3
  import { recursivelyTruncateStrings, sanitizeObject } from './index.js';
4
4
 
package/tsconfig.json CHANGED
@@ -3,6 +3,6 @@
3
3
  "compilerOptions": {
4
4
  "outDir": "./dist",
5
5
  "rootDir": "./src",
6
- "types": ["mocha", "node"]
6
+ "types": ["node"]
7
7
  }
8
8
  }
@@ -0,0 +1,11 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ coverage: {
6
+ reporter: ['html', 'text-summary', 'cobertura'],
7
+ all: true,
8
+ include: ['src/**'],
9
+ },
10
+ },
11
+ });