@nordcraft/core 1.0.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 (119) hide show
  1. package/README.md +5 -0
  2. package/dist/api/LegacyToddleApi.d.ts +34 -0
  3. package/dist/api/LegacyToddleApi.js +178 -0
  4. package/dist/api/LegacyToddleApi.js.map +1 -0
  5. package/dist/api/ToddleApiV2.d.ts +77 -0
  6. package/dist/api/ToddleApiV2.js +271 -0
  7. package/dist/api/ToddleApiV2.js.map +1 -0
  8. package/dist/api/api.d.ts +49 -0
  9. package/dist/api/api.js +276 -0
  10. package/dist/api/api.js.map +1 -0
  11. package/dist/api/apiTypes.d.ts +125 -0
  12. package/dist/api/apiTypes.js +11 -0
  13. package/dist/api/apiTypes.js.map +1 -0
  14. package/dist/api/headers.d.ts +10 -0
  15. package/dist/api/headers.js +36 -0
  16. package/dist/api/headers.js.map +1 -0
  17. package/dist/api/template.d.ts +5 -0
  18. package/dist/api/template.js +7 -0
  19. package/dist/api/template.js.map +1 -0
  20. package/dist/component/ToddleComponent.d.ts +45 -0
  21. package/dist/component/ToddleComponent.js +373 -0
  22. package/dist/component/ToddleComponent.js.map +1 -0
  23. package/dist/component/actionUtils.d.ts +2 -0
  24. package/dist/component/actionUtils.js +56 -0
  25. package/dist/component/actionUtils.js.map +1 -0
  26. package/dist/component/component.types.d.ts +313 -0
  27. package/dist/component/component.types.js +9 -0
  28. package/dist/component/component.types.js.map +1 -0
  29. package/dist/component/isPageComponent.d.ts +2 -0
  30. package/dist/component/isPageComponent.js +3 -0
  31. package/dist/component/isPageComponent.js.map +1 -0
  32. package/dist/formula/ToddleFormula.d.ts +15 -0
  33. package/dist/formula/ToddleFormula.js +20 -0
  34. package/dist/formula/ToddleFormula.js.map +1 -0
  35. package/dist/formula/formula.d.ts +103 -0
  36. package/dist/formula/formula.js +186 -0
  37. package/dist/formula/formula.js.map +1 -0
  38. package/dist/formula/formulaTypes.d.ts +30 -0
  39. package/dist/formula/formulaTypes.js +2 -0
  40. package/dist/formula/formulaTypes.js.map +1 -0
  41. package/dist/formula/formulaUtils.d.ts +18 -0
  42. package/dist/formula/formulaUtils.js +240 -0
  43. package/dist/formula/formulaUtils.js.map +1 -0
  44. package/dist/styling/className.d.ts +2 -0
  45. package/dist/styling/className.js +52 -0
  46. package/dist/styling/className.js.map +1 -0
  47. package/dist/styling/style.css.d.ts +5 -0
  48. package/dist/styling/style.css.js +242 -0
  49. package/dist/styling/style.css.js.map +1 -0
  50. package/dist/styling/theme.const.d.ts +3 -0
  51. package/dist/styling/theme.const.js +381 -0
  52. package/dist/styling/theme.const.js.map +1 -0
  53. package/dist/styling/theme.d.ts +72 -0
  54. package/dist/styling/theme.js +200 -0
  55. package/dist/styling/theme.js.map +1 -0
  56. package/dist/styling/variantSelector.d.ts +123 -0
  57. package/dist/styling/variantSelector.js +25 -0
  58. package/dist/styling/variantSelector.js.map +1 -0
  59. package/dist/types.d.ts +97 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils/collections.d.ts +21 -0
  63. package/dist/utils/collections.js +75 -0
  64. package/dist/utils/collections.js.map +1 -0
  65. package/dist/utils/customElements.d.ts +6 -0
  66. package/dist/utils/customElements.js +15 -0
  67. package/dist/utils/customElements.js.map +1 -0
  68. package/dist/utils/hash.d.ts +1 -0
  69. package/dist/utils/hash.js +17 -0
  70. package/dist/utils/hash.js.map +1 -0
  71. package/dist/utils/json.d.ts +5 -0
  72. package/dist/utils/json.js +16 -0
  73. package/dist/utils/json.js.map +1 -0
  74. package/dist/utils/sha1.d.ts +2 -0
  75. package/dist/utils/sha1.js +13 -0
  76. package/dist/utils/sha1.js.map +1 -0
  77. package/dist/utils/url.d.ts +5 -0
  78. package/dist/utils/url.js +27 -0
  79. package/dist/utils/url.js.map +1 -0
  80. package/dist/utils/util.d.ts +3 -0
  81. package/dist/utils/util.js +4 -0
  82. package/dist/utils/util.js.map +1 -0
  83. package/package.json +18 -0
  84. package/src/api/LegacyToddleApi.ts +205 -0
  85. package/src/api/ToddleApiV2.ts +331 -0
  86. package/src/api/api.test.ts +319 -0
  87. package/src/api/api.ts +414 -0
  88. package/src/api/apiTypes.ts +145 -0
  89. package/src/api/headers.ts +41 -0
  90. package/src/api/template.ts +10 -0
  91. package/src/component/ToddleComponent.actionReferences.test.ts +75 -0
  92. package/src/component/ToddleComponent.formulasInComponent.test.ts +234 -0
  93. package/src/component/ToddleComponent.ts +470 -0
  94. package/src/component/actionUtils.ts +61 -0
  95. package/src/component/component.types.ts +362 -0
  96. package/src/component/isPageComponent.ts +6 -0
  97. package/src/formula/ToddleFormula.ts +30 -0
  98. package/src/formula/formula.ts +355 -0
  99. package/src/formula/formulaTypes.ts +45 -0
  100. package/src/formula/formulaUtils.ts +287 -0
  101. package/src/styling/className.test.ts +19 -0
  102. package/src/styling/className.ts +73 -0
  103. package/src/styling/style.css.ts +309 -0
  104. package/src/styling/theme.const.ts +390 -0
  105. package/src/styling/theme.ts +339 -0
  106. package/src/styling/variantSelector.ts +168 -0
  107. package/src/types.ts +158 -0
  108. package/src/utils/collections.test.ts +57 -0
  109. package/src/utils/collections.ts +122 -0
  110. package/src/utils/customElements.test.ts +40 -0
  111. package/src/utils/customElements.ts +16 -0
  112. package/src/utils/hash.test.ts +32 -0
  113. package/src/utils/hash.ts +18 -0
  114. package/src/utils/json.ts +18 -0
  115. package/src/utils/sha1.test.ts +50 -0
  116. package/src/utils/sha1.ts +17 -0
  117. package/src/utils/url.test.ts +17 -0
  118. package/src/utils/url.ts +33 -0
  119. package/src/utils/util.ts +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/styling/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { AnimationKeyframe, EventModel } from '../component/component.types';
3
+ import type { Formula } from '../formula/formula';
4
+ export type Shadow = {
5
+ x: number;
6
+ y: number;
7
+ blur: number;
8
+ spread: number;
9
+ color: string;
10
+ inset: boolean;
11
+ };
12
+ export type Filter = {
13
+ name: 'Blur';
14
+ radius: number;
15
+ } | {
16
+ name: 'Opacity';
17
+ percent: number;
18
+ };
19
+ export interface StyleDeclarationBlock extends CSSProperties {
20
+ filters?: Filter[];
21
+ shadows?: Shadow[];
22
+ }
23
+ type MediaQuery = {
24
+ 'min-width'?: string;
25
+ 'max-width'?: string;
26
+ 'min-height'?: string;
27
+ 'max-height'?: string;
28
+ };
29
+ export interface StyleVariant {
30
+ autofill?: boolean;
31
+ 'even-child'?: boolean;
32
+ 'first-child'?: boolean;
33
+ 'first-of-type'?: boolean;
34
+ 'focus-visible'?: boolean;
35
+ 'focus-within'?: boolean;
36
+ 'last-child'?: boolean;
37
+ 'last-of-type'?: boolean;
38
+ 'popover-open'?: boolean;
39
+ active?: boolean;
40
+ breakpoint: 'small' | 'medium' | 'large';
41
+ checked?: boolean;
42
+ class?: string;
43
+ className?: string;
44
+ disabled?: boolean;
45
+ empty?: boolean;
46
+ evenChild?: boolean;
47
+ firstChild?: boolean;
48
+ focus?: boolean;
49
+ focusWithin?: boolean;
50
+ hover?: boolean;
51
+ id?: string;
52
+ invalid?: boolean;
53
+ lastChild?: boolean;
54
+ link?: boolean;
55
+ mediaQuery?: MediaQuery;
56
+ pseudoElement?: string;
57
+ startingStyle?: boolean;
58
+ style: StyleDeclarationBlock;
59
+ visited?: boolean;
60
+ }
61
+ export interface NodeStyleModel extends StyleDeclarationBlock {
62
+ variants?: StyleVariant[];
63
+ breakpoints?: {
64
+ small?: NodeStyleModel;
65
+ medium?: NodeStyleModel;
66
+ large?: NodeStyleModel;
67
+ };
68
+ mediaQuery?: MediaQuery;
69
+ }
70
+ export type NodeClass = {
71
+ name: string;
72
+ formula?: Formula;
73
+ };
74
+ export type NodeModel = ElementNodeModel | TextNodeModel | ComponentNodeModel | SlotNodeModel;
75
+ export type ElementNodeModel = {
76
+ id: string;
77
+ type: 'element';
78
+ condition?: Formula;
79
+ repeat?: Formula;
80
+ repeatKey?: Formula;
81
+ tag: string;
82
+ classList: NodeClass[];
83
+ attrs: Record<string, Formula>;
84
+ style: NodeStyleModel;
85
+ variants?: StyleVariant[];
86
+ animations?: Record<string, Record<string, AnimationKeyframe>>;
87
+ children: NodeModel[];
88
+ events: EventModel[];
89
+ };
90
+ export type ComponentNodeModel = {
91
+ id: string;
92
+ type: 'component';
93
+ path?: string;
94
+ name: string;
95
+ condition?: Formula;
96
+ repeat?: Formula;
97
+ repeatKey?: Formula;
98
+ style?: NodeStyleModel;
99
+ variants?: StyleVariant[];
100
+ animations?: Record<string, Record<string, AnimationKeyframe>>;
101
+ attrs: Record<string, Formula>;
102
+ children: NodeModel[];
103
+ events: EventModel[];
104
+ };
105
+ export type TextNodeModel = {
106
+ id: string;
107
+ type: 'text';
108
+ condition?: Formula;
109
+ repeat?: Formula;
110
+ repeatKey?: Formula;
111
+ value: Formula;
112
+ children?: undefined;
113
+ };
114
+ export type SlotNodeModel = {
115
+ id: string;
116
+ type: 'slot';
117
+ condition?: Formula;
118
+ repeat?: undefined;
119
+ repeatKey?: Formula;
120
+ children: NodeModel[];
121
+ };
122
+ export declare const variantSelector: (variant: StyleVariant) => string;
123
+ export {};
@@ -0,0 +1,25 @@
1
+ export const variantSelector = (variant) => [
2
+ (variant.className ?? variant['class']) && `.${variant.className}`,
3
+ (variant.evenChild ?? variant['even-child']) && ':nth-child(even)',
4
+ (variant.firstChild ?? variant['first-child']) && ':first-child',
5
+ (variant.focusWithin ?? variant['focus-within']) && ':focus-within',
6
+ (variant.lastChild ?? variant['last-child']) && ':last-child',
7
+ variant.active && ':active',
8
+ variant.autofill && ':is(:-webkit-autofill, :autofill)',
9
+ variant.checked && ':checked',
10
+ variant.disabled && ':disabled',
11
+ variant.empty && ':empty',
12
+ variant.focus && ':focus',
13
+ variant.hover && ':hover',
14
+ variant.invalid && ':invalid',
15
+ variant.link && ':link',
16
+ variant.visited && ':visited',
17
+ variant['first-of-type'] && ':first-of-type',
18
+ variant['focus-visible'] && ':focus-visible',
19
+ variant['last-of-type'] && ':last-of-type',
20
+ variant['popover-open'] && ':popover-open',
21
+ variant.pseudoElement && `::${variant.pseudoElement}`,
22
+ ]
23
+ .filter(Boolean)
24
+ .join('');
25
+ //# sourceMappingURL=variantSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variantSelector.js","sourceRoot":"","sources":["../../src/styling/variantSelector.ts"],"names":[],"mappings":"AA+IA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,EAAE,CACvD;IACE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE;IAClE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,kBAAkB;IAClE,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,cAAc;IAChE,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,eAAe;IACnE,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,aAAa;IAC7D,OAAO,CAAC,MAAM,IAAI,SAAS;IAC3B,OAAO,CAAC,QAAQ,IAAI,mCAAmC;IACvD,OAAO,CAAC,OAAO,IAAI,UAAU;IAC7B,OAAO,CAAC,QAAQ,IAAI,WAAW;IAC/B,OAAO,CAAC,KAAK,IAAI,QAAQ;IACzB,OAAO,CAAC,KAAK,IAAI,QAAQ;IACzB,OAAO,CAAC,KAAK,IAAI,QAAQ;IACzB,OAAO,CAAC,OAAO,IAAI,UAAU;IAC7B,OAAO,CAAC,IAAI,IAAI,OAAO;IACvB,OAAO,CAAC,OAAO,IAAI,UAAU;IAC7B,OAAO,CAAC,eAAe,CAAC,IAAI,gBAAgB;IAC5C,OAAO,CAAC,eAAe,CAAC,IAAI,gBAAgB;IAC5C,OAAO,CAAC,cAAc,CAAC,IAAI,eAAe;IAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,eAAe;IAC1C,OAAO,CAAC,aAAa,IAAI,KAAK,OAAO,CAAC,aAAa,EAAE;CACtD;KACE,MAAM,CAAC,OAAO,CAAC;KACf,IAAI,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,97 @@
1
+ import type { Component, ComponentData } from './component/component.types';
2
+ import type { Formula, ToddleEnv } from './formula/formula';
3
+ import type { PluginFormula } from './formula/formulaTypes';
4
+ export type FormulaHandlerV2<R = unknown> = (args: Record<string, unknown>, ctx: {
5
+ root: Document | ShadowRoot;
6
+ env: ToddleEnv;
7
+ }) => R | null;
8
+ export type ActionHandlerV2 = (args: Record<string, unknown>, ctx: {
9
+ triggerActionEvent: (trigger: string, data: any, event?: Event) => void;
10
+ root: Document | ShadowRoot;
11
+ }, event?: Event) => void | (() => void) | Promise<void> | Promise<() => void>;
12
+ export type ActionHandler<Args = unknown[]> = (args: Args, ctx: {
13
+ triggerActionEvent: (trigger: string, data: any, event?: Event) => void;
14
+ env: ToddleEnv;
15
+ abortSignal: AbortSignal;
16
+ }, event?: Event) => void;
17
+ export type FormulaHandler<T = void> = (args: unknown[], ctx: {
18
+ component: Component;
19
+ data: ComponentData;
20
+ root: Document | ShadowRoot;
21
+ env: ToddleEnv;
22
+ }) => T | null;
23
+ interface PluginActionBase {
24
+ name: string;
25
+ description?: string;
26
+ arguments: Array<{
27
+ name: string;
28
+ formula: Formula;
29
+ }>;
30
+ variableArguments: boolean | null;
31
+ }
32
+ export interface PluginActionV2 extends PluginActionBase {
33
+ handler: ActionHandlerV2;
34
+ version: 2;
35
+ }
36
+ export type ArgumentInputDataFunction = (items: unknown[], index: number, input: any) => ComponentData;
37
+ export type CustomFormulaHandler = (name: string, packageName: string | undefined) => PluginFormula<FormulaHandlerV2> | undefined;
38
+ export type FormulaLookup = (name: string) => FormulaHandler | undefined;
39
+ export interface Toddle<LocationSignal, ShowSignal> {
40
+ project: string;
41
+ branch: string;
42
+ commit: string;
43
+ errors: Error[];
44
+ formulas: Record<string, Record<string, PluginFormula<FormulaHandlerV2>>>;
45
+ actions: Record<string, Record<string, PluginActionV2>>;
46
+ isEqual: (a: any, b: any) => boolean;
47
+ registerAction: (name: string, handler: ActionHandler) => void;
48
+ registerFormula: (name: string, handler: FormulaHandler, getArgumentInputData?: ArgumentInputDataFunction) => void;
49
+ getAction: (name: string) => ActionHandler | undefined;
50
+ getFormula: FormulaLookup;
51
+ getCustomFormula: CustomFormulaHandler;
52
+ getCustomAction: (name: string, packageName: string | undefined) => PluginActionV2 | undefined;
53
+ getArgumentInputData: (name: string, items: unknown[], index: number, input: any) => ComponentData;
54
+ data: Record<string, unknown>;
55
+ components: Component[];
56
+ locationSignal: LocationSignal;
57
+ eventLog: Array<{
58
+ component: string;
59
+ node: string;
60
+ nodeId: string;
61
+ event: string;
62
+ time: number;
63
+ data: any;
64
+ }>;
65
+ pageState: ComponentData;
66
+ _preview?: {
67
+ showSignal: ShowSignal;
68
+ };
69
+ env: ToddleEnv;
70
+ }
71
+ export interface ToddleInternals {
72
+ project: string;
73
+ branch: string;
74
+ commit: string;
75
+ pageState: ComponentData;
76
+ component: Component;
77
+ components: Component[];
78
+ isPageLoaded: boolean;
79
+ cookies: string[];
80
+ }
81
+ export interface Comment {
82
+ text: string;
83
+ }
84
+ export interface ToddleMetadata {
85
+ '@toddle/metadata'?: {
86
+ comments: Record<string, Comment & {
87
+ index: number;
88
+ }> | null;
89
+ } | null;
90
+ }
91
+ export type RequireFields<T, K extends keyof T> = Omit<T, K> & {
92
+ [P in K]-?: NonNullable<T[P]>;
93
+ };
94
+ export type NestedOmit<Schema, Path extends string> = Path extends `${infer Head}.${infer Tail}` ? Head extends keyof Schema ? {
95
+ [K in keyof Schema]: K extends Head ? NestedOmit<Schema[K], Tail> : Schema[K];
96
+ } : Schema : Omit<Schema, Path>;
97
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export declare const isObject: (input: any) => input is Record<string, any>;
2
+ export declare const mapObject: <T, T2>(object: Record<string, T>, f: (kv: [string, T]) => [string, T2]) => Record<string, T2>;
3
+ export declare const mapValues: <T, T2>(object: Record<string, T>, f: (value: T) => T2) => Record<string, T2>;
4
+ /**
5
+ * Deletes potentially nested keys from an object
6
+ * @param collection Array or Object
7
+ * @param path Path to the key to delete. For instance ['foo', 0, 'bar']
8
+ * @returns The updated object/array
9
+ */
10
+ export declare const omit: <T = unknown>(collection: T, path: string[]) => T;
11
+ export declare const omitKeys: <T extends Record<string, any>>(object: T, keys: Array<keyof T>) => T;
12
+ export declare const omitPaths: (object: Record<string, any>, keys: string[][]) => {
13
+ [x: string]: any;
14
+ };
15
+ export declare const groupBy: <T>(items: T[], f: (t: T) => string) => Record<string, T[]>;
16
+ export declare const filterObject: <T>(object: Record<string, T>, f: (kv: [string, T]) => boolean) => Record<string, T>;
17
+ export declare function get<T = any>(collection: T, [head, ...rest]: string[]): any;
18
+ export declare const set: <T = unknown>(collection: T, key: string[], value: any) => T;
19
+ export declare const sortObjectEntries: <T>(object: Record<string, T>, f: (kv: [string, T]) => string | number | boolean, ascending?: boolean) => [string, T][];
20
+ export declare const easySort: <T>(collection: T[], f: (item: T) => string | number | boolean, ascending?: boolean) => T[];
21
+ export declare const deepSortObject: (obj: any) => Record<string, any> | Array<any> | undefined | null;
@@ -0,0 +1,75 @@
1
+ import { isDefined } from './util';
2
+ export const isObject = (input) => typeof input === 'object' && input !== null;
3
+ export const mapObject = (object, f) => Object.fromEntries(Object.entries(object).map(f));
4
+ export const mapValues = (object, f) => mapObject(object, ([key, value]) => [key, f(value)]);
5
+ /**
6
+ * Deletes potentially nested keys from an object
7
+ * @param collection Array or Object
8
+ * @param path Path to the key to delete. For instance ['foo', 0, 'bar']
9
+ * @returns The updated object/array
10
+ */
11
+ export const omit = (collection, path) => {
12
+ const [head, ...rest] = path;
13
+ const clone = Array.isArray(collection)
14
+ ? [...collection]
15
+ : isObject(collection)
16
+ ? { ...collection }
17
+ : {};
18
+ if (rest.length === 0) {
19
+ delete clone[head];
20
+ }
21
+ else {
22
+ clone[head] = omit(clone[head], rest);
23
+ }
24
+ return clone;
25
+ };
26
+ export const omitKeys = (object, keys) => Object.fromEntries(Object.entries(object).filter(([k]) => !keys.includes(k)));
27
+ export const omitPaths = (object, keys) => keys.reduce((acc, key) => omit(acc, key), { ...object });
28
+ export const groupBy = (items, f) => items.reduce((acc, item) => {
29
+ const key = f(item);
30
+ acc[key] = acc[key] ?? [];
31
+ acc[key].push(item);
32
+ return acc;
33
+ }, {});
34
+ export const filterObject = (object, f) => Object.fromEntries(Object.entries(object).filter(f));
35
+ export function get(collection, [head, ...rest]) {
36
+ if (rest.length === 0) {
37
+ return collection?.[head];
38
+ }
39
+ return get(collection?.[head], rest);
40
+ }
41
+ export const set = (collection, key, value) => {
42
+ const [head, ...rest] = key;
43
+ const clone = Array.isArray(collection)
44
+ ? [...collection]
45
+ : isObject(collection)
46
+ ? { ...collection }
47
+ : {};
48
+ clone[head] = rest.length === 0 ? value : set(clone[head], rest, value);
49
+ return clone;
50
+ };
51
+ export const sortObjectEntries = (object, f, ascending = true) => easySort(Object.entries(object), f, ascending);
52
+ export const easySort = (collection, f, ascending = true) => [...collection].sort((a, b) => {
53
+ const keyA = f(a);
54
+ const keyB = f(b);
55
+ if (keyA === keyB) {
56
+ return 0;
57
+ }
58
+ return (keyA > keyB ? 1 : -1) * (ascending ? 1 : -1);
59
+ });
60
+ export const deepSortObject = (obj) => {
61
+ if (!isDefined(obj)) {
62
+ return obj;
63
+ }
64
+ if (Array.isArray(obj)) {
65
+ return obj.map((val) => deepSortObject(val));
66
+ }
67
+ else if (typeof obj === 'object' && Object.keys(obj).length > 0) {
68
+ return [...Object.keys(obj)].sort().reduce((acc, key) => {
69
+ acc[key] = deepSortObject(obj[key]);
70
+ return acc;
71
+ }, {});
72
+ }
73
+ return obj;
74
+ };
75
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/utils/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Convert a component name to a valid HTML tag name according to the custom-element specs
3
+ *
4
+ * https://html.spec.whatwg.org/multipage/custom-elements.html#custom-element
5
+ */
6
+ export declare const safeCustomElementName: (name: string) => string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Convert a component name to a valid HTML tag name according to the custom-element specs
3
+ *
4
+ * https://html.spec.whatwg.org/multipage/custom-elements.html#custom-element
5
+ */
6
+ export const safeCustomElementName = (name) => {
7
+ // Remove any white spaces from the name
8
+ const tag = name.toLocaleLowerCase().replaceAll(' ', '');
9
+ // Add "toddle-" prefix if needed
10
+ if (!tag.includes('-')) {
11
+ return `toddle-${tag}`;
12
+ }
13
+ return tag;
14
+ };
15
+ //# sourceMappingURL=customElements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customElements.js","sourceRoot":"","sources":["../../src/utils/customElements.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,EAAE;IACpD,wCAAwC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAExD,iCAAiC;IACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,GAAG,EAAE,CAAA;IACxB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const hash: (data: string, seed?: number) => number;
@@ -0,0 +1,17 @@
1
+ // Based on https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480#52171480
2
+ // This is a simple hash function for strings. It's not secure, but it's fast.
3
+ // It's not suitable for cryptographic purposes, but it's great for hash tables.
4
+ export const hash = (data, seed = 0) => {
5
+ let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
6
+ for (let i = 0, ch; i < data.length; i++) {
7
+ ch = data.charCodeAt(i);
8
+ h1 = Math.imul(h1 ^ ch, 2654435761);
9
+ h2 = Math.imul(h2 ^ ch, 1597334677);
10
+ }
11
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
12
+ h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
13
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
14
+ h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
15
+ return 4294967296 * (2097151 & h2) + (h1 >>> 0);
16
+ };
17
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE;IAC7C,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,EACxB,EAAE,GAAG,UAAU,GAAG,IAAI,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACvB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;QACnC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;IACrC,CAAC;IACD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAC5C,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAC7C,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAC5C,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAA;IAE7C,OAAO,UAAU,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AACjD,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This function is much slower than JSON parse without reviver and is a major
3
+ * bottleneck in the runtime performance. Especially during startup.
4
+ */
5
+ export declare function parseJSONWithDate(input: string): any;
@@ -0,0 +1,16 @@
1
+ const iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:.\d{1,3})?Z$/;
2
+ /**
3
+ * This function is much slower than JSON parse without reviver and is a major
4
+ * bottleneck in the runtime performance. Especially during startup.
5
+ */
6
+ export function parseJSONWithDate(input) {
7
+ return JSON.parse(input, (_, value) => {
8
+ if (typeof value === 'string' &&
9
+ value.length === 24 &&
10
+ iso8601Regex.test(value)) {
11
+ return new Date(value);
12
+ }
13
+ return value;
14
+ });
15
+ }
16
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,qDAAqD,CAAA;AAE1E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACpC,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,CAAC,MAAM,KAAK,EAAE;YACnB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,CAAC;YACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const stableStringify: (obj: any) => string;
2
+ export declare const sha1: (data: any) => Promise<string>;
@@ -0,0 +1,13 @@
1
+ import { deepSortObject } from './collections';
2
+ export const stableStringify = (obj) => JSON.stringify(deepSortObject(obj));
3
+ export const sha1 = async (data) => {
4
+ const payload = new Uint8Array(stableStringify(data)
5
+ .split('')
6
+ .map(function (c) {
7
+ return c.charCodeAt(0);
8
+ }));
9
+ const hashBuffer = await crypto.subtle.digest('SHA-1', payload);
10
+ const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
11
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
12
+ };
13
+ //# sourceMappingURL=sha1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha1.js","sourceRoot":"","sources":["../../src/utils/sha1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;AAEhF,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;IACtC,MAAM,OAAO,GAAG,IAAI,UAAU,CAC5B,eAAe,CAAC,IAAI,CAAC;SAClB,KAAK,CAAC,EAAE,CAAC;SACT,GAAG,CAAC,UAAU,CAAC;QACd,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC,CAAC,CACL,CAAA;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA,CAAC,+BAA+B;IACxF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvE,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare const isLocalhostUrl: (hrefOrOrigin: string) => boolean;
2
+ export declare const isLocalhostHostname: (hostname: string) => hostname is "localhost" | "127.0.0.1";
3
+ export declare const validateUrl: (url?: string | null, base?: string) => false | URL;
4
+ export declare const PROXY_URL_HEADER = "x-toddle-url";
5
+ export declare const REWRITE_HEADER = "x-toddle-rewrite";
@@ -0,0 +1,27 @@
1
+ const LOCALHOSTS = ['http://localhost:54404', 'http://preview.localhost:54404'];
2
+ export const isLocalhostUrl = (hrefOrOrigin) => LOCALHOSTS.some((host) => hrefOrOrigin.startsWith(host));
3
+ export const isLocalhostHostname = (hostname) => hostname === 'localhost' || hostname === '127.0.0.1';
4
+ export const validateUrl = (url, base) => {
5
+ if (typeof url !== 'string') {
6
+ return false;
7
+ }
8
+ try {
9
+ const urlObject = new URL(url, base);
10
+ // Creating a new URL object will not correctly encode the search params
11
+ // So we need to iterate over them to make sure they are encoded as that happens when setting them explicitly
12
+ const searchCopy = new URLSearchParams(urlObject.searchParams);
13
+ searchCopy.forEach((value, key) => {
14
+ urlObject.searchParams.delete(key, value);
15
+ });
16
+ searchCopy.forEach((value, key) => {
17
+ urlObject.searchParams.append(key, value);
18
+ });
19
+ return urlObject;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ };
25
+ export const PROXY_URL_HEADER = 'x-toddle-url';
26
+ export const REWRITE_HEADER = 'x-toddle-rewrite';
27
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,wBAAwB,EAAE,gCAAgC,CAAC,CAAA;AAE/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAE,EAAE,CACrD,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAE,EAAE,CACtD,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,CAAA;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAmB,EAAE,IAAa,EAAE,EAAE;IAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACpC,wEAAwE;QACxE,6GAA6G;QAC7G,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC9D,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAA;AAE9C,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const isDefined: <T>(value: T | undefined | null) => value is T;
2
+ export declare const isObject: (input: any) => input is Record<string, any>;
3
+ export declare const toBoolean: (value: any) => boolean;
@@ -0,0 +1,4 @@
1
+ export const isDefined = (value) => value !== null && value !== undefined;
2
+ export const isObject = (input) => typeof input === 'object' && input !== null;
3
+ export const toBoolean = (value) => value !== false && value !== undefined && value !== null;
4
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,KAA2B,EAAc,EAAE,CACtE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAgC,EAAE,CACnE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE,CACtC,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAA"}
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@nordcraft/core",
3
+ "license": "Apache-2.0",
4
+ "type": "module",
5
+ "homepage": "https://github.com/nordcraftengine/nordcraft",
6
+ "devDependencies": {
7
+ "@types/react": "19.1.2"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "npm-publish": "bun run build && bun publish --access public",
12
+ "typecheck": "tsc --noEmit",
13
+ "watch": "tsc -w"
14
+ },
15
+ "files": ["dist", "src"],
16
+ "main": "dist/index.js",
17
+ "version": "1.0.0"
18
+ }