typed-locales 1.0.9 → 1.0.11
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/dist/index.d.ts +21 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/src/react.d.ts +15 -0
- package/dist/src/react.d.ts.map +1 -0
- package/dist/src/react.js +3 -3
- package/dist/src/tests/config.d.ts +16 -0
- package/dist/src/tests/config.d.ts.map +1 -0
- package/dist/src/tests/config.js +2 -4
- package/dist/src/tests/translations/en.d.ts.map +1 -1
- package/dist/src/tests/translations/es.d.ts.map +1 -1
- package/dist/src/validation.d.ts +6 -6
- package/dist/src/validation.d.ts.map +1 -1
- package/others/i18n-ally-custom-framework.yml +33 -0
- package/package.json +3 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import baseFormatters from './src/formatters';
|
|
2
2
|
import type { Formatter } from './src/formatters';
|
|
3
3
|
type ValueType = null | number | string | undefined | object;
|
|
4
|
-
export
|
|
4
|
+
export interface DefaultOverrides {
|
|
5
|
+
shape: any;
|
|
6
|
+
extraFormatters?: Record<string, Formatter>;
|
|
7
|
+
locales: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Overrides extends DefaultOverrides {
|
|
10
|
+
}
|
|
11
|
+
export type Translations = Overrides['shape'];
|
|
12
|
+
export type OtherTranslations = DeepStringify<Translations>;
|
|
13
|
+
export type TranslationSchema = GenerateTranslationType<Translations>;
|
|
14
|
+
export type Locales = Overrides['locales'];
|
|
15
|
+
export type BaseFormatters = typeof baseFormatters;
|
|
16
|
+
export type ExtraFormatters = Overrides['extraFormatters'];
|
|
17
|
+
export type Formatters = BaseFormatters & ExtraFormatters;
|
|
18
|
+
export type FormattersKeys = keyof Formatters;
|
|
19
|
+
export type PossibleTranslationKeys = DotNestedLeafKeys<Translations>;
|
|
5
20
|
export type InternalDeepStringify<T> = {
|
|
6
21
|
[K in keyof T]: T[K] extends string ? string : T[K] extends object ? InternalDeepStringify<T[K]> : never;
|
|
7
22
|
};
|
|
@@ -21,12 +36,13 @@ type DotNestedLeafKeys<T> = {
|
|
|
21
36
|
}[keyof T];
|
|
22
37
|
type GenerateStringFromProperties<T extends Record<string, any>> = T extends Record<string, never> ? string : `${string}{${keyof T & string}${string}` | `${string}{${keyof T & string}|${string}}${string}`;
|
|
23
38
|
export type GenerateTranslationType<T> = {
|
|
24
|
-
-readonly [K in keyof T]: T[K] extends object ? Simplify<GenerateTranslationType<T[K]>> : GenerateStringFromProperties<InterpolationProperties<RemovePluralSuffix<T[K] & string>, IsPlural<
|
|
39
|
+
-readonly [K in keyof T]: T[K] extends object ? Simplify<GenerateTranslationType<T[K]>> : GenerateStringFromProperties<InterpolationProperties<RemovePluralSuffix<T[K] & string>, IsPlural<RemovePluralSuffix<K & string>>>>;
|
|
25
40
|
};
|
|
26
41
|
type ExtractPlaceholders<T extends string> = T extends `${infer _Start}{${infer Placeholder}}${infer Rest}` ? (Placeholder extends `${infer Name}|${infer _Formatters}` ? Name : Placeholder) | ExtractPlaceholders<Rest> : never;
|
|
27
42
|
type HasPluralKeys<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? HasPluralKeys<T[K], Rest> : false : PluralKeys<Path> & keyof T extends never ? false : true;
|
|
28
|
-
type IsPlural<
|
|
29
|
-
type
|
|
43
|
+
type IsPlural<Path extends string> = HasPluralKeys<Translations, Path>;
|
|
44
|
+
type InternalGetValue<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? InternalGetValue<T[K], Rest> : never : Path extends keyof T ? T[Path] : T[PluralKeys<Path> & keyof T];
|
|
45
|
+
type GetValue<Path extends string> = InternalGetValue<Translations, Path>;
|
|
30
46
|
type InterpolationProperties<S extends string, IsPlural extends boolean> = IsPlural extends true ? {
|
|
31
47
|
count: number;
|
|
32
48
|
} & {
|
|
@@ -41,7 +57,7 @@ type DeepOmitNever<T> = {
|
|
|
41
57
|
[K in keyof T as T[K] extends never ? never : T[K] extends Record<string, any> ? DeepOmitNever<T[K]> extends never ? never : K : K]: T[K] extends Record<string, any> ? DeepOmitNever<T[K]> : T[K];
|
|
42
58
|
} extends infer U ? keyof U extends never ? never : U : never;
|
|
43
59
|
export type Simplify<T> = InternalSimplify<DeepOmitNever<T>>;
|
|
44
|
-
export declare const getTranslate:
|
|
60
|
+
export declare const getTranslate: (translations: Translations, locale: Locales, extraFormatters: ExtraFormatters) => <Key extends PossibleTranslationKeys>(key: Key, ...arguments_: InterpolationProperties<GetValue<Key>, IsPlural<Key>> extends Record<string, never> ? [] : [params: Simplify<InterpolationProperties<GetValue<Key> & string, IsPlural<Key>>>]) => GetValue<Key>;
|
|
45
61
|
export { initReact } from './src/react';
|
|
46
62
|
export { type Formatter, default as defaultFormatters } from './src/formatters';
|
|
47
63
|
export { type ValidateTranslation, type EnsureValidTranslation } from './src/validation';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import baseFormatters from './src/formatters';
|
|
2
|
+
;
|
|
3
|
+
;
|
|
2
4
|
// Given a translations object returns a function that can be used to translate keys
|
|
3
5
|
export const getTranslate = (translations, locale, extraFormatters) => {
|
|
4
6
|
const formatters = { ...baseFormatters, ...extraFormatters };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { getTranslate, type Locales, type ExtraFormatters, type OtherTranslations } from '../index';
|
|
3
|
+
export interface TranslationContextType {
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
locale: Locales;
|
|
6
|
+
setLocale: (locale: Locales) => void;
|
|
7
|
+
t: ReturnType<typeof getTranslate>;
|
|
8
|
+
}
|
|
9
|
+
export declare const initReact: (allTranslations: Record<Locales, OtherTranslations | (() => Promise<OtherTranslations>)>, initialLocale: Locales, extraFormatters: ExtraFormatters) => {
|
|
10
|
+
TranslationProvider: ({ children }: {
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
useTranslation: () => TranslationContextType;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=react.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8C,MAAM,OAAO,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAqB,MAAM,UAAU,CAAC;AAEvH,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,SAAS,GACrB,iBAAiB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,CAAC,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EACxF,eAAe,OAAO,EACtB,iBAAiB,eAAe;wCAGW;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;CA0DxE,CAAC"}
|
package/dist/src/react.js
CHANGED
|
@@ -2,15 +2,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { createContext, useContext, useState } from 'react';
|
|
3
3
|
import { getTranslate } from '../index';
|
|
4
4
|
// Initial translation always should be loaded
|
|
5
|
-
export const initReact = (
|
|
5
|
+
export const initReact = (allTranslations, initialLocale, extraFormatters) => {
|
|
6
6
|
const TranslationContext = createContext(undefined);
|
|
7
7
|
const TranslationProvider = ({ children }) => {
|
|
8
8
|
const [locale, setLocale] = useState(initialLocale);
|
|
9
|
-
const [translate, setTranslate] = useState(() => getTranslate(
|
|
9
|
+
const [translate, setTranslate] = useState(() => getTranslate(allTranslations[locale], locale, extraFormatters));
|
|
10
10
|
const [isLoading, setIsLoading] = useState(true);
|
|
11
11
|
const loadTranslation = async (targetLocale) => {
|
|
12
12
|
try {
|
|
13
|
-
const translationOrLoader =
|
|
13
|
+
const translationOrLoader = allTranslations[targetLocale];
|
|
14
14
|
let translationData;
|
|
15
15
|
if (typeof translationOrLoader === 'function') {
|
|
16
16
|
setIsLoading(true);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import en from './translations/en';
|
|
2
|
+
declare const customFormatters: {
|
|
3
|
+
readonly myCustomFormatter: () => string;
|
|
4
|
+
};
|
|
5
|
+
export declare const useTranslation: () => import("../react").TranslationContextType, TranslationProvider: ({ children }: {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare module '../../index' {
|
|
9
|
+
interface Overrides {
|
|
10
|
+
shape: typeof en;
|
|
11
|
+
extraFormatters: typeof customFormatters;
|
|
12
|
+
locales: 'en' | 'es';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/tests/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAInC,QAAA,MAAM,gBAAgB;;CAEwB,CAAC;AAE/C,eAAO,MAAQ,cAAc,mDAAE,mBAAmB;;6CAAgD,CAAC;AAEnG,OAAO,QAAQ,aAAa,CAAC;IAC5B,UAAU,SAAS;QAClB,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,eAAe,EAAE,OAAO,gBAAgB,CAAC;QACzC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;KACrB;CACD"}
|
package/dist/src/tests/config.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { initReact } from '../react';
|
|
2
2
|
import en from './translations/en';
|
|
3
|
+
import es from './translations/es';
|
|
3
4
|
const customFormatters = {
|
|
4
5
|
myCustomFormatter: () => 'Hello im custom',
|
|
5
6
|
};
|
|
6
|
-
export const { useTranslation, TranslationProvider } = initReact({
|
|
7
|
-
en,
|
|
8
|
-
es: () => import('./translations/es').then(m => m.default),
|
|
9
|
-
}, 'en', customFormatters);
|
|
7
|
+
export const { useTranslation, TranslationProvider } = initReact({ en, es }, 'en', customFormatters);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/tests/translations/en.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/tests/translations/en.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BE,CAAC;AAEX,eAAe,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../../../src/tests/translations/es.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../../../src/tests/translations/es.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B8B,CAAC;AAEvC,eAAe,EAAE,CAAC"}
|
package/dist/src/validation.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FormattersKeys, RemoveReadonlyDeep } from "../index";
|
|
2
2
|
type ErrorMessage<Value extends string, T extends string> = `You are using an invalid formatter: ${T} in: "${Value}"`;
|
|
3
3
|
type ExtractFormatter<T extends string> = T extends `${string}{${string}|${infer F}}${string}` ? F : never;
|
|
4
4
|
type CountOpenBraces<T extends string, Count extends readonly unknown[] = []> = T extends `${infer First}${infer Rest}` ? First extends '{' ? CountOpenBraces<Rest, [...Count, unknown]> : CountOpenBraces<Rest, Count> : Count['length'];
|
|
5
5
|
type CountCloseBraces<T extends string, Count extends readonly unknown[] = []> = T extends `${infer First}${infer Rest}` ? First extends '}' ? CountCloseBraces<Rest, [...Count, unknown]> : CountCloseBraces<Rest, Count> : Count['length'];
|
|
6
6
|
type BalancedBraces<T extends string> = CountOpenBraces<T> extends CountCloseBraces<T> ? never : `Brackets are not balanced in: "${T}"`;
|
|
7
|
-
type ValidateFormatter<T extends string
|
|
8
|
-
type InternalValidateTranslation<T,
|
|
9
|
-
[K in keyof T]: InternalValidateTranslation<T[K],
|
|
10
|
-
} : T extends string ? ValidateFormatter<T
|
|
11
|
-
export type ValidateTranslation<T
|
|
7
|
+
type ValidateFormatter<T extends string> = ExtractFormatter<T> extends never ? BalancedBraces<T> : ExtractFormatter<T> extends FormattersKeys ? BalancedBraces<T> : ErrorMessage<T, ExtractFormatter<T>>;
|
|
8
|
+
type InternalValidateTranslation<T, KeyPath extends string = ''> = T extends Record<string, any> ? {
|
|
9
|
+
[K in keyof T]: InternalValidateTranslation<T[K], KeyPath extends '' ? K & string : `${KeyPath}.${K & string}`>;
|
|
10
|
+
} : T extends string ? ValidateFormatter<T> : T;
|
|
11
|
+
export type ValidateTranslation<T> = RemoveReadonlyDeep<InternalValidateTranslation<T>>;
|
|
12
12
|
export type EnsureValidTranslation<T extends never> = T;
|
|
13
13
|
export {};
|
|
14
14
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnE,KAAK,YAAY,CAAC,KAAK,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,uCAAuC,CAAC,SAAS,KAAK,GAAG,CAAC;AAGtH,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IACrC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAElE,KAAK,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,IAC3E,CAAC,SAAS,GAAG,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,GACrC,KAAK,SAAS,GAAG,GACjB,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,GAC1C,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,GAC5B,KAAK,CAAC,QAAQ,CAAC,CAAA;AAElB,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,SAAS,SAAS,OAAO,EAAE,GAAG,EAAE,IAC5E,CAAC,SAAS,GAAG,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,GACrC,KAAK,SAAS,GAAG,GACjB,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,GAC3C,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,GAC7B,KAAK,CAAC,QAAQ,CAAC,CAAA;AAGlB,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,IACnC,eAAe,CAAC,CAAC,CAAC,SAAS,gBAAgB,CAAC,CAAC,CAAC,GAC5C,KAAK,GACL,kCAAkC,CAAC,GAAG,CAAA;AAGzC,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,IACtC,gBAAgB,CAAC,CAAC,CAAC,SAAS,KAAK,GAC/B,cAAc,CAAC,CAAC,CAAC,GACjB,gBAAgB,CAAC,CAAC,CAAC,SAAS,cAAc,GAC1C,cAAc,CAAC,CAAC,CAAC,GACjB,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAGxC,KAAK,2BAA2B,CAAC,CAAC,EAAE,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7F;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;CAAE,GACnH,CAAC,SAAS,MAAM,GAChB,iBAAiB,CAAC,CAAC,CAAC,GACpB,CAAC,CAAC;AAEL,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# An array of strings which contain Language Ids defined by VS Code
|
|
2
|
+
# You can check available language ids here: https://code.visualstudio.com/docs/languages/identifiers
|
|
3
|
+
languageIds:
|
|
4
|
+
- javascript
|
|
5
|
+
- typescript
|
|
6
|
+
- javascriptreact
|
|
7
|
+
- typescriptreact
|
|
8
|
+
|
|
9
|
+
# An array of RegExes to find the key usage. **The key should be captured in the first match group**.
|
|
10
|
+
# You should unescape RegEx strings in order to fit in the YAML file
|
|
11
|
+
# To help with this, you can use https://www.freeformatter.com/json-escape.html
|
|
12
|
+
usageMatchRegex:
|
|
13
|
+
# The following example shows how to detect `t("your.i18n.keys")`
|
|
14
|
+
# the `{key}` will be placed by a proper keypath matching regex,
|
|
15
|
+
# you can ignore it and use your own matching rules as well
|
|
16
|
+
- "[^\\w\\d]t\\(\\s*['\"`]([\\w-.]+)['\"`]\\s*(?:,\\s*\\{[^\\}]*\\})?\\s*\\)"
|
|
17
|
+
|
|
18
|
+
# A RegEx to set a custom scope range. This scope will be used as a prefix when detecting keys
|
|
19
|
+
# and works like how the i18next framework identifies the namespace scope from the
|
|
20
|
+
# useTranslation() hook.
|
|
21
|
+
# You should unescape RegEx strings in order to fit in the YAML file
|
|
22
|
+
# To help with this, you can use https://www.freeformatter.com/json-escape.html
|
|
23
|
+
scopeRangeRegex: ""
|
|
24
|
+
|
|
25
|
+
# An array of strings containing refactor templates.
|
|
26
|
+
# The "$1" will be replaced by the keypath specified.
|
|
27
|
+
# Optional: uncomment the following two lines to use
|
|
28
|
+
|
|
29
|
+
# refactorTemplates:
|
|
30
|
+
# - i18n.get("$1")
|
|
31
|
+
|
|
32
|
+
# If set to true, only enables this custom framework (will disable all built-in frameworks)
|
|
33
|
+
monopoly: true
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typed-locales",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "Type safe utilities for translating strings",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "rimraf dist && tsc",
|
|
10
|
-
"dev": "tsx watch src/test.tsx"
|
|
10
|
+
"dev": "tsx watch src/test.tsx",
|
|
11
|
+
"deploy": "npm run build && npm publish --access public"
|
|
11
12
|
},
|
|
12
13
|
"keywords": [],
|
|
13
14
|
"author": "",
|