zerotal 1.7.4 → 1.8.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 (2) hide show
  1. package/api-surface.md +29 -168
  2. package/package.json +12 -12
package/api-surface.md CHANGED
@@ -686,8 +686,6 @@ function data_get = (target: unknown, key: string, defaultValue?: unknown) => un
686
686
 
687
687
  function deepMerge = <T extends object>(base: T, override: DeepPartial<T>) => T
688
688
 
689
- function deployEnv = () => string
690
-
691
689
  function devSurfacesEnabled = () => boolean
692
690
 
693
691
  function env = { (key: string): string | undefined; (key: string, fallback: string): string; (key: string, fallback: boolean): boolean; (key: string, fallback: number): number;}
@@ -704,8 +702,6 @@ function inject = (...tokens: BindingToken[]) => (target: new (...args: any[]) =
704
702
 
705
703
  function isDevSurfaceAllowed = (env: string) => boolean
706
704
 
707
- function isProdLike = (env: string) => boolean
708
-
709
705
  function json = (data: unknown, status?: number) => void
710
706
 
711
707
  function make = <T>(token: BindingToken<T>) => Promise<T>
@@ -728,8 +724,6 @@ function redirect = { (url: string, status?: 301 | 302 | 303 | 307 | 308): Re
728
724
 
729
725
  function redirectTo = <N extends RouteTarget>(name: N, params?: RouteParamsArg<N>, status?: 301 | 302 | 303 | 307 | 308) => ResponseBuilder
730
726
 
731
- function registerAppScope = (installer: AppScopeInstaller) => void
732
-
733
727
  function registerErrorDiagnoser = (diagnoser: ErrorDiagnoser) => void
734
728
 
735
729
  function registerFileRouteResolver = (resolver: FileRouteResolver) => void
@@ -754,8 +748,6 @@ function setAppEnv = (command?: string) => void
754
748
 
755
749
  function setCurrentPageResolver = (resolver: CurrentPageResolver) => void
756
750
 
757
- function setImplicitModelResolver = (fn: ((paramName: string) => ModelBindingResolver | undefined) | null) => void
758
-
759
751
  function sha256Hex = (input: string | Uint8Array) => string
760
752
 
761
753
  function singularize = (value: string) => string
@@ -1114,8 +1106,6 @@ type ArgDef = { name: string; required?: boolean; default?: string;}
1114
1106
 
1115
1107
  type BindingToken = ClassToken<T> | AbstractToken<T> | keyof ContainerBindings
1116
1108
 
1117
- type ClassRef = abstract new (...args: never[]) => unknown
1118
-
1119
1109
  type ContextKey = never
1120
1110
 
1121
1111
  type ContextValue = ContextRegistry[K]
@@ -2094,8 +2084,6 @@ const TWO_FACTOR_SESSION_KEY = 'two_factor_confirmed'
2094
2084
 
2095
2085
  const TwoFactor = TwoFactorService
2096
2086
 
2097
- function _attachModelPermissions = (modelType: string, modelId: unknown, permissionIds: number[]) => Promise<void>
2098
-
2099
2087
  function AuthConfig = (options?: Partial<AuthConfigShape>) => AuthConfigShape
2100
2088
 
2101
2089
  function Authenticatable = <TBase extends Constructor>(Base: TBase) => { new (...args: any[]): Authenticatable; prototype: Authenticatable<any>.Authenticatable;} & TBase
@@ -2313,11 +2301,6 @@ interface RememberMeOptions = {
2313
2301
  secure?: boolean
2314
2302
  }
2315
2303
 
2316
- interface SocialHttpContext = {
2317
- redirect: (url: string) => void
2318
- request: { readonly method: string; readonly url: string; formData(): Promise<FormData>;}
2319
- }
2320
-
2321
2304
  interface SocialSession = {
2322
2305
  forget: (key: string) => void
2323
2306
  get: <T>(key: string) => T | undefined
@@ -3196,35 +3179,6 @@ class CssBuildCommand = {
3196
3179
  write: (msg: string) => void
3197
3180
  }
3198
3181
 
3199
- class DeployCommand = {
3200
- new (): DeployCommand
3201
- static args: ArgDef[]
3202
- static commandName: string
3203
- static description: string
3204
- static flags: ({ name: string; type: 'boolean'; description: string; default: boolean;} | { name: string; type: 'string'; description: string; default?: never;})[]
3205
- static needsApp: boolean
3206
- static target: string
3207
- _readLine: () => Promise<string>
3208
- _writer: OutputWriter
3209
- app: unknown
3210
- args: Record<string, string>
3211
- ask: (question: string, defaultValue?: string) => Promise<string>
3212
- choice: (question: string, options: string[]) => Promise<string>
3213
- confirm: (question: string, defaultValue?: boolean) => Promise<boolean>
3214
- dim: (msg: string) => void
3215
- error: (msg: string) => void
3216
- flags: Record<string, string | number | boolean>
3217
- info: (msg: string) => void
3218
- line: (msg: string) => void
3219
- newLine: () => void
3220
- run: () => Promise<void>
3221
- secret: (question: string) => Promise<string>
3222
- section: (title: string) => void
3223
- table: (rows: [string, string][], indent?: number) => void
3224
- warn: (msg: string) => void
3225
- write: (msg: string) => void
3226
- }
3227
-
3228
3182
  class DevCommand = {
3229
3183
  new (): DevCommand
3230
3184
  static aliases: string[]
@@ -3957,6 +3911,34 @@ class TestCommand = {
3957
3911
  write: (msg: string) => void
3958
3912
  }
3959
3913
 
3914
+ class UpgradeCommand = {
3915
+ new (): UpgradeCommand
3916
+ static args: ArgDef[]
3917
+ static commandName: string
3918
+ static description: string
3919
+ static flags: ({ name: string; type: 'string'; description: string; default: string; short?: never;} | { name: string; short: string; type: 'boolean'; description: string; default: boolean;} | { name: string; short: string; type: 'string'; description: string; default: string;})[]
3920
+ static needsApp: boolean
3921
+ _readLine: () => Promise<string>
3922
+ _writer: OutputWriter
3923
+ app: unknown
3924
+ args: Record<string, string>
3925
+ ask: (question: string, defaultValue?: string) => Promise<string>
3926
+ choice: (question: string, options: string[]) => Promise<string>
3927
+ confirm: (question: string, defaultValue?: boolean) => Promise<boolean>
3928
+ dim: (msg: string) => void
3929
+ error: (msg: string) => void
3930
+ flags: Record<string, string | number | boolean>
3931
+ info: (msg: string) => void
3932
+ line: (msg: string) => void
3933
+ newLine: () => void
3934
+ run: () => Promise<void>
3935
+ secret: (question: string) => Promise<string>
3936
+ section: (title: string) => void
3937
+ table: (rows: [string, string][], indent?: number) => void
3938
+ warn: (msg: string) => void
3939
+ write: (msg: string) => void
3940
+ }
3941
+
3960
3942
  class WorkerCommand = {
3961
3943
  new (): WorkerCommand
3962
3944
  static aliases: string[]
@@ -3986,8 +3968,6 @@ class WorkerCommand = {
3986
3968
  write: (msg: string) => void
3987
3969
  }
3988
3970
 
3989
- function makeDeployCommand = (target: string) => DeployCommandClass
3990
-
3991
3971
  ## ./config `(./src/config-reexport.ts)`
3992
3972
 
3993
3973
  class ConfigLoader = {
@@ -4181,8 +4161,6 @@ const SERVER_PROCESS_NAME = 'server'
4181
4161
 
4182
4162
  function bootBuildDecision = (outDirs: string[], env: string | undefined) => Promise<BootBuildDecision>
4183
4163
 
4184
- function browserEnvDefines = (isProduction: boolean) => Record<string, string>
4185
-
4186
4164
  function buildCssBundle = (input: string, outdir: string, minify?: boolean, loader?: Record<string, string>) => Promise<BundleResult>
4187
4165
 
4188
4166
  function buildJsBundle = (input: string, outdir: string, minify?: boolean) => Promise<BundleResult>
@@ -4193,19 +4171,14 @@ function createDeck = (options: DeckOptions) => Deck
4193
4171
 
4194
4172
  function detectCssPlugins = (cwd: string) => Promise<BunPlugin[]>
4195
4173
 
4196
- function isDevOrchestrated = (env?: Record<string, string | undefined>, argv?: readonly string[]) => boolean
4197
-
4198
4174
  function isWritableDir = (dir: string) => Promise<boolean>
4199
4175
 
4200
- function pruneBuildOutput = (outdir: string, outputs: readonly { path: string;}[]) => Promise<string[]>
4201
-
4202
- function registerDevBuildHook = (name: string, fn: BuildHookFn) => void
4203
-
4204
4176
  function registerDevHtmlSnippet = (name: string, fn: DevHtmlSnippet) => void
4205
4177
 
4206
4178
  function startDevMode = (options: StartDevModeOptions) => Promise<void>
4207
4179
 
4208
4180
  interface AssetBuildConfig = {
4181
+ clean?: boolean
4209
4182
  entrypoint: string | string[]
4210
4183
  loader?: Record<string, string>
4211
4184
  minify: boolean
@@ -4878,8 +4851,6 @@ class StackChannel = {
4878
4851
 
4879
4852
  const Log = LogManager
4880
4853
 
4881
- function frameworkLog = (scope: string) => BoundLogger
4882
-
4883
4854
  function LoggingConfig = (options?: Partial<LoggingConfigShape>) => LoggingConfigShape
4884
4855
 
4885
4856
  function renderTable = (data: TableData, indent?: number) => string[]
@@ -4946,12 +4917,6 @@ class BunImageDriver = {
4946
4917
  readonly supportsCrop: true
4947
4918
  }
4948
4919
 
4949
- class ConversionRunner = {
4950
- new (driver: ImageDriver, config: MediaConfigShape): ConversionRunner
4951
- run: (media: MediaItem, conversions: ConversionMap) => Promise<{ generated: string[]; failed: Array<{ name: string; reason: string; }>;}>
4952
- runResponsive: (media: MediaItem, widths: number[]) => Promise<ResponsiveImageSet | null>
4953
- }
4954
-
4955
4920
  class DefaultPathGenerator = {
4956
4921
  new (prefix?: string): DefaultPathGenerator
4957
4922
  forConversions: (media: MediaItem) => string
@@ -5214,42 +5179,12 @@ const MediaFake = { all(owner: { id: number | string; construct
5214
5179
 
5215
5180
  const MediaLibrary = MediaManager
5216
5181
 
5217
- const mediaSchemaConcern = ConcernDescriptor
5218
-
5219
- function applyRetentionRules = (modelType: string, modelId: number | string, collection: string, definition: CollectionDefinition, justAdded: MediaItem) => Promise<void>
5220
-
5221
- function collectionNames = (host: CollectionHost) => string[]
5222
-
5223
- function defaultDiskName = () => string
5224
-
5225
- function diskFor = (name?: string | null) => StorageDriver
5226
-
5227
- function dispatchConversions = (mediaId: number, conversions: string[]) => Promise<void>
5228
-
5229
- function fromDisk = (path: string, disk?: string) => SourceResolver
5230
-
5231
- function fromPath = (path: string) => SourceResolver
5232
-
5233
- function fromUrl = (url: string, maxBytes: number) => SourceResolver
5234
-
5235
- function fromValue = (source: MediaSource, fileName?: string) => SourceResolver
5236
-
5237
- function hasCollection = (host: CollectionHost, name: string) => boolean
5238
-
5239
5182
  function isConvertible = (mimeType: string | null | undefined) => boolean
5240
5183
 
5241
- function isQueueAvailable = () => boolean
5242
-
5243
5184
  function Media = <TBase extends Constructor>(Base: TBase) => { new (...args: any[]): MediaModel; prototype: Media<any>.MediaModel; mediaCollections: MediaCollections;} & TBase
5244
5185
 
5245
5186
  function MediaConfig = (options?: Partial<MediaConfigShape>) => MediaConfigShape
5246
5187
 
5247
- function mediaDefaults = () => MediaConfigShape
5248
-
5249
- function pathGenerator = () => PathGenerator
5250
-
5251
- function resolveCollection = (host: CollectionHost, name: string) => CollectionDefinition
5252
-
5253
5188
  function setPathGenerator = (generator: PathGenerator) => void
5254
5189
 
5255
5190
  interface CleanReport = {
@@ -5271,11 +5206,6 @@ interface CollectionDefinition = {
5271
5206
  single?: boolean
5272
5207
  }
5273
5208
 
5274
- interface CollectionHost = {
5275
- mediaCollections?: MediaCollections
5276
- name: string
5277
- }
5278
-
5279
5209
  interface ConversionDefinition = {
5280
5210
  allowEnlargement?: boolean
5281
5211
  fit?: ConversionFit
@@ -5363,11 +5293,6 @@ interface PendingMediaMeta = {
5363
5293
  order?: number
5364
5294
  }
5365
5295
 
5366
- interface ResolvedSource = {
5367
- bytes: Uint8Array<ArrayBufferLike>
5368
- originalName: string
5369
- }
5370
-
5371
5296
  interface ResponsiveImage = {
5372
5297
  fileName: string
5373
5298
  height: number
@@ -5391,8 +5316,6 @@ type MediaSource = UploadedFile | File | Blob | Uint8Array | ArrayBuffer
5391
5316
 
5392
5317
  type SafeConversionFormat = 'jpeg' | 'png' | 'webp'
5393
5318
 
5394
- type SourceResolver = () => Promise<ResolvedSource>
5395
-
5396
5319
  ## ./metrics `(./src/metrics.ts)`
5397
5320
 
5398
5321
  function beginHttp = () => void
@@ -5691,13 +5614,6 @@ class ForeignKeyBuilder = {
5691
5614
  toConstraintSQL: () => string
5692
5615
  }
5693
5616
 
5694
- class HookRegistry = {
5695
- new (): HookRegistry
5696
- static onAfterRun: ((ModelClass: ClassRef, hook: HookName, model: unknown) => void) | undefined
5697
- static register: <T>(ModelClass: ClassRef, hook: HookName, fn: HookFn<T>) => void
5698
- static run: <T>(ModelClass: ClassRef, hook: HookName, model: T) => Promise<void>
5699
- }
5700
-
5701
5617
  class JsonCast = {
5702
5618
  new <T = unknown>(mapper?: CastMapper<T> | undefined): JsonCast<T>
5703
5619
  fields: () => CastField[]
@@ -6215,14 +6131,10 @@ class UnsupportedDialectError = {
6215
6131
  readonly status: number
6216
6132
  }
6217
6133
 
6218
- const columnRegistry = Map<ClassRef, Map<string, ColumnOptions>>
6219
-
6220
6134
  const DB = { table(tableName: string): QueryBuilder; raw<T = Record<string, unknown>>(sql: TemplateStringsArray | string, ...rest: unknown[]): Promise<T[]>; transaction<T>(callback: (tx?: SQLInstance) => Promise<T>, attempts?: number): Promise<T>; beginTransaction(): Promise<ManualTransaction>; onPrimary(): { table(name: string): QueryBuilder; }; currentTx(): unknown | undefined; advisoryLock<T>(key: number, callback: () => Promise<T>): Promise<T>; preventNPlusOne(options?: NPlusOneOptions): void; allowNPlusOne(pattern: string, options?: { once?: boolean; }): void;}
6221
6135
 
6222
6136
  const ModelInspector = { load(pattern: string, cwd?: string): Promise<void>; all(): ModelSchema[]; fromClass(ctor: ClassRef): ModelSchema | null;}
6223
6137
 
6224
- const modelsByName = Map<string, ClassRef>
6225
-
6226
6138
  const relationRegistry = Map<ClassRef, Map<string, RelationMetadata>>
6227
6139
 
6228
6140
  const Schema = { create(table: string, callback: (bp: Blueprint) => void): Promise<void>; createIfNotExists(table: string, callback: (bp: Blueprint) => void): Promise<void>; table(name: string, callback: (bp: Blueprint) => void): Promise<void>; alter(name: string, callback: (bp: Blueprint) => void): Promise<void>; drop(table: string): Promise<void>; dropIfExists(table: string): Promise<void>; rename(from: string, to: string): Promise<void>; hasTable(table: string): Promise<boolean>; hasColumn(table: string, column: string): Promise<boolean>;}
@@ -6233,32 +6145,14 @@ const SchemaInspector = { tables(): Promise<string[]>; columns(table: stri
6233
6145
 
6234
6146
  const TransactionContext = AsyncLocalStorage<SQLInstance>
6235
6147
 
6236
- function _clearModelConnections = () => void
6237
-
6238
- function _clearTransitionCallbacks = () => void
6239
-
6240
6148
  function _getConnection = () => SQLInstance
6241
6149
 
6242
6150
  function _getDbConnectionOverride = () => SQLInstance | null
6243
6151
 
6244
- function _getDialect = () => 'sqlite' | 'postgres' | 'mysql'
6245
-
6246
- function _getModelConnection = () => SQLInstance
6247
-
6248
6152
  function _globalScopeRegistry = () => Map<ClassRef, Map<string, GlobalScopeCallback>>
6249
6153
 
6250
- function _normaliseSqliteUrl = (raw: string) => string
6251
-
6252
- function _resolveConn = (ModelClass?: typeof BaseModel) => SQLInstance
6253
-
6254
- function _setBaseModelConnection = (conn: SQLInstance | null) => void
6255
-
6256
- function _setBaseModelDialect = (dialect: 'sqlite' | 'postgres' | 'mysql') => void
6257
-
6258
6154
  function _setDbConnection = (conn: SQLInstance | null) => void
6259
6155
 
6260
- function _setQueryBuilderDialect = (d: Dialect) => void
6261
-
6262
6156
  function _setReadReplicas = (primary: SQLInstance, replicas: SQLInstance[]) => void
6263
6157
 
6264
6158
  function _suppressHooks = <T>(fn: () => Promise<T>) => Promise<T>
@@ -6271,8 +6165,6 @@ function belongsTo = (related: () => unknown, options: BelongsToOptions) => (_va
6271
6165
 
6272
6166
  function column = { (): ColumnDecorator; (type: ColumnShorthand): ColumnDecorator; (options: ColumnOptions): ColumnDecorator; (type: ColumnShorthand, options: Omit<ColumnOptions, 'type'>): ColumnDecorator;}
6273
6167
 
6274
- function columnsFor = (ctor: ClassRef) => Map<string, ColumnOptions> | null
6275
-
6276
6168
  function createReadWriteRouter = (primary: SQLInstance, replicas: SQLInstance[]) => SQLInstance
6277
6169
 
6278
6170
  function currentOrmContext = () => OrmContext
@@ -6299,10 +6191,6 @@ function json = <T = unknown>(mapper?: CastMapper<T>) => JsonCast<T>
6299
6191
 
6300
6192
  function manyToMany = (related: () => unknown, options: ManyToManyOptions) => (_value: unknown, context: ClassFieldDecoratorContext) => void
6301
6193
 
6302
- function modelByName = (name: string) => ClassRef | undefined
6303
-
6304
- function modelForParam = (paramName: string) => ImplicitModel | undefined
6305
-
6306
6194
  function morphedByMany = (related: () => unknown, options: MorphedByManyOptions) => (_value: unknown, context: ClassFieldDecoratorContext) => void
6307
6195
 
6308
6196
  function morphMany = (related: () => unknown, options: MorphManyOptions) => (_value: unknown, context: ClassFieldDecoratorContext) => void
@@ -6317,14 +6205,10 @@ function objectOf = <T = unknown>(mapper?: CastMapper<T>) => JsonCast<T>
6317
6205
 
6318
6206
  function preventNPlusOne = (options?: NPlusOneOptions) => void
6319
6207
 
6320
- function registerColumn = (ctor: ClassRef, name: string, options: ColumnOptions) => void
6321
-
6322
6208
  function registerConnectionResolver = (fn: ContextConnectionResolver | null) => void
6323
6209
 
6324
6210
  function registerImplicitBinding = () => void
6325
6211
 
6326
- function registerModel = (ctor: ClassRef) => void
6327
-
6328
6212
  function registerModelConnection = (name: string, conn: SQLInstance, dialect?: Dialect) => void
6329
6213
 
6330
6214
  function resetOrmContext = () => void
@@ -6620,21 +6504,6 @@ interface PaginateResult = {
6620
6504
  url: (page: number, baseUrl?: string, query?: Record<string, string>) => string
6621
6505
  }
6622
6506
 
6623
- interface QueryState = {
6624
- distinct: boolean
6625
- groupBys: string[]
6626
- havings: HavingClause[]
6627
- joins: JoinClause[]
6628
- limit: number | undefined
6629
- lock: string | undefined
6630
- offset: number | undefined
6631
- orders: OrderClause[]
6632
- selects: string[]
6633
- table: string
6634
- unions: UnionClause[]
6635
- wheres: WhereClause[]
6636
- }
6637
-
6638
6507
  interface RelationMetadata = {
6639
6508
  firstKey?: string
6640
6509
  foreignKey: string
@@ -6729,8 +6598,6 @@ interface TransitionContext = {
6729
6598
 
6730
6599
  type CastMapper = ((raw: unknown) => T) | (new (...args: never[]) => T)
6731
6600
 
6732
- type ClassRef = abstract new (...args: never[]) => unknown
6733
-
6734
6601
  type Columns = { [K in keyof T & string]: K extends `_${string}` ? never : T[K] extends (...args: any[]) => any ? never : K; }[keyof T & string]
6735
6602
 
6736
6603
  type ColumnShorthand = 'string' | 'text' | 'integer' | 'number' | 'float' | 'boolean' | 'datetime' | 'date' | 'json' | 'array' | 'encrypted' | 'encrypted:json'
@@ -7096,17 +6963,11 @@ function hasRoute = (name: string) => boolean
7096
6963
 
7097
6964
  function resetRoutes = () => void
7098
6965
 
7099
- function routeMethod = (name: string) => string | undefined
7100
-
7101
6966
  interface RouteAction = {
7102
6967
  method: string
7103
6968
  url: string
7104
6969
  }
7105
6970
 
7106
- interface RouteMethodRegistry = {}
7107
-
7108
- type MethodedRouteName = never
7109
-
7110
6971
  type RouteArgs = [params?: RouteParamValues, query?: RouteQuery]
7111
6972
 
7112
6973
  type RouteParamValues = { [x: string]: RouteParamValue | readonly RouteParamValue[];}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zerotal",
3
- "version": "1.7.4",
3
+ "version": "1.8.0",
4
4
  "license": "MIT",
5
5
  "maturity": "stable",
6
6
  "private": false,
@@ -61,17 +61,17 @@
61
61
  "typecheck": "tsc --noEmit"
62
62
  },
63
63
  "dependencies": {
64
- "@zerotal/auth": "1.7.4",
65
- "@zerotal/cache": "1.7.4",
66
- "@zerotal/client": "1.7.4",
67
- "@zerotal/core": "1.7.4",
68
- "@zerotal/media": "1.7.4",
69
- "@zerotal/orm": "1.7.4",
70
- "@zerotal/queue": "1.7.4",
71
- "@zerotal/scheduler": "1.7.4",
72
- "@zerotal/session": "1.7.4",
73
- "@zerotal/testing": "1.7.4",
74
- "@zerotal/validator": "1.7.4"
64
+ "@zerotal/auth": "1.8.0",
65
+ "@zerotal/cache": "1.8.0",
66
+ "@zerotal/client": "1.8.0",
67
+ "@zerotal/core": "1.8.0",
68
+ "@zerotal/media": "1.8.0",
69
+ "@zerotal/orm": "1.8.0",
70
+ "@zerotal/queue": "1.8.0",
71
+ "@zerotal/scheduler": "1.8.0",
72
+ "@zerotal/session": "1.8.0",
73
+ "@zerotal/testing": "1.8.0",
74
+ "@zerotal/validator": "1.8.0"
75
75
  },
76
76
  "devDependencies": {
77
77
  "typescript": "^5.8.0"