freezedts 0.12.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/dist/cli.d.ts +13 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +121 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/excluded-dirs.d.ts +2 -0
  8. package/dist/excluded-dirs.d.ts.map +1 -0
  9. package/dist/excluded-dirs.js +2 -0
  10. package/dist/excluded-dirs.js.map +1 -0
  11. package/dist/generator/config.d.ts +18 -0
  12. package/dist/generator/config.d.ts.map +1 -0
  13. package/dist/generator/config.js +40 -0
  14. package/dist/generator/config.js.map +1 -0
  15. package/dist/generator/emitter.d.ts +3 -0
  16. package/dist/generator/emitter.d.ts.map +1 -0
  17. package/dist/generator/emitter.js +170 -0
  18. package/dist/generator/emitter.js.map +1 -0
  19. package/dist/generator/generator.d.ts +8 -0
  20. package/dist/generator/generator.d.ts.map +1 -0
  21. package/dist/generator/generator.js +188 -0
  22. package/dist/generator/generator.js.map +1 -0
  23. package/dist/generator/parser.d.ts +32 -0
  24. package/dist/generator/parser.d.ts.map +1 -0
  25. package/dist/generator/parser.js +154 -0
  26. package/dist/generator/parser.js.map +1 -0
  27. package/dist/generator/watcher.d.ts +11 -0
  28. package/dist/generator/watcher.d.ts.map +1 -0
  29. package/dist/generator/watcher.js +45 -0
  30. package/dist/generator/watcher.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +2 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/runtime/copy.d.ts +3 -0
  36. package/dist/runtime/copy.d.ts.map +1 -0
  37. package/dist/runtime/copy.js +43 -0
  38. package/dist/runtime/copy.js.map +1 -0
  39. package/dist/runtime/deepEqual.d.ts +2 -0
  40. package/dist/runtime/deepEqual.d.ts.map +1 -0
  41. package/dist/runtime/deepEqual.js +43 -0
  42. package/dist/runtime/deepEqual.js.map +1 -0
  43. package/dist/runtime/deepFreeze.d.ts +2 -0
  44. package/dist/runtime/deepFreeze.d.ts.map +1 -0
  45. package/dist/runtime/deepFreeze.js +35 -0
  46. package/dist/runtime/deepFreeze.js.map +1 -0
  47. package/dist/runtime/freezed.d.ts +16 -0
  48. package/dist/runtime/freezed.d.ts.map +1 -0
  49. package/dist/runtime/freezed.js +11 -0
  50. package/dist/runtime/freezed.js.map +1 -0
  51. package/dist/runtime/index.d.ts +6 -0
  52. package/dist/runtime/index.d.ts.map +1 -0
  53. package/dist/runtime/index.js +6 -0
  54. package/dist/runtime/index.js.map +1 -0
  55. package/package.json +53 -0
@@ -0,0 +1,45 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { EXCLUDED_DIRS } from '../excluded-dirs.js';
4
+ export function shouldProcess(filePath) {
5
+ const base = path.basename(filePath);
6
+ if (!base.endsWith('.ts'))
7
+ return false;
8
+ if (base.endsWith('.freezed.ts'))
9
+ return false;
10
+ if (base.endsWith('.test.ts'))
11
+ return false;
12
+ if (base.endsWith('.d.ts'))
13
+ return false;
14
+ const parts = filePath.split(/[\\/]/);
15
+ return !parts.some((p) => EXCLUDED_DIRS.has(p));
16
+ }
17
+ export function createWatcher(options) {
18
+ const { dir, onChange, debounceMs = 100 } = options;
19
+ let pending = new Set();
20
+ let timer = null;
21
+ const fsWatcher = fs.watch(dir, { recursive: true }, (_eventType, filename) => {
22
+ if (!filename)
23
+ return;
24
+ const fullPath = path.resolve(dir, filename);
25
+ if (!shouldProcess(fullPath))
26
+ return;
27
+ pending.add(fullPath);
28
+ if (timer)
29
+ clearTimeout(timer);
30
+ timer = setTimeout(() => {
31
+ const files = [...pending];
32
+ pending = new Set();
33
+ timer = null;
34
+ onChange(files);
35
+ }, debounceMs);
36
+ });
37
+ return {
38
+ close: () => {
39
+ if (timer)
40
+ clearTimeout(timer);
41
+ fsWatcher.close();
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/generator/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAYD,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACpD,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,KAAK,GAAyC,IAAI,CAAC;IAEvD,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;QAC5E,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAAE,OAAO;QAErC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YAC3B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;YACb,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { freezed } from './runtime/freezed.js';
2
+ export type { FreezedOptions } from './runtime/freezed.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { freezed } from './runtime/freezed.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function isFreezedInstance(value: unknown): boolean;
2
+ export declare function createWithProxy<T extends object>(instance: T): any;
3
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../src/runtime/copy.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOzD;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,GAAG,CAElE"}
@@ -0,0 +1,43 @@
1
+ import { FREEZED_OPTIONS } from './freezed.js';
2
+ export function isFreezedInstance(value) {
3
+ return (value != null &&
4
+ typeof value === 'object' &&
5
+ typeof value.constructor === 'function' &&
6
+ FREEZED_OPTIONS in value.constructor);
7
+ }
8
+ export function createWithProxy(instance) {
9
+ return buildProxy(instance, []);
10
+ }
11
+ function shallowCopy(instance, overrides) {
12
+ const Ctor = instance.constructor;
13
+ const props = {};
14
+ for (const key of Object.keys(instance)) {
15
+ props[key] = instance[key];
16
+ }
17
+ return new Ctor({ ...props, ...overrides });
18
+ }
19
+ function deepUpdate(root, path, overrides) {
20
+ if (path.length === 0)
21
+ return shallowCopy(root, overrides);
22
+ const [head, ...rest] = path;
23
+ return shallowCopy(root, { [head]: deepUpdate(root[head], rest, overrides) });
24
+ }
25
+ function buildProxy(root, path) {
26
+ return new Proxy((() => { }), {
27
+ apply(_target, _thisArg, args) {
28
+ return deepUpdate(root, path, args[0] ?? {});
29
+ },
30
+ get(_target, prop) {
31
+ if (typeof prop !== 'string')
32
+ return undefined;
33
+ let current = root;
34
+ for (const p of path)
35
+ current = current[p];
36
+ const value = current[prop];
37
+ if (!isFreezedInstance(value))
38
+ return undefined;
39
+ return buildProxy(root, [...path, prop]);
40
+ },
41
+ });
42
+ }
43
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../src/runtime/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAQ,KAAa,CAAC,WAAW,KAAK,UAAU;QAChD,eAAe,IAAK,KAAa,CAAC,WAAW,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAmB,QAAW;IAC3D,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,QAAa,EAAE,SAAkC;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAuC,CAAC;IAC9D,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,IAAS,EAAE,IAAc,EAAE,SAAkC;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,UAAU,CAAC,IAAS,EAAE,IAAc;IAC3C,OAAO,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAQ,EAAE;QAClC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC3B,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAC/C,IAAI,OAAO,GAAQ,IAAI,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAChD,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function deepEqual(a: unknown, b: unknown): boolean;
2
+ //# sourceMappingURL=deepEqual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../src/runtime/deepEqual.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CA6BzD"}
@@ -0,0 +1,43 @@
1
+ export function deepEqual(a, b) {
2
+ if (a === b)
3
+ return true;
4
+ if (a == null || b == null)
5
+ return a === b;
6
+ if (typeof a !== typeof b)
7
+ return false;
8
+ if (typeof a === 'number')
9
+ return Number.isNaN(a) && Number.isNaN(b);
10
+ if (typeof a !== 'object')
11
+ return false;
12
+ if (typeof a.equals === 'function' && a.constructor === b.constructor) {
13
+ return a.equals(b);
14
+ }
15
+ if (Array.isArray(a)) {
16
+ if (!Array.isArray(b) || a.length !== b.length)
17
+ return false;
18
+ return a.every((v, i) => deepEqual(v, b[i]));
19
+ }
20
+ if (a instanceof Map) {
21
+ if (!(b instanceof Map) || a.size !== b.size)
22
+ return false;
23
+ for (const [k, v] of a) {
24
+ if (!b.has(k) || !deepEqual(v, b.get(k)))
25
+ return false;
26
+ }
27
+ return true;
28
+ }
29
+ if (a instanceof Set) {
30
+ if (!(b instanceof Set) || a.size !== b.size)
31
+ return false;
32
+ for (const v of a)
33
+ if (!b.has(v))
34
+ return false;
35
+ return true;
36
+ }
37
+ const keysA = Object.keys(a);
38
+ const keysB = Object.keys(b);
39
+ if (keysA.length !== keysB.length)
40
+ return false;
41
+ return keysA.every(k => deepEqual(a[k], b[k]));
42
+ }
43
+ //# sourceMappingURL=deepEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../src/runtime/deepEqual.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,CAAU;IAC9C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAW,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAQ,CAAS,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/E,OAAQ,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAG,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC3D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAE,CAAS,CAAC,CAAC,CAAC,EAAG,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function deepFreeze<T>(value: T): T;
2
+ //# sourceMappingURL=deepFreeze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepFreeze.d.ts","sourceRoot":"","sources":["../../src/runtime/deepFreeze.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA6BzC"}
@@ -0,0 +1,35 @@
1
+ export function deepFreeze(value) {
2
+ if (value == null || typeof value !== 'object')
3
+ return value;
4
+ if (Object.isFrozen(value))
5
+ return value;
6
+ if (Array.isArray(value)) {
7
+ for (let i = 0; i < value.length; i++)
8
+ deepFreeze(value[i]);
9
+ Object.freeze(value);
10
+ return value;
11
+ }
12
+ if (value instanceof Map) {
13
+ const _throw = () => { throw new TypeError('Cannot mutate a frozen Map'); };
14
+ value.set = _throw;
15
+ value.delete = _throw;
16
+ value.clear = _throw;
17
+ value.forEach((v, k) => { deepFreeze(k); deepFreeze(v); });
18
+ Object.freeze(value);
19
+ return value;
20
+ }
21
+ if (value instanceof Set) {
22
+ const _throw = () => { throw new TypeError('Cannot mutate a frozen Set'); };
23
+ value.add = _throw;
24
+ value.delete = _throw;
25
+ value.clear = _throw;
26
+ value.forEach((v) => deepFreeze(v));
27
+ Object.freeze(value);
28
+ return value;
29
+ }
30
+ for (const key of Object.keys(value))
31
+ deepFreeze(value[key]);
32
+ Object.freeze(value);
33
+ return value;
34
+ }
35
+ //# sourceMappingURL=deepFreeze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepFreeze.js","sourceRoot":"","sources":["../../src/runtime/deepFreeze.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,KAAK,CAAC,GAAG,GAAG,MAAa,CAAC;QAC1B,KAAK,CAAC,MAAM,GAAG,MAAa,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,MAAa,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,KAAK,CAAC,GAAG,GAAG,MAAa,CAAC;QAC1B,KAAK,CAAC,MAAM,GAAG,MAAa,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,MAAa,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,UAAU,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface FieldConfig {
2
+ default?: unknown;
3
+ assert?: (value: any) => boolean;
4
+ message?: string;
5
+ }
6
+ export interface FreezedOptions {
7
+ equality?: 'deep' | 'shallow';
8
+ copyWith?: boolean;
9
+ equal?: boolean;
10
+ toString?: boolean;
11
+ fields?: Record<string, FieldConfig>;
12
+ }
13
+ export declare const FREEZED_OPTIONS: unique symbol;
14
+ export declare function freezed(options?: FreezedOptions): <T extends abstract new (...args: any[]) => any>(target: T, _context: ClassDecoratorContext) => T;
15
+ export declare function getFreezedOptions(target: Function): FreezedOptions | undefined;
16
+ //# sourceMappingURL=freezed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezed.d.ts","sourceRoot":"","sources":["../../src/runtime/freezed.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,eAAe,eAAkC,CAAC;AAE/D,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,IAC7B,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC7D,QAAQ,CAAC,EACT,UAAU,qBAAqB,KAC9B,CAAC,CAIL;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAE9E"}
@@ -0,0 +1,11 @@
1
+ export const FREEZED_OPTIONS = Symbol.for('freezedts:options');
2
+ export function freezed(options) {
3
+ return function (target, _context) {
4
+ target[FREEZED_OPTIONS] = options ?? {};
5
+ return target;
6
+ };
7
+ }
8
+ export function getFreezedOptions(target) {
9
+ return target[FREEZED_OPTIONS];
10
+ }
11
+ //# sourceMappingURL=freezed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freezed.js","sourceRoot":"","sources":["../../src/runtime/freezed.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAE/D,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC9C,OAAO,UACL,MAAS,EACT,QAA+B;QAE9B,MAAc,CAAC,eAAe,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAgB;IAChD,OAAQ,MAAc,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { freezed, getFreezedOptions, FREEZED_OPTIONS } from './freezed.js';
2
+ export type { FreezedOptions, FieldConfig } from './freezed.js';
3
+ export { isFreezedInstance, createWithProxy } from './copy.js';
4
+ export { deepEqual } from './deepEqual.js';
5
+ export { deepFreeze } from './deepFreeze.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ // src/runtime/index.ts
2
+ export { freezed, getFreezedOptions, FREEZED_OPTIONS } from './freezed.js';
3
+ export { isFreezedInstance, createWithProxy } from './copy.js';
4
+ export { deepEqual } from './deepEqual.js';
5
+ export { deepFreeze } from './deepFreeze.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "freezedts",
3
+ "version": "0.12.0",
4
+ "type": "module",
5
+ "description": "Immutable class management for TypeScript via code generation",
6
+ "author": { "name": "James Gorman" },
7
+ "homepage": "https://github.com/jamesgorman2/freezedts",
8
+ "bugs": { "url": "https://github.com/jamesgorman2/freezedts/issues" },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/jamesgorman2/freezedts.git"
12
+ },
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "bin": {
16
+ "freezedts": "dist/cli.js"
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.js",
21
+ "types": "./dist/index.d.ts"
22
+ },
23
+ "./runtime": {
24
+ "import": "./dist/runtime/index.js",
25
+ "types": "./dist/runtime/index.d.ts"
26
+ }
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "!dist/**/*.test.*"
31
+ ],
32
+ "scripts": {
33
+ "build": "tsc",
34
+ "test": "bun test",
35
+ "test:watch": "bun test --watch",
36
+ "generate": "bun src/cli.ts"
37
+ },
38
+ "keywords": [
39
+ "immutable",
40
+ "codegen",
41
+ "decorator",
42
+ "typescript"
43
+ ],
44
+ "license": "MIT",
45
+ "dependencies": { },
46
+ "devDependencies": {
47
+ "@types/bun": "latest",
48
+ "@types/node": "^25.5.2",
49
+ "typescript": "^6.0.2",
50
+ "ts-morph": "^27.0.2",
51
+ "yaml": "^2.8.3"
52
+ }
53
+ }